在某些情况下,当您尝试卸载文件系统尤其是 NFS 时,它会显示“设备正忙”消息。当 NFS 服务器有一些问题(主要是无法访问)并且您有一个软 NFS 挂载时,通常会发生这种情况。

如果正常 NFS 卸载失败,我们可以尝试不同的方法和选项。在本教程中,我将解释如何在 Linux 中执行强制卸载。

在我们的场景中,我们有一个 NFS 文件系统安装在/var/student目录上。

让我们首先使用df 命令显示所有挂载的目录。

# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 20G 1.3G 18G 7% /
devtmpfs 236M 0 236M 0% /dev
tmpfs 245M 0 245M 0% /dev/shm
tmpfs 245M 8.4M 237M 4% /run
tmpfs 245M 0 245M 0% /sys/fs/cgroup
tmpfs 49M 0 49M 0% /run/user/0
10.128.20.241:/var/student 20G 1.3G 18G 7% /mnt/nfs/student_srv
10.128.20.241:/home 20G 1.3G 18G 7% /mnt/nfs/home_srv

当我们尝试卸载远程分区时,我们会收到一条错误消息。以下示例显示卸载失败,因为设备正忙:

# umount /mnt/nfs/student_srv/
umount.nfs4: /mnt/nfs/student_srv: device is busy

1) 使用 lsof

lsof (列出打开的文件)命令显示特定文件系统、目录或设备上所有打开的文件以及与它们关联的进程的列表。默认情况下,它会列出当前打开的所有文件、共享库和目录,并提供尽可能多的关于它们的信息。

在这里,我们可以使用 lsof 命令找到与我们的挂载点对应的 PID(进程 ID),然后杀死该进程。

# lsof /mnt/nfs/student_srv/
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
bash 24098 root cwd DIR 253,1 4096 519062 /mnt/nfs/student_srv
bash 24125 root cwd DIR 253,1 4096 519062 /mnt/nfs/student_srv
vim 24144 student cwd DIR 253,1 4096 519062 /mnt/nfs/student_srv

这里我们有使用挂载目录的进程的 3 个 PID。您可以看到 vim 命令,这意味着“student”用户正在编辑文件。你可以通知用户停止他的动作或终止进程。

现在,让我们看看结果:

# lsof /mnt/nfs/student_srv/
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
bash 24098 root cwd DIR 253,1 4096 519062 /mnt/nfs/student_srv
bash 24125 root cwd DIR 253,1 4096 519062 /mnt/nfs/student_srv

你可以看到我们的用户已经停止了他的修改,但我们仍然有 bash 命令在执行,但我们不知道为什么。我们现在可以使用 kill 命令杀死这两个进程。

现在我们将杀死第一个 bash 进程

# kill -9 24098

我们可以验证结果

# lsof /mnt/nfs/student_srv/
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
bash 24125 root cwd DIR 253,1 4096 519062 /mnt/nfs/student_srv

我们可以看到有一个进程被杀死

# kill -9 24125

现在让我们验证第二个过程

# lsof /mnt/nfs/student_srv/

现在让我们尝试卸载文件夹

# umount /mnt/nfs/student_srv/
umount: /mnt/nfs/student_srv/: not mounted

我们的操作已自动卸载文件夹,但让我们使用 df 命令检查。

# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 20G 1.3G 18G 7% /
devtmpfs 236M 0 236M 0% /dev
tmpfs 245M 0 245M 0% /dev/shm
tmpfs 245M 8.3M 237M 4% /run
tmpfs 245M 0 245M 0% /sys/fs/cgroup
tmpfs 49M 0 49M 0% /run/user/0
10.128.20.241:/home 20G 1.3G 18G 7% /mnt/nfs/home_srv

从输出中,我们可以看到目录/mnt/nfs/student_srv已从系统中卸载。

2) 使用fuser

fuser(查找用户进程)命令有助于识别阻止您卸载文件系统的进程。它查找与您作为命令行参数提供的任何文件、目录或文件系统挂载点相关联的用户进程。

# fuser /mnt/nfs/student_srv/
/mnt/nfs/student_srv: 24191c

我们可以使用带有-m选项的 fuser 命令,该选项列出访问文件系统上的文件或挂载点的所有进程,以及-v显示结果的选项,例如带有 PID、用户和执行命令的ps命令。

# fuser -mv /mnt/nfs/student_srv/
 USER PID ACCESS COMMAND
