解决挂载新硬盘原有目录下文件消失的方法

2020/05/0414:30:11 发表评论 95

项目初期用户文件较少,全部存储在/home目录下,/home目录没有单独划开分区,随着项目网站做大,用户文件越来越多,/home目录不够空间,想挂载一个新硬盘来负责储存

但发现新挂载/home到新硬盘时,/home原来数据变空了,这个原因是由于linux的VFS(虚拟文件系统)机制导致的,正常登录以后,所看到的各个目录,文件都是内核在加载时候构造在内存中的VFS目录树,而不是直接看到硬盘上的实际目录树。当你挂载某个设备到一个VFS挂载点上时(比如/home),系统就把VFS中的这个挂载点/home指向你最后所挂载的那个设备上。那么你现在访问该挂载点时,就会看到你最后挂载在此处的设备。而之前所挂载的设备依然在那里,只不过挂载点/home已经不再指向之前的设备。所以之前的数据是被隐藏了,但并没有删除,若umount挂载后,数据又重新回来了

基于这种情况,只能通过跳板的方式把原来的/home数据复制到新的/home分区下了 ,如何添加新硬盘,请查找相关资料

mkdir /new  ###跳板目录

mount /dev/sdb1 /new  ###首先挂载跳板目录

cp -R /home/*  /new  ###复制/home目录所有数据到/new先

rm -rf /home/*       ####可选,主要为了腾出空间给原来的硬盘

mount /dev/sdb1 /home ###挂载/home 到新硬盘,此时你会神奇的发现之前的/home目录文件已经全部转移过来了,也许你会有点疑问,我并没有复制或移动/new文件到新挂载的/home目录啊,其实此时的/home目录相当于/new目录的硬链接,可以测试下mkdir /new/test 你会发现/home目录也存在test

umount /new ###解除挂载,可能会出现占用无法删除,可以使用 umount -fl 强行卸载,

-f 强制卸载

-l 一空闲马上卸载所有占用的文件系统。

rm -rf /new ###删除跳板目录

echo  "/dev/sdb1  /home    ext3或ext4    defaults    0 0" >> /etc/fstab ###开机启动挂载目录


Linux下mount挂载后,原目录下的内容消失

查看没有挂载的硬盘是否在云服务器系统中
查看系统检测的硬盘 命令:lsblk
看到 的确 nvmeOn1没有挂载,但是存在

【1】问题

Linux下,mount挂载文件系统后,挂载点目录下原来的文件都不见了,只有一个新冒出来的lost+found文件夹。

【2】原因

Linux操作系统设计的原因。这里不用担心,该目录下以前所有的文件都还在,只不过这个目录下挂载了新的文件系统,而没有显示而已。

【3】解决办法

umount解挂载这个文件系统就可以了。

PS:

如果解挂失败,就是有进程在使用这个挂载的文件系统。这时候要么:

1)找出进程杀掉进程。ps命令找出来,kill命令杀掉。

或者

2)强制解挂。umount -f [文件系统挂载点]

 

历史上的今天:

  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin
avatar

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: