Tar

磁碟上的文件與 tar 歸檔中的文件之間的總大小差異

  • April 15, 2022

我是一個新的 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 -bfor 。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。這裡每個文件都佔用一個塊,而目錄本身佔用一個塊。

如果您有很多文件(多少取決於文件​​系統),那麼目錄本身可以增長,以便在其中儲存文件資訊。但是目錄大小將始終是塊大小的倍數。

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