/mnt/nfs/student_srv:
 root kernel mount /mnt/nfs/home_srv
 root 24191 ..c.. bash
 root 24275 ..c.. bash
 student 24290 ..c.. vim

您可以看到正在执行的命令。

# fuser -mv /mnt/nfs/student_srv/
 USER PID ACCESS COMMAND
/mnt/nfs/student_srv:
 root kernel mount /mnt/nfs/home_srv
 root 24191 ..c.. bash
 root 24275 ..c.. bash

-k使用 fuser 命令,可以不使用 kill 命令直接杀死正在执行的进程

# fuser -kmv /mnt/nfs/student_srv/
 USER PID ACCESS COMMAND
/mnt/nfs/student_srv:
 root kernel mount /mnt/nfs/home_srv
 root 24191 ..c.. bash
 root 24275 ..c.. bash

检查结果

# fuser -mv /mnt/nfs/student_srv/
 USER PID ACCESS COMMAND
/mnt/nfs/student_srv:
 root kernel mount /mnt/nfs/home_srv

似乎只有挂载在执行。让我们尝试卸载文件夹

# umount /mnt/nfs/student_srv/

我们没有更多的错误消息。检查挂载点

# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 20G 1.3G 18G 7% /
devtmpfs 236M 0 236M 0% /dev
tmpfs 245M 0 245M 0% /dev/shm
tmpfs 245M 8.3M 237M 4% /run
tmpfs 245M 0 245M 0% /sys/fs/cgroup
tmpfs 49M 0 49M 0% /run/user/0
10.128.20.241:/home 20G 1.3G 18G 7% /mnt/nfs/home_srv

我们可以看到该/mnt/nfs/student_srv文件夹已按照我们的意愿卸载。

3) lazy卸载

卸载命令具有-l执行延迟卸载的选项(需要内核 2.4.11 或更高版本)。挂载将从文件系统命名空间中删除(因此您将不会再看到它/mnt/nfs/student )但它保持挂载,因此访问它的程序可以继续这样做。当最后一个访问它的程序退出时,卸载实际上会发生。

# fuser -mv /mnt/nfs/student_srv/
 USER PID ACCESS COMMAND
/mnt/nfs/student_srv:
 root kernel mount /mnt/nfs/home_srv
 root 24366 ..c.. bash
 root 24381 ..c.. bash
 student 24398 ..c.. vim

我们可以看到该文件夹​​正忙。现在让我们尝试做一个惰性卸载

# umount -l /mnt/nfs/student_srv/

我们没有错误消息。我们将检查命令是否被正确执行

# echo $?
0

现在让我们检查挂载点

# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 20G 1.3G 18G 7% /
devtmpfs 236M 0 236M 0% /dev
tmpfs 245M 0 245M 0% /dev/shm
tmpfs 245M 8.4M 237M 4% /run
tmpfs 245M 0 245M 0% /sys/fs/cgroup
tmpfs 49M 0 49M 0% /run/user/0
10.128.20.241:/home 20G 1.3G 18G 7% /mnt/nfs/home_srv

我们可以看到挂载点/mnt/nfs/student_srv没有再次出现,但正如我们之前所说,例如,我们的 'student' 用户仍在修改他的文件,可以创建新文件等。在服务器上,我们可以看到用户正在修改。

由于紧急情况,我们可能需要卸载分区,或者只是删除设备,但由于该设备正忙,可能会出现问题。在决定解决问题的方法之前,检查系统上的每个进程非常重要。lsof 和 fuser 命令可以轻松识别阻止您卸载文件系统的进程。最后,如果您想使用强制卸载使用-f选项。

# umount -f -l /mnt/nfs/student_srv/

结论

在本教程中,我们了解了当您无法在 Linux 和 Unix 风格的系统中卸载时可用的不同选项。所有提到的强制卸载选项都应该适用于所有 Linux 发行版,如 Ubuntu、Mint 等。

