如何强制卸载 Linux 磁盘分区?
有时,您尝试卸载其他用户可能访问的磁盘分区或已安装的 CD/DVD 或 USB 设备,然后您会收到错误umount: /xxx: 设备忙或Error unmounting /dev/sda1: 目标忙。但是,Linux 或 FreeBSD/macOS/OS X 附带 fuser 命令来终止强制安装的分区。因此,例如,您可以使用 fuser 命令终止访问安装在 /nas01 上的文件系统的所有进程。
教程详细信息 | |
---|---|
难度等级 | 简单的 |
Root 权限 | 是的 |
要求 | Linux 或 Unix 终端 |
类别 | 系统管理 |
先决条件 | fuser、lsof 和 umount 命令 |
操作系统兼容性 | FreeBSD • Linux • macOS |
预计阅读时间 | 4 分钟 |
了解设备繁忙错误
Linux/UNIX 不允许您卸载繁忙的磁盘设备。原因有很多,例如程序访问分区或打开文件,但最重要的原因是防止已挂载文件系统上的数据丢失。因此,请尝试以下命令来确定设备/分区上的进程活动。例如,如果您的设备名称是 /dev/sdb1,请以 root 用户身份输入以下 lsof 命令:
输出:
# lsof | grep '/dev/sda1'
vi 4453 vivek 3u BLK 8,1 8167 /dev/sda1
上面的输出表明,在 Linux 系统下,名为 'vivek' 的用户正在运行 vi 进程并使用 /dev/sda1 磁盘设备。您所要做的就是停止 vi 进程并再次 umount。一旦该程序终止其任务,该设备将不再繁忙,您可以使用以下命令将其卸载。例如:
# umount /dev/sda1
换句话说,我正在使用 lsof 找出谁在使用文件系统,然后采取行动关闭访问文件系统的应用程序或用户。
$ df | more
$ mount | more
如何列出文件系统 /nas01/ 上的用户?
键入以下 fuser 命令:
以下是使用 /var/www 的各种进程的列表:
# fuser -u /nas01/
# fuser -u /var/www/
/var/www: 3781rc(root) 3782rc(nginx) 3783rc(nginx) 3784rc(nginx) 3785rc(nginx) 3786rc(nginx) 3787rc(nginx) 3788rc(nginx) 3789rc(nginx) 3790rc(nginx) 3791rc(nginx) 3792rc(nginx) 3793rc(nginx) 3794rc(nginx) 3795rc(nginx) 3796rc(nginx) 3797rc(nginx) 3798rc(nginx) 3800rc(nginx) 3801rc(nginx) 3802rc(nginx) 3803rc(nginx) 3804rc(nginx) 3805rc(nginx) 3807rc(nginx) 3808rc(nginx) 3809rc(nginx) 3810rc(nginx) 3811rc(nginx) 3812rc(nginx) 3813rc(nginx) 3815rc(nginx) 3816rc(nginx) 3817rc(nginx)
该-u选项传递给 fuser,以将进程所有者的用户名附加到每个 PID。在此示例中,使用 lsof 命令找出谁在使用名为 /dev/sda1 的文件系统:
$ df -h | grep sda1
$ sudo umount /dev/sda1
$ sudo lsof -l -w /dev/sda1
使用 lsof 查找谁在使用 Linux 或 Unix 文件系统(点击放大)
Linux fuser 命令强制卸载磁盘分区
您始终可以使用df 命令或 mount 命令列出 Linux 和 Unix 下已安装的文件系统。例如:
假设您已将 /dev/sda1 安装在 /mnt 目录上,则可以使用 fuser 命令,如下所示:
$ df -hT
$ mount
输入命令强制卸载 /mnt:
其中,
# fuser -km /mnt
# umount /mnt
- -k:终止访问该文件的进程。
- -m:名称指定已安装文件系统或已安装的块设备上的文件。在上面的示例中,您使用的是 /mnt
Linux umount 命令卸载磁盘分区
-l您还可以在基于 Linux 的系统上尝试使用 umount 命令选项:
# umount -l /mnt
其中,
- -l:也称为延迟卸载。立即将文件系统从文件系统层次结构中分离出来,并在文件系统不再繁忙时立即清除对文件系统的所有引用。此选项仅适用于内核版本 2.4.11+ 及更高版本。
如果您想卸载 NFS 挂载点,请尝试以下命令:
# umount -f /mnt
其中,
- -f:当 NFS 系统无法访问时强制卸载
请注意,使用这些命令或选项可能会导致打开的文件的数据丢失;在文件系统卸载后访问文件的程序将会出现错误。
总结
这就是强制卸载 Linux 磁盘的方法。有关更多信息,请使用 man 命令或 help 命令查看以下命令的文档:
$ man fuser
$ man umount
$ man lsof
参见:
- 在FreeBSD和Solaris Unix 操作系统下强制卸载磁盘分区