Skip to content

挂载磁盘(容易出事故!)

Linux mount和umount 挂载和解挂载,文件覆盖丢失找回

此操作容易出大问题,需要谨慎使用!!

  1. 发现亘元现场服务器有未挂载的14T磁盘,想尝试着将其挂载到ubuntu中(不用也是浪费)此时这个服务器只挂载了大概1T的硬盘

  2. 使用fdisk -l可以看到硬盘信息,准备挂载

  3. 问了一下GPT,挂载的命令是sudo mount /dev/sda /mnt/data,我看着/home空间挺小的,就执行了sudo mount /dev/sda /home,结果出大问题:之前/home中的文件全没了,这谁受得了,前后端及操作视频,还有Anaconda相关的东西都在这,可把我吓坏了!

  4. 然后开始找补救措施,发现可以解挂,使用umount /dev/sda /home,然而,又报错啦,umount: /home: target is busy.

  5. 又去问GPT,老铁给的回答放最后面吧

  6. 反正就是查出使用到/home的进程,然后kill掉,最后使用umount /dev/sda /home成功解挂

  7. 重新连接一下SSH,都回来啦~(悬着的心都放下了)

  8. 如果不小心你挂载的路径有其它文件覆盖了其它文件,那么就要进行数据恢复。好在这里数据并没有丢失,比如你挂载到了/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 1234

2. 使用 fuser 命令强制卸载

fuser 命令可以显示哪些进程在使用某个文件或文件系统,并可以强制卸载:

sudo fuser -km /home

然后再尝试卸载:

sudo umount /home

3. 使用 umount-l-f 选项

  • -l (lazy unmount) 选项允许你在设备不再忙时卸载:

sudo umount -l /home

  • -f (force unmount) 选项强制卸载:

sudo umount -f /home

4. 重启系统

如果以上方法都不奏效,重启系统通常可以解决这个问题。在重启过程中,所有的文件系统都会被卸载:

sudo reboot

注意事项

  • 卸载 /home:卸载 /home 挂载点需要特别小心,因为这通常是用户的主目录,许多进程可能正在使用它。确保所有用户已注销,或在单用户模式下操作。

  • 数据安全:强制卸载或终止进程可能会导致数据丢失或文件损坏。因此,在执行这些操作前,确保已备份重要数据。

总结

综合以上方法,可以解决“target is busy”问题,并成功卸载挂载点。选择适合你的情况的方法,优先尝试温和的方式(如 lsoffuser),再考虑使用强制卸载或重启系统。