外接硬盘下载文件却占用Ubuntu系统根目录空间的问题求助
问题描述:
大家好,我碰到了一个非常诡异的问题,想请教各位大佬:
我的树莓派4上装了Ubuntu 22.04,系统盘是30GB的SSD,外接了一块WD 2TB的My Passport移动硬盘,挂载在/home/tomas/wdpassport目录下,专门用来存放下载的文件。
我现在用Python脚本把文件下载到这块外接硬盘里,但发现系统根分区(/dev/mmcblk0p2)的空间也在跟着被占用,更奇怪的是,我在树莓派里根本找不到这些占用空间的文件。而且把这块硬盘接到我的Ubuntu 22.04笔记本上,也会出现同样的问题——下载文件到硬盘时,笔记本的系统盘空间也被消耗。我试过换不同的目录挂载硬盘,情况还是一样。
下面是我用df -h命令查到的磁盘使用情况:
Filesystem Size Used Avail Use% Mounted on tmpfs 380M 3,7M 376M 1% /run /dev/mmcblk0p2 29G 17G 11G 62% / tmpfs 1,9G 0 1,9G 0% /dev/shm tmpfs 5,0M 4,0K 5,0M 1% /run/lock /dev/mmcblk0p1 253M 125M 128M 50% /boot/firmware tmpfs 379M 88K 379M 1% /run/user/1000 /dev/sda1 1,9T 327G 1,6T 18% /home/tomas/wdpassport
有没有人知道这到底是哪里出问题了?
可能的原因和排查解决步骤:
我根据经验整理了几个常见的排查方向,你可以逐一试试:
确认Python脚本的实际写入路径
有时候脚本里的路径可能写错了——比如用了相对路径,或者硬盘挂载失败时脚本默认写到了系统盘的用户目录/临时目录里。建议在脚本里添加一行代码,打印出文件的最终保存路径,比如:save_path = "/home/tomas/wdpassport/your_file.ext" print(f"正在保存文件到:{save_path}")确认路径确实指向外接硬盘的挂载点。
检查系统临时目录的缓存/残留文件
很多下载工具(包括Python的requests、urllib这类库)会先把文件下载到系统临时目录(比如/tmp,这个目录是挂载在根分区的),下载完成后再移动到目标路径。如果移动过程出错(比如权限不足、硬盘断开),临时文件就会留在系统盘里占用空间。- 可以用
sudo du -sh /tmp查看临时目录的占用大小; - 也可以用
sudo find / -type f -size +1G 2>/dev/null搜索根分区里的大文件,看看有没有残留的下载文件。
- 可以用
验证硬盘挂载是否真正生效
这是最常见的原因:如果硬盘挂载失败(比如硬盘休眠、挂载命令出错、权限问题),写入操作会“静默”落到系统盘的挂载点目录里(因为挂载点本身是根分区下的一个空目录)。- 用
mount命令查看挂载状态:mount | grep /dev/sda1,确认/dev/sda1确实挂载到了/home/tomas/wdpassport; - 做个小测试:在挂载点里新建一个文件,比如
touch /home/tomas/wdpassport/test.txt,然后拔掉硬盘,再看/home/tomas/wdpassport目录里还有没有这个文件——如果拔掉硬盘后文件还在,说明挂载没生效,文件其实一直写到了系统盘的目录里。
- 用
检查挂载点的符号链接或目录属性
如果挂载点目录之前是符号链接,指向了系统盘的其他位置,或者脚本里用了符号链接路径,也会导致写入到系统盘。可以用ls -l /home/tomas/wdpassport查看这个目录的属性,确认它是实际的目录而非符号链接。检查硬盘的文件系统和挂载参数
如果你的WD硬盘是NTFS格式,需要用ntfs-3g工具挂载。如果挂载参数不对(比如没开读写权限),可能会出现写入异常。用mount | grep /dev/sda1查看挂载参数,确认有rw(读写)权限,文件系统类型是ntfs-3g或者对应正确的格式。
备注:内容来源于stack exchange,提问作者Super Biscuit

