當文件系統不覆蓋整個分區時,如何才能找到文件系統在塊設備上實際佔用多少空間?文件系統佔用的全部空間
考慮基本的例子來演示的核心問題:
dd if=/dev/zero bs=1024 count=20480 of=something.img
losetup -f $PWD/something.img
mke2fs /dev/loop0
mount /dev/loop0 /mnt
但df -k /mnt
給出了這樣的輸出:
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/loop0 19827 172 18631 1% /mnt
我創建精確2048KB的設備,但statvfs()
系統調用(和類似於上面顯示的df
)報告文件系統僅需要19827KB。
看來,statvfs()
只報告可供用戶使用的塊,但不報告文件系統的完整實際大小。
到目前爲止,我能找到的僅有的ext2/3/4,具體哈克解決:tune2fs -l /dev/loop0 | grep 'Block count:'
或dumpe2fs -h /dev/loop0 | grep 'Block count:'
。更清潔一點就是使用libext2fs
庫(e2fprogs
包的一部分)來讀取超級塊,但我更喜歡文件系統中立的系統調用(如果可用)。
「您指向的每個操作系統提供的非便攜式調用」很不幸地是錯誤的:查詢循環設備或分區/塊設備的大小不會有幫助,如果文件系統不涵蓋整個設備/分區。 – Dummy00001
是的,的確如此。因此,基本上,如果您想要覆蓋這種情況,則需要根據其結構手動計算文件系統開銷... – pah
特定於文件系統的計算文件系統大小的方法要簡單得多,實際上:大多數(如果不是全部的話)文件系統的大小都是在其超級塊中編碼的。請參閱https://github.com/tytso/e2fsprogs/blob/master/lib/blkid/probe.h – Dummy00001