转贴地址:http://www.linuxso.com/linuxxitongguanli/836.html

为了干净地关闭或热交换 UNIX 或类 UNIX 系统上的存储硬件,必须能够卸载使用此设备上的存储的所有文件系统。但是,如果正在使用文件系统中的文件或目录,就无法卸载它。lsof 和 fuser 命令可以帮助您识别并终止那些正在使用存储设备上的文件或从存储设备执行的进程。使用这些命令有助于寻找那些阻止存储设备卸载的进程,减少麻烦,让您能够继续处理更重要的系统管理任务。

所有计算机操作系统都在引导时检查它们挂载的文件系统是否是一致的,也就是说,确认它们的内部数据结构和映射到的相关存储没有错误。UNIX、Linux 和其他类 UNIX 操作系统采用一种聪明的方法检查文件系统的一致性(通常使用 fast 命令)。当这些系统挂载文件系统时,它们在文件系统头中设置一个值,把文件系统标为 DIRTY,这意味着它正在使用,在向它写入更新时可能暂时处于不一致的状态。在系统关闭期间卸载文件系统时,把它们标为 CLEAN。在重新引导系统时,只需要检查仍然标为 DIRTY 的文件系统的一致性。

在系统关闭过程中,会自动地卸载文件系统,这通常在终止所有非系统进程之后进行。但是,卸载文件系统仍然可能失败并显示以下消息:

在这里,busy 意味着一个进程正在写这个文件系统或者进程是从它运行的。在这两种情况下,都无法卸载文件系统,这是计算机系统的基本规则之一。如果不采用这个规则,可以 在进程正在写文件系统包含的文件时卸载文件系统,就会让文件处于不一致的状态,而文件系统本身标为 CLEAN。

umount 命令的标准 Linux 版本包含一个延迟卸载选项 -l,它有助于卸载正在使用的文件系统。这个命令需要 Linux 内核 2.4.11 或更高版本,目前这通常没问题。执行 umount -l /name/of/file system 可以让指定的文件系统与系统的目录层次结构脱离,让新进程不能使用这个文件系统,然后当正在访问它的所有进程都终止时卸载它。这很方便,但是当需要马上卸载文件系统时它并不合适。

如果需要马上卸载文件系统,而文件系统报告忙碌,还有其他办法。如果您是系统的惟一用户,那么只需终止阻止文件系统卸载的进程。这需要查看所有窗口,寻找 并终止正在写这个分区或使用它作为当前工作目录的暂停的进程或后台进程。但是,在有许多本地用户和远程用户的多用户系统上,这种方法是不实际的。幸运的 是,开放源码社区提供了一些命令,可以轻松地识别并终止这些进程。

用 lsof 寻找打开的文件

lsof (list open files) 命令列出特定的文件系统、目录或设备上所有打开的文件以及与它们相关联的进程。在大多数 UNIX 和类 UNIX 系统上都可以使用 lsof 命令。

在默认情况下,lsof 命令列出当前打开的所有文件、共享库和目录,并提供尽可能多的相关信息。即使在负载很轻的系统上,这个命令的输出也非常长,因此通常通过命令行参数指定一 个目录名,或者使用管道筛选它的输出。例如,假设希望卸载挂载在 /opt2目录上的文件系统。为了查看与 /opt2 目录相关联的所有进程,应该执行下面所示的命令。

需要终止所有这些进程,然后才能卸载 /opt2 分区。因为这个列表中的进程都不能写任何文件,所以可以使用kill 命令并指定第二列中列出的进程 ID (PID) 以终止它们,然后就可以顺利地卸载分区。注意,PID 23402 与最后两行相关联 — 第一行表示 more 命令以 /opt2 作为当前工作目录 (cwd),第二行表示 more 命令打开了 /opt2/resume.txt 文件。

但是,假设 lsof 命令的输出像下面这样。

前三个与 /opt2 目录相关联的命令与前面一样,但是后两个命令是由另一个用户运行的。其中的 emacs 命令用于编辑文件,所以可以让 USER 列中列出的用户保存文件并退出,然后终止这个进程。

