Ubuntu 18.04 上的 zerofree

Ubuntu 18.04 上的 zerofree

我在 Windows 10 Pro 主机上的 VM VirtualBox 上使用 Ubuntu 18.04 进行开发,我之前按照以下步骤压缩了虚拟硬盘: https://www.howtogeek.com/312883/how-to-shrink-a-virtualbox-virtual-machine-and-free-up-disk-space/

除了常规更新外 - 我没有乱搞它,(最近刚刚安装了 virtualbox gues 添加的更新)

以前,我只显示一个 /dev/sda1 - 今天我有三个,当我尝试在其中任何一个上运行 zerofree 时,我发现该设备已安装在 rw 中

在此处输入图片描述

我也按照这里的一些说明停止了一些服务并尝试重新安装 - 但没有成功

https://unix.stackexchange.com/questions/42015/mount-is-busy-when-trying-to-mount-as-read-only-so-that-i-can-run-zerofree

它仍然说安装点正忙

我不确定这是否是因为最近的更新而发生的?我还通过卸载 vmware guest additions 进行了测试 - 但没有效果

有什么建议吗?

答案1

对我有用的方法(结合了几个相关问题和论坛的答案):

  • VirtualBox 5.2.10
  • Windows 10 作为主机操作系统
  • Ubuntu 18.04 作为客户操作系统

首先安装zerofree:

sudo apt-get install zerofree

创建 0 来释放空间(删除所有不需要的文件并清空垃圾箱)

重新启动到 GRUB 菜单(Ubuntu 启动时按 Esc)

Advanced options for Ubuntu > Recovery Mode (choose highest version number)

Recovery Menu 选择Drop to root shell prompt

df 获取您的分区(查看您想要缩小的分区,例如 sda1、sda 4 等,通常是/dev/sda1

df

尝试运行zerofree

zerofree /dev/sda1

分区是可读写的,需要以只读方式安装才能运行 zerofree 错误:

如果 zerofree 出现类似“以 rw 方式挂载”的错误/dev/sda1,则需要将其以只读方式挂载才能继续。

要将所需分区挂载/dev/sda1为只读以便zerofree在其上使用:

注1:您应该相对快速地执行以下步骤,以便能够在ro服务和套接字重新投入使用之前安装驱动器并再次开始写入磁盘。否则,您可能需要systemctl再次执行该步骤以确保写入磁盘已停止。

笔记2:(跳过阅读此内容,直到以下步骤失败)。根据您的系统,您可能还有其他服务和套接字仍在写入磁盘,除了systemd-journald。如果以下步骤不起作用,请尝试查看在运行这些步骤后仍在写入磁盘的内容,然后阻止他们也同样如此。

systemctl --type=service
systemctl --type=socket

脚步:

更新:用户 @Kevin 给出了一个很好的建议,即在一行命令中执行以下步骤(见下文),以防止服务和套接字重新使用速度过快:

systemctl stop systemd-journal* \
&& sudo swapoff -a && mount -n -o remount,ro -t ext2 /dev/sda1 / \
&& zerofree -v /dev/sda1

第一的,停止所有写入磁盘的进程这样你就不会得到mount /: mount busy错误

systemctl stop systemd-journald.socket
systemctl stop systemd-journald.service

检查是否启用了任何交换分区:

swapon -s

如果已启用,则禁用它们

sudo swapoff -a

最后,您应该能够dev/sda1以只读方式挂载。(您的文件系统类型可能与不同ext2。要查找文件系统,请运行df -T

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

然后最后运行zerofree

zerofree -v /dev/sda1

完成后zerofree,关闭 Ubuntu

halt

最后,在主机操作系统(我的情况是 Windows 10)上压缩 vdi 以回收空间:

VBoxManage.exe modifymedium disk "C:\path\to\disk.vdi" --compact

答案2

安装 zerofree

sudo apt install zerofree

重新启动进入 ubuntu 恢复控制台,按住 [右 SHIFT]

advanced options -> recovery mode -> root console

找到根目录

mount | grep "sda"

运行 zerofree

echo "u" > /proc/sysrq-trigger
mount /dev/mapper / -o remount,ro
zerofree -v /dev/sda1

重启

shutdown -r now

压缩驱动器

VBoxManage modifyhd /path/to/VDI/VM.vdi --compact

来源:ubuntuforums.org 上的 cyplex

答案3

我使用了 Emmanuels 的解决方案,并且只有在停止另外两个套接字后才有效:

systemctl stop systemd-journald.socket 

新行:

systemctl stop systemd-journald-dev-log.socket
systemctl stop systemd-journald-audit.socket
systemctl stop systemd-journald.service
sudo swapoff -a 
mount -n -o remount,ro -t ext4 /dev/sda1 / 
zerofree /dev/sda1

注意:我使用 Ubuntu 18.04.3 和 EXT4

将我的磁盘从 40 GB 缩小到 7 GB。谢谢。:)

答案4

我想为查尔斯格林的回答添加一条评论,但我的声誉不够。

运行zerofree命令时,您可能会收到一条错误消息,提示该/dev/sda1分区已挂载为读写。在这种情况下,您必须将该分区重新挂载为只读:

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

并重新运行zerofree命令,如下所述这里

相关内容