![识别阻止以只读方式重新安装的文件/进程](https://linux22.com/image/85150/%E8%AF%86%E5%88%AB%E9%98%BB%E6%AD%A2%E4%BB%A5%E5%8F%AA%E8%AF%BB%E6%96%B9%E5%BC%8F%E9%87%8D%E6%96%B0%E5%AE%89%E8%A3%85%E7%9A%84%E6%96%87%E4%BB%B6%2F%E8%BF%9B%E7%A8%8B.png)
我的系统运行 Debian 测试,并且/
通常以只读方式安装。
主要问题是,每次我安装某些东西或更新系统时,我都无法重新将文件系统mount: / is busy
重新挂载为只读(我收到错误:)。
使用的命令:mount -o remount,ro /dev/mapper/sda9_crypt /
我已经搜索了进程和文件锁(使用lsof
/ fuser
),但我不知道我必须专门搜索什么。
我不想在更新后重置系统,只是为了能够以只读方式重新安装系统。因此,我寻找需要杀死的关键进程来实现这一点。
答案1
在 的输出中lsof /
,除了打开用于写入的文件(w
FD 列中的后缀)之外,还要查找标记为(deleted)
. /var
、/tmp
(和等)和主目录之外的文件/run
通常不会长时间保持打开状态以供写入。但是,在升级某些软件之后,升级之前启动的正在运行的进程可能仍在使用某些可执行文件、库或数据文件(打开以供读取或执行)。
当一个文件被删除但仍然打开时,实际上只是删除了它的目录条目。文件本身只有在没有目录项时才会被删除和它没有开放。删除的最后一部分不能发生在以只读方式挂载的文件系统上,因此这样的半删除文件会阻止将文件系统重新挂载为只读,就像打开以进行写入的文件一样。
答案2
我们可以解析输出lsof
并过滤到设备上具有可写文件描述符的进程。在我的系统上,FD 是第四列,它的后缀为w
或 ,u
分别表示打开用于写入或读+写入的文件:
lsof +f -- / | awk '$4 == "FD" || $4 ~ /[0-9][wu]$/'
该$4 == "FD"
测试只是为了不受干扰地通过列标题。
这需要适应您的特定lsof
实施;阅读以下内容可能有价值其他程序的输出如果您需要更便携的解决方案,请参阅 lsof 手册页的部分。