Linux 挂载新磁盘导致原文件被隐藏解决方案

事件背景

事故源于我的一次无心操作,前几天我使用 fdisk -l 命令偶然发现测试环境一台服务器竟然有 1TB 的磁盘未挂载,而那台测试服务器已经使用两年了,之前就一直磁盘空间紧张,这次就像是意外之喜,于是我开始了磁盘挂载之路,首先使用 fdisk 命令进行分区操作,然后使用 mkfs.ext4 命令进行格式化操作,并在 /etc/fstab 文件中设置好开机自动挂载,最后使用 mount 命令将新磁盘挂载到根目录下

mount /dev/sdb1 /root

然后今天同事反映测试环境很多应用报错了。

问题原因

听到同事反馈,我虎躯一震,马上想到可能是前几天挂载新磁盘导致的问题,当时的情况是根目录没有单独挂载,而我使用新磁盘挂载到根目录,就会导致之前的根目录文件没了,会使用新磁盘里面的文件,但是我当时确认过老磁盘根目录下是没有文件的,我才敢直接挂载的。等等。。。这里面可能有问题,我没有考虑到隐藏文件!!!果然,根目录下有很多程序运行所需要的隐藏文件被我忽略了。

解决方案一(无效)

既然找到问题了,那就要去解决它,我很清楚老磁盘的数据是没有丢失的,只是被隐藏起来了,现在就需要将老磁盘的数据找回来,最先想到的办法就是 umount 新磁盘,那么老磁盘的数据自然就出现了

umount /dev/sdb1

当我运行这个命令时,反馈结果是目标忙,命令执行不成功,使用强制 umount 也无济于事,使用 lsof /dev/sdb1 命令查出所有占用进程并杀死也没用,于是我放弃 umount 新磁盘。

解决方案二

我转向求助 AI,其实不抱有太大希望,AI 给我指了条明路,试了下竟然真的成功了!操作办法如下:

首先创建一个临时目录,然后将根目录绑定到临时目录,注意下面的 --bind 选项

mkdir /tmp/oldroot
mount --bind / /tmp/oldroot

然后进入临时目录里面的根目录,将老 /root 目录下的文件复制到当前 /root 目录下,注意命令中的 . 符号,表示复制全部文件,包括隐藏文件

cd /tmp/oldroot/root
cp -rf . /root

最后卸载临时目录的绑定关系,并删除,搞定!

umount /tmp/oldroot
rmdir /tmp/oldroot
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值