Dan*_*ish 21 virtualbox disk-usage 18.04
我正在使用 Ubuntu 18.04 在 Windows 10 专业版主机上的 VM VirtualBox 上进行开发,我之前按照以下步骤压缩了虚拟硬盘:https : //www.howtogeek.com/312883/how-to-shrink- a-virtualbox-virtual-machine-and-free-up-disk-space/
除了通常的更新 - 我没有乱用它,(最近刚刚安装了 virtualbox gues 添加的更新)
以前,我只显示了一个 /dev/sda1 - 今天我有三个,当我尝试在其中任何一个上运行 zerofree 时,我发现该设备安装在 rw 中
我也按照这里的一些说明停止了一些服务并尝试重新安装 - 但它没有用
它仍然说挂载点很忙
我不确定这是不是因为最近的更新而发生的?我还通过卸载 vmware 来宾添加进行了测试 - 但它没有用
建议?
Teo*_*man 24
安装零免费
sudo apt install zerofree
重新启动进入 ubuntu 恢复控制台,按住 [RIGHT SHIFT]
advanced options -> recovery mode -> root console
找到根目录
mount | grep "sda"
零运行
echo "u" > /proc/sysrq-trigger
mount /dev/mapper / -o remount,ro
zerofree -v /dev/sda1
Run Code Online (Sandbox Code Playgroud)
重启
shutdown -r now
压缩驱动器
VBoxManage modifyhd /path/to/VDI/VM.vdi --compact
来源:来自 ubuntuforums.org 的 cyplex
Emm*_*N K 21
什么对我有用(结合了几个相关问题和论坛的答案):
首先安装 zerofree:
sudo apt-get install zerofree
Run Code Online (Sandbox Code Playgroud)
创建 0 以获取要回收的空间(删除所有不需要的文件以及清空垃圾箱)
重新启动到 GRUB 菜单(在 Ubuntu 启动时按 Esc)
Advanced options for Ubuntu > Recovery Mode (choose highest version number)
Run Code Online (Sandbox Code Playgroud)
从Recovery Menu 选择Drop to root shell prompt
df 获取您的分区(查看您想要缩小的分区,例如 sda1、sda 4 等。通常是它的/dev/sda1)
df
Run Code Online (Sandbox Code Playgroud)
尝试运行 zerofree
zerofree /dev/sda1
Run Code Online (Sandbox Code Playgroud)
如果您从 zerofree 收到错误,例如/dev/sda1安装为 rw,那么您需要将其安装为只读才能继续。
要将/dev/sda1所需分区挂载为只读分区以zerofree在其上使用:
注意 1:您应该相对快速地执行以下步骤,以便能够像ro在服务和套接字重新使用之前一样安装驱动器并再次开始写入磁盘。否则,您可能需要systemctl再次执行该步骤以确保已停止写入磁盘。
注 2:(跳过阅读此内容,直到此后的步骤失败)。根据您的系统,您可能还有其他服务和套接字仍在写入磁盘而不是systemd-journald. 如果以下步骤不起作用,请尝试在运行这些步骤后查看仍在写入磁盘的内容,然后以相同的方式停止它们。
systemctl --type=service
systemctl --type=socket
Run Code Online (Sandbox Code Playgroud)
更新:用户@Kevin 给出了一个很好的建议,可以在单行命令中执行这些步骤(见下文),以防服务和套接字过快恢复使用:
systemctl stop systemd-journald.socket && systemctl stop systemd-journald.service && sudo swapoff -a && mount -n -o remount,ro -t ext2 /dev/sda1 / && zerofree /dev/sda1
Run Code Online (Sandbox Code Playgroud)
首先,停止所有写入磁盘的进程,以免mount /: mount busy出错
systemctl stop systemd-journald.socket
systemctl stop systemd-journald.service
Run Code Online (Sandbox Code Playgroud)
检查是否启用了任何交换分区:
swapon -s
Run Code Online (Sandbox Code Playgroud)
如果启用,则禁用它们
sudo swapoff -a
Run Code Online (Sandbox Code Playgroud)
最后,您应该能够以dev/sda1只读方式挂载。(您的文件系统类型可能与 不同ext2。要查找文件系统,请运行df -T)
mount -n -o remount,ro -t ext2 /dev/sda1 /
Run Code Online (Sandbox Code Playgroud)
然后最后运行 zerofree
zerofree -v /dev/sda1
Run Code Online (Sandbox Code Playgroud)
Whenszerofree完成后,关闭Ubuntu的
halt
Run Code Online (Sandbox Code Playgroud)
最后,在主机操作系统(在我的情况下为 Windows 10)上,压缩 vdi 以回收空间:
VBoxManage.exe modifymedium disk "C:\path\to\disk.vdi" --compact
Run Code Online (Sandbox Code Playgroud)
小智 9
我使用了 Emmanuels 的解决方案,它仅在停止另外两个套接字后才起作用:
systemctl stop systemd-journald.socket
Run Code Online (Sandbox Code Playgroud)
新线路:
systemctl stop systemd-journald-dev-log.socket
systemctl stop systemd-journald-audit.socket
Run Code Online (Sandbox Code Playgroud)
systemctl stop systemd-journald.service
sudo swapoff -a
mount -n -o remount,ro -t ext4 /dev/sda1 /
zerofree /dev/sda1
Run Code Online (Sandbox Code Playgroud)
注意:我使用 Ubuntu 18.04.3 和 EXT4
将我的磁盘从 40 GB 缩小到 7 GB。谢谢。:)
正如其中一条评论中提到的,您安装了三个分区(sda1、sda2 和 sda3)和几个用于其他目的的临时文件系统。
手册zerofree指出,如果您想在文件系统上运行它,那么该文件系统必须以只读方式挂载或卸载。当您运行 Ubuntu 时,可以肯定的/是/dev/sda1,您计算机上的根分区已安装,因此该命令会失败。
如果您想继续运行zerofree,/dev/sda1您需要从备用设备启动,例如可启动的 USB 或 ISO 映像,或者对备用 linux 映像执行 chroot。您引用的链接为您提供了有关如何在根分区上运行此程序的具体说明。请重新阅读他们关于如何在 Linux 中使用该程序的说明:
zerofree2019-01-22
当前版本的 Ubuntu 使zerofree从恢复会话中运行变得困难 - 在这种情况下,从实时 USB 运行此程序更容易:
zerofree,如果尚未安装,请使用命令sudo apt install zerofree小智 5
我会在 Charles Green 的回答中添加评论,但我没有足够的声誉。
运行zerofree命令时,您可能会收到一条错误消息,指出/dev/sda1分区以读写方式挂载。在这种情况下,您必须将此类分区重新安装为只读:
mount -n -o remount,ro -t ext2 /dev/sda1 /
Run Code Online (Sandbox Code Playgroud)
并重新运行zerofree命令,如here所述
| 归档时间: |
|
| 查看次数: |
24159 次 |
| 最近记录: |