写入“wipefile”时出错:设备上没有剩余空间

写入“wipefile”时出错:设备上没有剩余空间

我有个问题。我有 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".

相关内容