linux文件復制命令的實現 linux文件復制命令cat



文章插圖
linux文件復制命令的實現 linux文件復制命令cat

文章插圖
概述
相信大家在做文件遷移時,會有人遇到過這樣一個奇怪的問題:相同的文件放置在不同的硬盤上面,占用存儲空間相差很大,部分目錄甚至達到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:
【linux文件復制命令的實現 linux文件復制命令cat】可以發現相同的文件不同的硬盤,占用的空間大小不同 。到這里問題也就解決了,只需要重新做一下格式化就可以了 。