Tar
磁碟上的文件與 tar 歸檔中的文件之間的總大小差異
我是一個新的 Linux 使用者,還在學習它。據我了解,預設情況下,該
tar
命令(單獨且不帶z
,j
或等選項J
)不會壓縮文件。它僅將多個文件捆綁到一個文件中。下面是我的測試。root@u2004:~# du -sh /etc/ 11M /etc/ root@u2004:~# tar cf etc.tar /etc tar: Removing leading `/' from member names root@u2004:~# du -sh etc.tar 6.6M etc.tar root@u2004:~#
可以看到,
/etc
目錄下的文件一共11M。將它們歸檔到單個文件後,新的歸檔文件為 6.6M。大小差異從何而來?是因為文件是連續寫入並擠在一起的嗎?
預設情況下
du
,以“塊”為單位測量文件大小。因此,每個小文件(小於一個塊)根據需要佔用盡可能多的塊,其餘部分為空。但它不能被另一個文件使用(因為一個塊只能屬於一個文件)。因此,您有一些“浪費”的字節數。
tar
另一方面,連接所有文件。“浪費”的空間要少得多。如果您想更好地預測 tar 大小,可以使用 key
-b
for 。du
意思是如果你跑
$ du -shb /etc $ du -shb etc.tar
你會得到彼此更接近的數字。差異將來自文件的描述。第一種情況下的目錄大小和第二種情況下的 tar 標頭大小。
要進一步調查,您可以從以下內容開始:
$ df /some_test_dir
這將告訴您該目錄所在的物理設備(列文件系統)
$ sudo /sbin/dumpe2fs /dev/?? |grep 'Block size'
在此處定義您的設備,您將獲得該設備上塊的大小。
如果你這樣做
du /some_test_dir
並且那個目錄是空的 - 你會得到一個塊大小。如果您現在放置一個文件(或許多文件),所有這些文件的長度都為零,那麼
du
在目錄上仍然會給出一個塊大小 - 這是因為文件根本不佔用任何空間,以及關於它們的資訊儲存在目錄的塊中。對於下一個測試,在這個目錄中創建 N 個文件,每個文件的大小都小於一個塊。實際大小無關緊要,它必須大於零,小於一個塊。現在
du
目錄上會給你(N+1)*block
。這裡每個文件都佔用一個塊,而目錄本身佔用一個塊。如果您有很多文件(多少取決於文件系統),那麼目錄本身可以增長,以便在其中儲存文件資訊。但是目錄大小將始終是塊大小的倍數。