linux之文件系統介紹
鳥哥linux書中講到 文件系統是一個可被掛載的數據
文件系統的運作與操作系統的文件數據有關。如linux文件數據有屬性、權限、實際數據,故而文件系統將文件屬性和權限放置在inode中,實際數據或目錄中的數據放置在block中,超級塊super block是記錄整個文件系統的信息,如:inode、block使用量剩余量總量,組個數。
Ext2磁盤數據結構:
1、啟動扇區:每個文件系統的最前面都有一個啟動扇區可以安裝引導程序。這樣就可以在不同引導程序安裝在不同的文件系統中了。而不用覆蓋磁盤唯一的MBR,這樣可以實現多重引導的環境。
2、block group:格式化時將分區為多個塊組,每個塊組都有獨立的super block、inode、block等塊。
1.superblock:是記錄整個文件系統相關信息的地方,主要有
block與inode的總量
未使用與已使用的block和inode數量
inode與block的大小,inode是128bytes,block是1024、2048、4096bytes
文件系統的掛載時間、最近一次寫入數據時間、檢查磁盤的時間
一個validbit數值,已掛載為0,未掛載為1
每個block group中可能都有super block,塊組0中必須有一個superblock,用戶復制給其他塊組並修復使用。同樣其他塊組中有superblock,也可以救援塊組0.
2.組描述:主要記錄每個blockgroup的開始與結束塊號,以及superblock、數據塊位圖、索引塊位圖、inode表、block塊的塊號。
3.數據塊位圖:位圖是位的序列,用二進制記錄塊的使用情況,0表示對應塊是空閑,1表示對應塊是占用。創建文件時會找空的block塊記錄文件內容,刪除文件,其實就是把block位圖和inode位圖的相關位置成空,相當於不被占用,註意:數據還在,下次創建文件時,覆蓋原已清空block位圖和inode位圖的文件的數據。
4.索引節點位圖:位圖是位的序列,用二進制記錄inode的使用情況,0表示對應塊是空閑,1表示對應塊是占用。
5.索引節點表:記錄文件的屬性權限以及該文件實際數據放置在哪些block中的,inode表記錄至少如下
該文件的訪問模式(read/write/excute)
該文件的擁有者與組
該文件的大小
該文件的創建時間改變時間、最近一次讀取的時間、最近一次修改的時間
該文件真正的指向
每個inode有128bytes
每個文件只占用一個inode
系統讀取文件時需要先找到inode,並分析inode所記錄的權限與用戶是否相符合,若符合開始讀取實際的block內容
block的大小與數量在格式化後就不可以改變了(除非重新格式化)
每個block中只能存放1個文件數據
當文件數據大於block的大小時,會占用多個block
當文件數據小雨block的大小時,磁盤空間會浪費
inode表需要記錄的東西非常多,而每個inode的大小是128bytes。若每個塊是4096bytes,每個塊才記錄32個inode。如果有個文件是500M,記錄block需要花4bytes。大概有13萬的block號需要記錄,系統將inode記錄block號碼的區域定義了12個直接、1個間接、1個雙簡介、1個三間接記錄區。
6.數據塊:用來放置文件的實際數據/目錄的內容。支持的大小為1K、2K、4K
使用dumpe2fs命令查看文件系統信息,dumpe2fs - dump ext2/ext3/ext4 filesystem information
語法:dumpe2fs [ -bfhixV ] [ -o superblock=superblock ] [ -o blocksize=blocksize ] device
選項:
-b:打印文件系統中的壞塊
-f:強制顯示所有信息
-h:只顯示超級塊信息
實例:
[root@www ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda5 8.0G 2.1G 5.5G 28% /
tmpfs 937M 0 937M 0% /dev/shm
/dev/sda1 194M 27M 158M 15% /boot
/dev/sda2 9.7G 1.5G 7.7G 16% /usr
/dev/sdc4 99M 23M 72M 24% /home
[root@www ~]# dumpe2fs /dev/sda1
dumpe2fs 1.41.12 (17-May-2010)
Filesystem volume name: <none> 列出文件系統的名稱<Label>,/etc/fstab中設備名稱可以使用這個。我這裏是none沒有定義名稱,可以使用e2label設置Label。
Last mounted on: /boot 掛載點
Filesystem UUID: 2f2da85e-f8c6-450b-bd82-99217ddc1ca4 設備的UUID,/etc/fstab也可以使用這個掛載
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic)
Filesystem features: has_journal ext_attr resize_inode dir_index filetype needs_recovery extent flex_bg sparse_super huge_file uninit_bg dir_nlink extra_isize
Filesystem flags: signed_directory_hash
Default mount options: user_xattr acl 默認掛載的參數
Filesystem state: clean 這個文件系統是沒有問題的
Errors behavior: Continue
Filesystem OS type: Linux
Inode count: 51200 inode總量
Block count: 204800 block總量
Reserved block count: 10240 保留塊總量
Free blocks: 171502 空閑block總量
Free inodes: 51162 空閑inodes總量
First block: 1
Block size: 1024
Fragment size: 1024
Reserved GDT blocks: 256
Blocks per group: 8192
Fragments per group: 8192
Inodes per group: 2048
Inode blocks per group: 256
Flex block group size: 16
Filesystem created: Thu Nov 9 23:11:17 2017
Last mount time: Sat Mar 3 05:57:03 2018
Last write time: Sat Mar 3 05:57:03 2018
Mount count: 26
Maximum mount count: -1
Last checked: Thu Nov 9 23:11:17 2017
Check interval: 0 (<none>)
Lifetime writes: 32 MB
Reserved blocks uid: 0 (user root)
Reserved blocks gid: 0 (group root)
First inode: 11
Inode size: 128 每個inode的大小
Journal inode: 8 日誌inode號
Default directory hash: half_md4
Directory Hash Seed: 0ccc6f7e-bdae-45d8-9a92-6b72b940045c
Journal backup: inode blocks
Journal features: journal_incompat_revoke
日誌大小: 4096k
Journal length: 4096
Journal sequence: 0x0000005c
Journal start: 1
Group 0: (Blocks 1-8192) [ITABLE_ZEROED] 第一個塊組
校驗和 0x746b,2008個未使用的inode
主 superblock at 1, Group descriptors at 2-2
保留的GDT塊位於 3-258
Block bitmap at 259 (+258), Inode bitmap at 275 (+274)
Inode表位於 291-546 (+290)
3785 free blocks, 2010 free inodes, 6 directories, 2008個未使用的inodes
可用塊數: 4408-8192
可用inode數: 39-2048
Group 1: (Blocks 8193-16384) [INODE_UNINIT, ITABLE_ZEROED]
校驗和 0x2a64,2048個未使用的inode
備份 superblock at 8193, Group descriptors at 8194-8194
保留的GDT塊位於 8195-8450
Block bitmap at 260 (+4294959363), Inode bitmap at 276 (+4294959379)
Inode表位於 547-802 (+4294959650)
642 free blocks, 2048 free inodes, 0 directories, 2048個未使用的inodes
可用塊數: 15743-16384
可用inode數: 2049-4096
Group 2: (Blocks 16385-24576) [INODE_UNINIT, ITABLE_ZEROED] 塊組2沒有superblock。
校驗和 0xd123,2048個未使用的inode
Block bitmap at 261 (+4294951172), Inode bitmap at 277 (+4294951188)
Inode表位於 803-1058 (+4294951714)
2048 free blocks, 2048 free inodes, 0 directories, 2048個未使用的inodes
可用塊數: 22529-24576
可用inode數: 4097-6144
Group 3: (Blocks 24577-32768) [INODE_UNINIT, ITABLE_ZEROED]
校驗和 0x4d3e,2048個未使用的inode
備份 superblock at 24577, Group descriptors at 24578-24578
保留的GDT塊位於 24579-24834
Block bitmap at 262 (+4294942981), Inode bitmap at 278 (+4294942997)
Inode表位於 1059-1314 (+4294943778)
188 free blocks, 2048 free inodes, 0 directories, 2048個未使用的inodes
可用塊數: 32581-32768
可用inode數: 6145-8192
僅展示了3個blockgroup塊組。
順便介紹下e2label命令
mane2label後:e2label - Change the label on an ext2/ext3/ext4 filesystem
用法:e2label device label
實例:
linux之文件系統介紹