我有个问题。我有 Vmware 工作站,其中一台虚拟机是带有 ubuntu 1804 的 nextcloud。
我喜欢有一个活泼的实例,因此我使用在这里找到的这些突击队:
sudo e4defrag /
dd if=/dev/zero of=wipefile bs=1M; sync; rm wipefile
sudo vmware-toolbox-cmd disk shrinkonly
一段时间内,这种方法运行良好。但现在在第 2 步时,dd if=/dev/zero of=wipefile bs=1M; sync; rm wipefile
我收到错误:
64172396544 bytes (64 GB, 60 GiB) copied, 56.5438 s, 1.1 GB/s
ncadmin@cloud:~$ error writing 'wipefile': No space left on device
但是当我执行:df -Th 我有足够的空间:
Filesystem Type Size Used Avail Use% Mounted on
udev devtmpfs 3.9G 0 3.9G 0% /dev
tmpfs tmpfs 796M 1.4M 794M 1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv ext4 103G 39G 60G 40% /
tmpfs tmpfs 3.9G 0 3.9G 0% /dev/shm
tmpfs tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
/dev/sda2 ext4 976M 157M 753M 18% /boot
/dev/loop0 squashfs 89M 89M 0 100% /snap/core/739 6
/dev/loop1 squashfs 55M 55M 0 100% /snap/lxd/1210 0
/dev/loop2 squashfs 55M 55M 0 100% /snap/lxd/1198 5
/dev/loop3 squashfs 90M 90M 0 100% /snap/core/771 3
tmpfs tmpfs 796M 0 796M 0% /run/user/1000
我只对 Linux 有基本的了解
答案1
No space left on device
是预期的。此命令
dd if=/dev/zero of=wipefile bs=1M
读取/dev/zero
并写入wipefile
。特殊文件/dev/zero
不能耗尽。命令运行直到wipefile
无法再增长(或直到您先手动终止它)。
因此,您堵塞了文件系统,确实有no space left on device
。然后您用刷新缓存sync
并用删除了文件rm
。在删除之前,文件正好是64172396544
字节,删除文件时会回收此空间。现在,您在上有大约 60 GiB 可用/
。全部合适。
创建此文件的目的是用零字节填充可用空间;同步的目的是确保所有零都实际到达设备;删除文件的目的是将零块再次正式标记为空。您不需要文件本身;您需要将零写入“空”块。稍后删除的文件只是一种简单的方法。
我想vmware-toolbox-cmd
现在可以完成它的工作了:缩小。我完全不了解这个工具,但当你将整个文件系统保留(或想要保留)为一个文件并且希望文件尽可能小的时候,用零填充空白的想法是相当明智的。从主机的角度来看,虚拟机的主文件系统只是一个文件,对吧?比较我的这个答案使用相同的方法来准备文件系统,以便有效地存储为常规文件。我的代码明确地说明了
## Long wait here. Expect "no space left on device".