我正在使用 Debian Stretch。我的根分区已挂载read-only。只有当我安装或升级包时,才会/重新挂载到read-write(通过使用 apt 钩子),然后重新挂载回ro.
有时在软件包升级后,我无法重新安装/为只读:
mount -o remount,ro /
mount: / is busy
Run Code Online (Sandbox Code Playgroud)
在较旧的 Debian 版本 (Wheezy) 上,我可以列出已取消链接的打开文件lsof:
lsof +L1
Run Code Online (Sandbox Code Playgroud)
或者,更具体地说,阻止/重新挂载回 ro 的文件:
{ lsof +L1 ; lsof|sed -n '/SYSV/d; /DEL|(path /p;' ; } | grep -Ev '/(dev|home|tmp|var)'
Run Code Online (Sandbox Code Playgroud)
但是,在 Debian Stretch 上,lsof +L1不会列出任何文件。
我没有看到任何改变+|-L在man lsof这可以解释为什么它停止工作。
为什么 lsof +L1 不再列出已取消链接的打开文件?
如何列出那些阻止 / 重新挂载为只读的文件?
更新
我已经停止了所有可以停止的进程,并且只有init并且getty仍在运行,但我仍然无法重新挂载/ …
当我尝试将分区重新挂载为 时read-only,出现错误/foo is busy。我可以列出所有文件打开/foo与
lsof /foo
Run Code Online (Sandbox Code Playgroud)
但这并没有告诉我文件是打开的read-only还是read-write. 有没有办法只列出打开的文件read-write?