挂载磁盘(容易出事故!)
Linux mount和umount 挂载和解挂载,文件覆盖丢失找回
此操作容易出大问题,需要谨慎使用!!
-
发现亘元现场服务器有未挂载的14T磁盘,想尝试着将其挂载到ubuntu中(不用也是浪费)此时这个服务器只挂载了大概1T的硬盘
-
使用
fdisk -l可以看到硬盘信息,准备挂载 -
问了一下GPT,挂载的命令是
sudo mount /dev/sda /mnt/data,我看着/home空间挺小的,就执行了sudo mount /dev/sda /home,结果出大问题:之前/home中的文件全没了,这谁受得了,前后端及操作视频,还有Anaconda相关的东西都在这,可把我吓坏了! -
然后开始找补救措施,发现可以解挂,使用
umount /dev/sda /home,然而,又报错啦,umount: /home: target is busy. -
又去问GPT,老铁给的回答放最后面吧
-
反正就是查出使用到
/home的进程,然后kill掉,最后使用umount /dev/sda /home成功解挂 -
重新连接一下SSH,都回来啦~(悬着的心都放下了)
-
如果不小心你挂载的路径有其它文件覆盖了其它文件,那么就要进行数据恢复。好在这里数据并没有丢失,比如你挂载到了/home下,那么原来/home下的文件全都不见了。这个时候就要解挂
umount /dev/sda /home这个解挂硬盘相当于umount /dev/sda可以不加原来的地址,解挂后,操作系统指向/home的地址改变了,又能够看到原来的文件了。其实数据并没有覆盖,只是/home的数据地址变了。但为了保险起见,挂载盘一定要注意确认文件无误,重要数据和代码要常备份。
以下是GPT的回答:
当尝试卸载一个挂载点(如
/home)时,如果收到“target is busy”的错误,说明该挂载点上有进程正在使用。以下是一些解决方法:1. 找出并终止使用挂载点的进程
使用
lsof命令查看哪些进程正在使用挂载点:
sudo lsof /home你会看到类似以下的输出:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME bash 1234 user cwd DIR 8,1 4096 2 /home找到使用挂载点的进程后,可以终止它们:
sudo kill -9 PID例如:
sudo kill -9 12342. 使用
fuser命令强制卸载
fuser命令可以显示哪些进程在使用某个文件或文件系统,并可以强制卸载:
sudo fuser -km /home然后再尝试卸载:
sudo umount /home3. 使用
umount的-l或-f选项
-l(lazy unmount) 选项允许你在设备不再忙时卸载:
sudo umount -l /home
-f(force unmount) 选项强制卸载:
sudo umount -f /home4. 重启系统
如果以上方法都不奏效,重启系统通常可以解决这个问题。在重启过程中,所有的文件系统都会被卸载:
sudo reboot注意事项
卸载
/home:卸载/home挂载点需要特别小心,因为这通常是用户的主目录,许多进程可能正在使用它。确保所有用户已注销,或在单用户模式下操作。数据安全:强制卸载或终止进程可能会导致数据丢失或文件损坏。因此,在执行这些操作前,确保已备份重要数据。
总结
综合以上方法,可以解决“target is busy”问题,并成功卸载挂载点。选择适合你的情况的方法,优先尝试温和的方式(如
lsof和fuser),再考虑使用强制卸载或重启系统。