我正在使用 AOakley 的出色指南缩小 Linux SDCard 分区。我试图将其自动化,但似乎没有命令行工具可以确定分区中使用的字节数。
例如,gparted 告诉我已用空间为 6.99GB 中的 1.88GB(注意,我使用的是安装到 /dev/sdb 的第二个分区的 /dev/loop0):
df
是错的:
% df /dev/loop0
Filesystem ... Use%
udev ... 0%
...并且fdisk
不parted
打印已用空间。
我可以使用命令行中的什么方式来确定分区中已用的空间gparted
?
答案:以下总结:分区是ext4
,它允许我使用dumpe2fs
和提取:free blocks
,block count
(总计),并且block size
可以组合以完全匹配gparted
。事实证明,resize2fs
在收缩期间处理碎片。ext4
有关更多信息,请参阅手册页(尽管手册页编辑器对 GiB 与 GB 有点不满!:)
答案1
df
几乎是正确的工具,但您应该查询属于要检查的文件系统的挂载点(或下面的任何文件),而不是设备节点。您使用的节点/dev/loop0
是属于udev
虚拟文件系统的特殊文件;因此您得到了udev
。
在某处挂载/dev/loop0
(或者/dev/sdb2
,我不确定为什么需要/dev/loop0
) (可以是ro
mount ) 并调用df /the/mountpoint
。然后df
将告诉您文件系统关于自身的报告。
我说的df
是几乎正确的工具”,因为无法保证您可以将文件系统(以及稍后的分区)缩小到该工具报告的大小。df
打印的内容可能是您的第一个(或者更确切地说是第零个)估计值。
您需要不同的工具来调整不同文件系统的大小。在理想情况下,此类工具(或某些附带工具)能够告诉您最小可能大小,或者至少是调整大小肯定会成功的最小大小。实际上,您可能会遇到以下情况:
已知错误:
估计的文件系统最小大小resize2fs
可能不正确,尤其是对于块大小为 1k 和 2k 的文件系统。
(来源)
gparted
使用文件系统特定的工具。我确实用它运行过strace
,没有看到它使用的证据df
。我看到了btrfs filesystem show …
,,dumpe2fs …
…
概括:
- 你使用的
df
方法错误。 - 无论如何,最好使用特定于文件系统的工具;
gparted
确实如此。我无法告诉您应该使用什么工具,因为您没有指定所讨论的文件系统。