Disk-Usage

du 如何計算使用的塊數

  • May 19, 2016

我很想知道如何du計算文件中使用的塊。

設想

dd bs=1 seek=2GiB if=/dev/null of=big
0+0 records in
0+0 records out
0 bytes (0 B) copied, 2.3324e-05 s, 0.0 kB/s

ls -lh big
-rw-r--r-- 1 roaima roaima 2.0G May 19 15:55 big

du -h big
0       big

我一直接受它會給我不同的答案ls,這很好,因為他們正在測量不同的東西。

現在我有一個基於雲的文件系統,我不僅要為儲存付費,而且每次下載數據時都要付費,所以我需要盡量減少一般內務活動訪問的數據量,例如“這棵樹中使用了多少磁碟空間? "

我不知道有一個庫/系統呼叫來告訴我使用的塊的數量,儘管很容易有一個。我不相信du它會讀取它正在考慮的每個文件,因為這並不能區分填充零的文件和真正稀疏的文件。

那麼,du計數塊是如何使用的呢?

du用於stat(2)查找文件使用的塊數。如果您執行stat big,您應該會看到塊數與du.

您可以使用該選項強制du計算字節數;-b那麼它的輸出匹配ls’s.

在這兩種情況下,它都使用stat(2)(或者更確切地說,fstatat(2)至少在我擁有的版本中):

$ strace du big|&grep big
execve("/usr/bin/du", ["du", "big"], [/* 57 vars */]) = 0
newfstatat(AT_FDCWD, "big", {st_mode=S_IFREG|0644, st_size=2147483648, ...}, AT_SYMLINK_NOFOLLOW) = 0
write(1, "0\tbig\n", 60 big

處理上的差異在 中可見du.c

引用自:https://unix.stackexchange.com/questions/284201