我在 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 中
我也按照这里的一些说明停止了一些服务并尝试重新安装 - 但没有成功
它仍然说安装点正忙
我不确定这是否是因为最近的更新而发生的?我还通过卸载 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
命令,如下所述这里