在 Linux 中强制卸载的 3 种方法显示“设备正忙”相关推荐

  1. linux中字符串截取的八种方法

    Linux 的字符串截取很常用,总结常用不同需求的几种方法 假设有变量 var=http://www.aaa.com/123.htm 1. # 号截取,删除左边字符,保留右边字符. echo ${va ...

  2. Linux中Kill进程的N种方法

    linux的进程管理手段丰富.想怎么杀进程都可以.废话少说,正题开始: 常规篇: 首先,用ps查看进程,方法如下: $ ps -ef 或者: $ ps -aux 此时如果我想杀了火狐的进程就在终端输入 ...

  3. linux kill进程后黑屏,Linux中Kill进程的N种方法

    常规篇: 首先,用ps查看进程,方法如下: $ ps -ef -- smx       1822     1  0 11:38 ?        00:00:49 gnome-terminal smx ...

  4. linux显示分区命令,在Linux中查看分区表的4种方法

    作为Linux管理员,我们需要一次又一次地查看硬盘的分区表.这有助于我们通过为进一步分区腾出空间来重新组织旧驱动器,并在必要时为新驱动器创建空间.您可以在硬盘上创建不超过四个主分区,但可以在多个逻辑分 ...

  5. linux中查看系统进程的四种方法

    进程是在 CPU 及内存中运行的程序代码,而每个进程可以创建一个或多个进程(父子进程). 查看进程方法: 第一种: ps aux ps命令用于报告当前系统的进程状态.可以搭配kill指令随时中断.删除 ...

  6. centos 卸载软件_一篇看懂!详解-Linux系统中安装软件的三种方法

    Linux系统中安装软件的三种方法 注:本文主要以CentOS为例介绍常用的安装方式,其他版本linux在文章底部 Linux系统中怎么安装软件,首先说一下应用程序与系统命令的区别: 1.文件位置 系 ...

  7. linux bcc_使用bcc / BPF在Linux中分析性能的7种工具

    linux bcc Linux中出现了一项新技术,可以为系统管理员和开发人员提供大量新工具和仪表板,以进行性能分析和故障排除. 它被称为增强型Berkeley数据包过滤器(eBPF,或简称BPF),尽 ...

  8. 【查看linux中所有用户的三种方式】

    查看linux中所有用户的三种方式学习目标: 提示:通过使用 /etc/passwd 文件,getent 命令,compgen 命令这三种方法查看系统中用户的信息 用户信息存放位置: 提示:Linux ...

  9. Linux中强制结束一个进程的终极方法和其他常用命令

    Linux中强制结束一个进程的终极方法和其他常用命令 1.查进程 ps命令查找与进程相关的PID号: ps a 显示现行终端机下的所有程序,包括其他用户的程序. ps -A 显示所有程序. ps c ...

最新文章

  1. proto buffer
  2. AI开放平台,这里给你罗列全了
  3. PowerDesigner12.5 下载、汉化及破解
  4. 【Vue】 Error with Vue lazy loading components: “Failed to resolve async component“
  5. ASP.NET Core quot;完整发布,自带运行时quot; 到jexus
  6. java学习(69):java模式设计之适配器
  7. 两列布局 html5,CSS两列布局的N种实现
  8. Git在windows环境下的使用教程
  9. fastjson版本_Fastjson高危漏洞风险提示
  10. guava 对集合的支持
  11. 计算机二级经济订货批量公式,计算机二级考试真题-Excel-李晓玲-采购成本分析...
  12. android 气泡尖角边框,CSS3制作的带阴影效果的尖角气泡框效果
  13. 简单的爬虫(豆瓣250)
  14. 第五章:电子表格系统Excel 2010——知识点整理
  15. 武汉大学 计算机学院 衰落,为何武汉大学每年都被黑,武汉大学真的没有实力吗?...
  16. oracle下的inventory文件夹,在 Oracle Home 目录中重建Central Inventory(oraInventory)的步骤...
  17. Linux 内存管理。
  18. PWM波控制舵机实验
  19. 建仓价 持仓价 平仓价
  20. onMeasure学习笔记

热门文章

  1. 个股与指数行情走势对比分析 !股票量化分析工具QTYX-V2.5.2
  2. 酷我音乐盒html代码,酷我音乐界面及标签怎样使用
  3. java 日期处理 口诀_java中如何对日期进行格式处理
  4. python文字游戏循环3次_如何停止迭代for循环以便玩家可以在Python迷宫游戏中移动?...
  5. 【华人学者风采】何田 京东
  6. Python初学笔记(优达学城)
  7. CRI Round Table圆桌议事-极力推荐提升英语听力口语的必备播客
  8. idea debug时提示”Method breakpoints may dramatically slow down debugging“的解决办法
  9. DICOMRT:Frontiers of Radiation Therapy and Oncology,肿瘤放疗最前沿
  10. 电源电路中电感为什么会啸叫?