Disk-Usage
du
如何計算使用的塊數
我很想知道如何
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
。