尝试以只读方式挂载时出现“mount: / is busy”,以便我可以运行 Zerofree

尝试以只读方式挂载时出现“mount: / is busy”,以便我可以运行 Zerofree

我尝试zerofree在 Ubuntu 11.04 上运行,以便可以使用以下命令压缩 VirtualBox vdi 映像:

VBoxManage modifyhd Ubuntu.vdi --compact

为了运行,zerofree磁盘映像已安装为只读。我正在跟进这些说明它表示使用它从恢复模式重新挂载为只读(Drop to root shell 提示符):

mount -n -o remount,ro -t ext2 /dev/sda1 /

但是当我这样做时,我收到错误:

mount: / is busy

关于如何做到这一点有什么想法吗?

跟进:按照贾里的回答和这个帖子通过运行这些命令可以解决该问题。

service rsyslog stop
service network-manager stop
killall dhclient

答案1

某些进程使文件保持打开状态以供写入。例如,这些可以是写入日志的程序,例如rsyslogd网络工具dhclient或其他东西。将它们一一关闭并尝试重新安装可能会起作用。

您可以使用该程序查找使用某些文件的进程fuser。例如,fuser -v -m /将返回进程列表。但是,我不确定它是否是导致文件系统繁忙的其中之一。

答案2

改进彼得的回答:

我无法终止使用我的安装点的进程。所以,我这样做了:

  • 编辑/etc/fstab为在下次启动时以只读方式启动。前任:/dev/sda1 / ext2 ro 0 1
  • 重新启动并打开 shell(例如,主机键 + F2)
  • 零运行

要“恢复”您的系统:

  • 使用读写选项挂载:$ mount -o remount,rw /dev/sda1
  • 再次编辑/etc/fstab,恢复原来的值

额外:如果需要打开恢复模式在任何步骤中:

  • 重启
  • VM 加载时按住 Shift
  • 高级选项 > 带恢复模式的内核选项 > 删除到根 Shell 提示

答案3

如果没有进程打开文件进行写入,则只能以只读方式重新挂载文件系统。运行lsof /以查看哪些进程在根文件系统上打开了文件。打开用于写入的文件将在该列中指示FD。您可以使用以下方法过滤这些内容

lsof / | awk '$4 ~ /[0-9].*w/'

要自动过滤进程 ID,请解析以下输出lsof -F pa

lsof -F pa /home | awk '/^p/ {pid = substr($0, 2)} /^a.*w/ {print pid}'

答案4

有时,有太多进程使挂载保持繁忙,因此以只读挂载方式重新启动可能会更容易。

更改 中根文件系统的条目/etc/fstab,例如:

/dev/sda1 / ext2 relatime,rw,errors=remount-ro 0 1

变成:

/dev/sda1 / ext2 noatime,ro 0 1

重新启动时,文件系统将以只读方式挂载,因此您可以zerofree在其上运行。

完成后,再次以读/写方式重新挂载文件系统 ( mount -o remount,rw /) 并撤消对 的更改/etc/fstab

灵感来自https://wiki.debian.org/ReadonlyRoot#Enable_readonly_root

相关内容