1. 程式人生 > >linux之文件系統介紹

linux之文件系統介紹

linux基礎知識

寫在前面:當磁盤分區後需要格式化分區,操作系統才可以使用分區。會依據操作系統設置的文件屬性/權限進行格式化成操作系統所支持的格式。

鳥哥linux書中講到 文件系統是一個可被掛載的數據

文件系統的運作與操作系統的文件數據有關。如linux文件數據有屬性、權限、實際數據,故而文件系統將文件屬性和權限放置在inode中,實際數據或目錄中的數據放置在block中,超級塊super block是記錄整個文件系統的信息,如:inode、block使用量剩余量總量,組個數。

  1. Ext2磁盤數據結構:

技術分享圖片

1、啟動扇區:每個文件系統的最前面都有一個啟動扇區可以安裝引導程序。這樣就可以在不同引導程序安裝在不同的文件系統中了。而不用覆蓋磁盤唯一的MBR,這樣可以實現多重引導的環境。

2、block group:格式化時將分區為多個塊組,每個塊組都有獨立的super block、inode、block等塊。

1.superblock:是記錄整個文件系統相關信息的地方,主要有

    1. block與inode的總量

    2. 未使用與已使用的block和inode數量

    3. inode與block的大小,inode是128bytes,block是1024、2048、4096bytes

    4. 文件系統的掛載時間、最近一次寫入數據時間、檢查磁盤的時間

    5. 一個validbit數值,已掛載為0,未掛載為1

    6. 每個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表記錄至少如下

    1. 該文件的訪問模式(read/write/excute)

    2. 該文件的擁有者與組

    3. 該文件的大小

    4. 該文件的創建時間改變時間、最近一次讀取的時間、最近一次修改的時間

    5. 該文件真正的指向

    6. 每個inode有128bytes

    7. 每個文件只占用一個inode

    8. 系統讀取文件時需要先找到inode,並分析inode所記錄的權限與用戶是否相符合,若符合開始讀取實際的block內容

    inode表需要記錄的東西非常多,而每個inode的大小是128bytes。若每個塊是4096bytes,每個塊才記錄32個inode。如果有個文件是500M,記錄block需要花4bytes。大概有13萬的block號需要記錄,系統將inode記錄block號碼的區域定義了12個直接、1個間接、1個雙簡介、1個三間接記錄區。

    6.數據塊:用來放置文件的實際數據/目錄的內容。支持的大小為1K、2K、4K

    1. block的大小與數量在格式化後就不可以改變了(除非重新格式化)

    2. 每個block中只能存放1個文件數據

    3. 當文件數據大於block的大小時,會占用多個block

    4. 當文件數據小雨block的大小時,磁盤空間會浪費

    使用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之文件系統介紹