lsof 命令还有许多选项,可以帮助您识别不同类型的文件系统上打开的文件和目录、打开了网络套接字的进程、正在使用特定的库的进程等等。lsof 命令的缺点是,必须联系用户并要求他们终止某些进程,或者自己手工终止它们。fuser 命令更复杂,但是更强大,在作为根用户运行时可以替您执行许多进程终止工作。

用 fuser 寻找用户进程

fuser (find user processes) 命令也是一个开放源码应用程序,可以帮助您识别阻止文件系统卸载的进程。fuser 命令寻找与作为命令行参数指定的文件、目录或文件系统相关联的进程。本文主要关注对文件系统挂载点使用 fuser。关于 fuser 命令的更多信息,请参见它的在线参考信息。fuser 命令要求系统支持 /proc 文件系统。因此,在所有 Linux 发行版和 FreeBSD 系统上都可以使用它。关于获得 fuser 命令的源代码的方法请参见 参考资料。

与 lsof 命令一样,作为命令行参数提供文件系统挂载点名称是使用 fuser 命令识别阻止文件系统卸载的进程的最简单方法:

fuser 命令的输出指出正在使用指定挂载点的进程的 PID。每个 PID 后面有一个字母,它表示与 PID 相关联的进程以什么方式使用指定的挂载点。最常见的字母是前面示例所示的 c,这表示指定的进程使用此文件系统上的一个目录作为当前工作目录。

但是,fuser 命令的默认输出不便于最终用户使用,即使按 Linux 标准来看也是如此。fuser 命令提供一个 -v 选项,它在 fuser 命令的输出中增加一些与标准 ps 命令相似的输出,如下面所示。

这更方便,因为它至少指出了进程是什么程序。在通过 fuser 命令获得 PID 信息之后,可以在终止进程之前结合使用标准的 ps 和 egrep 命令了解尽可能详细的相关信息,如下面所示

然后,可以使用标准的 kill 命令手工终止指定的进程,或者像下一节中解释的,使用 fuser 命令的一些高级功能自动地终止它们。

用 fuser 终止进程

在通过参数指定挂载点时,fuser 命令的 -k 选项会自动地终止找到的进程。当然,必须作为根用户执行 fuser 命令,才能终止属于其他用户的进程,如下面所示

在这里,第二个进程 (emacs) 是第一个进程 (bash shell) 的子进程,因此在 fuser 命令杀死第一个进程时它就会终止。

如果希望指定底层物理设备名,而不是它包含的文件系统的挂载点,那么还必须指定 -m 选项,如下面所示

第一个命令返回的输出符合预期,因为它引用文件系统的挂载点。第二个命令表明,不能使用标准的 fuser 选项直接查询底层设备。第三个命令说明,-m 选项允许直接指定设备。可以在第一个和第三个命令中添加 -k 选项,从而终止与 /dev/sdb1 设备上的文件系统相关联的进程。

有时候,为了应对一些紧急情况或者删除挂载的 CD-ROM 或 DVD 等设备,Linux 或 UNIX 系统管理员需要卸载分区。在由于设备忙系统不允许删除它的情况下,检查系统上的所有进程是一个很烦人、很缓慢的过程。lsof 和 fuser 命令有助于识别阻止文件系统卸载的进程。如果情况非常紧急,fuser 命令甚至可以替您终止它们

