概述
相信大家在做文件遷移時,會有人遇到過這樣一個奇怪的問題:相同的文件放置在不同的硬盤上面,佔用存儲空間相差很大,部分目錄甚至達到2倍。這裡我們先從Linux存儲的本質開始介紹。
Linux文件系統的存儲方式
在Linux系統中一個文件由目錄項、inode和數據塊組成,數據塊作為存儲的最小單元。
♦ 目錄項:包括文件名和inode節點號。
♦ Inode:又稱文件索引節點,包含文件的基礎信息以及數據塊的指針。
♦ 數據塊:包含文件的具體內容。
1、inode
理解inode,要從文件儲存說起。文件儲存在硬盤上,硬盤的最小存儲單位叫做”扇區”(Sector),每個扇區儲存512位元組(相當於0.5KB)。
操作系統讀取硬盤的時候,不會一個扇區一個扇區地讀取,這樣效率太低,而是一次性連續讀取多個扇區,即一次性讀取一個”塊”(block)。這種由多個扇區組成的”塊”,是文件存取的最小單位。”塊”的大小,最常見的是4KB,即連續八個 sector組成一個 block。
文件數據都儲存在”塊”中,那麼很顯然,我們還必須找到一個地方儲存文件的元信息,比如文件的創建者、文件的創建日期、文件的大小等等。這種儲存文件元信息的區域就叫做inode,中文譯名為”索引節點”。

2、inode的大小
inode也會消耗硬盤空間,所以硬盤格式化的時候,操作系統自動將硬盤分成兩個區域。一個是數據區,存放文件數據;另一個是inode區(inode table),存放inode所包含的信息。
磁盤存儲分析
同一個文件在不同的硬盤佔用不同的磁盤空間,從本質講是這些文件的inode和block不同導致的。而這些參數是在硬盤初始化時設定的,會不會是因為這個原因導致的呢?
通過命令dumpe2fs 查看兩塊硬盤的信息:
硬盤 1 :


硬盤 2 :


從上面可以看出硬盤1的Block size: 8192 而硬盤2為Block size: 4096,也就是說硬盤1的最小存儲單元為8K,硬盤2為4K,會不會是因為文件裏面有好多小於4K的文件,當存儲在硬盤1最少佔用8k的空間導致上面奇怪的現象?
判斷驗證
在 硬盤1創建一個空文件,並輸入一個空格保存,
#vi test.txt
使用du –sh test.txt 發現文件大小為8K 如圖:

在 硬盤2 做同樣的動作

判斷再驗證
拷貝硬盤的文件進行對比
硬盤2:

硬盤1:

可以發現相同的文件不同的硬盤,佔用的空間大小不同。到這裡問題也就解決了,只需要重新做一下格式化就可以了。
原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/232975.html