挂载点目录被覆盖后原文件不可见,是因为linux挂载机制会“遮蔽”挂载点原有内容而非删除;确认方法是执行sudo umount后立即ls -la,若出现旧文件即证实为覆盖;切勿在挂载状态下误删,以免损坏新挂载设备。

挂载点目录被覆盖后,ls 看不到原文件怎么办
挂载点目录本身不是空的,只是被新挂载的文件系统“盖住”了。原内容没丢,但当前 shell 下 ls 只能看到挂载进去的内容。这是 Linux 挂载机制的正常行为,不是 bug,也不是数据丢失。
怎么确认是挂载覆盖而非目录真为空
执行 findmnt /your/mount/point 或 mount | grep your_mount_point,如果有输出,说明已挂载;再用 lsblk -f 查看该设备是否确实有文件系统(比如 TYPE=ext4),且 MOUNTPOINT 字段指向该路径——这就基本锁定是覆盖问题。
更直接的验证:临时卸载它:sudo umount /your/mount/point,然后立刻 ls -la /your/mount/point。如果这时能看到一堆旧文件或子目录,就 100% 是覆盖。
- 别在卸载前删任何东西,尤其别
rm -rf挂载点下的内容——你删的是刚挂上去的盘,不是原目录 - 卸载失败常见于“设备忙”,用
lsof +D /your/mount/point或fuser -v /your/mount/point查占用进程 - 如果卸载后仍看不到原文件,说明原目录本来就是空的,或者被误删过
挂载覆盖导致 df 和 du 不一致怎么解释
当一个非空目录被挂载后,df 显示的是底层块设备的空间使用,而 du 默认只统计挂载点目录“可见层”的文件大小(即挂载进去的内容)。所以会出现:df 显示用了 80GB,du -sh /mnt/data 却只算出 2GB——因为 du 没穿透到被盖住的原始目录里去。
-
du不会、也不能自动跳过挂载点去统计下层目录,这是设计使然 - 想看被盖住的原始目录占用多少,必须先
umount,再du -sh /mnt/data - 如果挂载的是网络存储(NFS/CIFS)或加密卷,卸载前需确认业务影响,避免中断服务
如何避免下次又被覆盖得莫名其妙
最稳妥的做法,是在创建挂载点时确保它是个空目录,且不存放任何业务数据。但现实中常有历史遗留:比如管理员把配置文件、脚本直接放进了 /mnt/data,后来又挂了块盘上去,结果全被遮住了。
- 新建挂载点前,强制检查:
ls -A /mnt/data,非空就警觉 - 在
/etc/fstab里加注释,例如:# /mnt/data: 挂载 sdb1,勿在此目录存本地文件 - 对关键挂载点启用 systemd mount unit(如
/etc/systemd/system/mnt-data.mount),配合Before=依赖控制启动顺序,降低竞态风险
覆盖本身不可怕,可怕的是没人知道底下还压着一整套旧文件。每次挂载前多看一眼 ls -A,比事后翻日志快十倍。