Linux查看目录busy,linux umount 提示"device is busy" 终极解决相关推荐

  1. linux 查看目录拓扑图,Linux服务篇之九:构建Cacti监控平台

    Linux服务篇之九:构建Cacti监控平台 作为一名Linux SA,日常最重要的就是保证网站正常稳定的运行,我们需要实时监控网站.服务器的运行状态,这时需要借助开源软件(cacti.nagios. ...

  2. linux查看目录文件系统,linux 怎么查看文件系统在哪个目录下

    linux 怎么查看文件系统在哪个目录下 mip版  关注:75  答案:2  悬赏:40 解决时间 2021-01-28 09:51 已解决 2021-01-28 00:09 linux 怎么查看文 ...

  3. linux 查看目录挂载,linux查看磁盘挂载的三种方法

    第一种方法:使用df命令,例如: 复制代码代码如下: orientalson:/home # df Filesystem 1K-blocks Used Available Use% Mounted o ...

  4. linux设备忙碌无法删除文件夹,linux umount 提示"device is busy" 终极解决方法 无法卸载分...

    linux umount 提示"device is busy" 终极解决方法 无法卸载分 为了干净地关闭或热交换 UNIX 或类 UNIX 系统上的存储硬件,必须能够卸载使用此设备上的存储的所有文件系 ...

  5. Linux 环境下umount, 报 device is busy 的问题分析与解决方法

    在Linux环境中,有时候需要挂载外部目录或硬盘等,但当想umount时,却提示类似"umount:/home/oracle-server/backup:device is busy&quo ...

  6. linux看目录用的哪个磁盘,linux查看目录大小及硬盘大小

    linux查看目录大小及硬盘大小的命令: # du -ks   ---in all # du -k     ---every last du和df命令都被用于获得文件系统大小的信息:df用于报告文件系 ...

  7. Linux 查看目录常用命令

    linux 查看目录常用命令 ls -F |grep "/$" 只显示当前目录下的文件夹 ls -al |grep "^-" 只显示当前目录下的文件 ls -a ...

  8. Linux查看目录大小文件大小内存大小硬盘大小

    Linux查看目录大小文件大小内存大小硬盘大小 Linux运维操作时,需要查看文件大小,以及服务器的可用存储大小. df 命令以磁盘分区为单位查看文件系统 # 查看磁盘剩余空间 df -hl # 查看 ...

  9. 使用ls命令查看Linux的目录结构,linux ls命令查看目录文件详解

    首页 > Linux教程 > 常用命令 > ls 查看目录文件 linux ls命令查看目录文件详解 linux中ls命令用来查看目录中的所有文件和子目录,可选的参数比较多,本文筛选 ...

  10. Linux 查看目录下的文件数量

    Linux 查看目录下的文件数量 1 查看当前目录下的文件数量(不包含子目录中的文件) 说明: 2 查看当前目录下的文件数量(包含子目录中的文件) 3 查看当前目录下的文件夹数量(不包含子目录中的目录 ...

最新文章

  1. R语言-常用对象及元素类型
  2. 堆(Heap)大根堆、小根堆
  3. open ai gpt_您实际上想尝试的GPT-3 AI发明鸡尾酒
  4. Strut2中单元测试实例
  5. 为了一个HTTPS,浏览器操碎了心···
  6. [LeetCode] 204. Count Primes
  7. PreparedStatement设置时间
  8. 小D课堂 - 零基础入门SpringBoot2.X到实战_第2节 SpringBoot接口Http协议开发实战_13、jar包方式运行web项目文件上传和访问...
  9. 我国祖冲之密码算法ZUC128和ZUC256性能测试
  10. 如何加减单元格指定数字_表格怎么自动计算加减
  11. QQ坦白说使用Fiddler抓包获取json
  12. 香农-范诺算法(Shannon-Fano coding)算法
  13. pscc2018安装服务器无响应,win10系统无法安装ps cc2018提示Microsoft visualc++ 2017的解决方法...
  14. Service的绑定过程
  15. [转] Phun,让人惊讶的小程序
  16. Python项目实战:各种小说姓名生成器
  17. 前端vue从后台取到数据(数组对象)后遍历给对象添加属性,修改这个属性为什么没有用?
  18. Spring Boot 对基础 Web 开发的支持(下)2-2
  19. 白话空间统计十九:热点分析(上)
  20. 给大家分享一个好的短信接口.

热门文章

  1. 各个版本chrome允许加载使用flash的方法
  2. mzy git学习,分支冲突,以及冲突解决(五)
  3. 无限循环病毒HTML,红包群无限循环病毒式裂变引流
  4. 删除Windows中设备与驱动器下的多余图标
  5. 【中软杯国二开源】基于PaddleOCR和深度学习的企业实体识别
  6. 对一些稀奇古怪面试题的理解
  7. 矩阵的 Jordan 标准型
  8. windows-sys:27:vmware下安装windows XP系统详细过程
  9. Photoshop插件-证件照-2寸裁剪-2寸排版-脚本开发-PS插件
  10. 配置一台新的kubuntu