<ul id="qxxfc"><fieldset id="qxxfc"><tr id="qxxfc"></tr></fieldset></ul>


      磁盤是用來儲文件的,但是必須先把磁盤格式化為某種格式的文件系統(tǒng),才能存儲文件。文件系統(tǒng)的目的就是組織和管理磁盤中的文件。在 Linux 系統(tǒng)中,最長見的是
      ext2 系列的文件系統(tǒng)。其早期版本為 ext2,后來又發(fā)展出 ext3 和 ext4。ext3 和 ext4 雖然對 ext2
      進(jìn)行了增強(qiáng),但是其核心設(shè)計并沒有發(fā)生變化,所以我們?nèi)允且暂^老的 ext2 作為演示對象。

      基本結(jié)構(gòu)

      Ext2 文件系統(tǒng)在格式化的時候一般會包含多個區(qū)塊群組(blockgroup)。Ext2 格式化后有點(diǎn)像下面這樣:



      這是因?yàn)槲募到y(tǒng)非常大時,如果將所有的 inode 和所有的 block 放在一起管理起來會比較麻煩。所以將文件系統(tǒng)分割為多個 Block Group,每個
      Block Group 中都有獨(dú)立的 inode/block/superblock 系統(tǒng)。

      Block
      Block 就是我們在《Linux 文件系統(tǒng)相關(guān)的基本概念
      <https://www.cnblogs.com/sparkdev/p/11200395.html>》一文中介紹的邏輯塊。對于 ext2
      文件系統(tǒng)來說,硬盤分區(qū)首先被分割為一個一個的邏輯塊(Block),每個 Block 就是實(shí)際用來存儲數(shù)據(jù)的單元,大小相同,Block 按照0,1,2,3
      的順序進(jìn)行編號,第一個 Block 的編號為 0。ext2 文件系統(tǒng)支持的 Block 的大小有 1024 字節(jié)、2048 字節(jié)和 4096 字節(jié),Block
      的大小在創(chuàng)建文件系統(tǒng)的時候可以通過參數(shù)指定,如果不指定,則會從 /etc/mke2fs.conf 文件中讀取對應(yīng)的值。原則上,Block
      的大小與數(shù)量在格式化后就不能夠發(fā)生改變了,每個 Block 內(nèi)最多只會存放一個文件的數(shù)據(jù)(即不會出現(xiàn)兩個文件的數(shù)據(jù)被放入同一個 Block
      的情況),如果文件大小超過了一個 Block 的 size,則會占用多個 Block 來存放文件,如果文件小于一個 Block 的 size,則這個
      Block 剩余的空間就浪費(fèi)掉了。
      可以使用 dumpe2fs 命令查看 Block 的大?。?br>$ sudo dumpe2fs /dev/sda1 | grep "Block size:"
      在筆者的環(huán)境中,輸出的結(jié)果如下:
      Block size:?????????????? 1024

      注意,Ext2 文件系統(tǒng)的 block 主要有下面一些特點(diǎn):

      * block 的大小與數(shù)量在格式化完就不能夠再改變了(除非重新格式化)
      * 每個 block 內(nèi)最多只能夠放置一個文件的數(shù)據(jù)
      * 如果文件大于 block 的大小,則一個文件會占用多個 block 數(shù)量
      * 若文件小于 block,則該 block 的剩余容量就不能夠再被使用了
      Block Group
      Block 在邏輯上被劃分為多個 Block Group,每個 Block Group 包含的 Block 數(shù)量相同,具體是在 SuperBlock 中通過
      s_block_per_group 屬性定義的(最后一個 Block Group 除外,最后剩下的 Block 數(shù)量可能小于
      s_block_per_group,這些 Block 會被劃分到最后一個 Block Group 中)。dumpe2fs 命令會列出所有的 Block
      Group 信息,但是在統(tǒng)計信息中卻沒有說明當(dāng)前的文件系統(tǒng)中包含有多少個 Block Group。下面是 dumpe2fs 輸出的 Block Group
      信息的節(jié)選:
      ... Group 0: (Blocks 1-8192) [ITABLE_ZEROED] Checksum 0xa22b, unused inodes 501
      Primary superblock at1, Group descriptors at 2-81 Reserved GDT blocks at 82-337
      Block bitmap at338 (+337), Inode bitmap at 354 (+353) Inode table at 370-497 (+
      369) 5761 free blocks, 501 free inodes, 2 directories, 501 unused inodes Free
      blocks:2432-8192 Free inodes: 12-512 Group 1: (Blocks 8193-16384)
      [INODE_UNINIT, BLOCK_UNINIT, ITABLE_ZEROED] Checksum0xea71, unused inodes 512
      Backup superblock at8193, Group descriptors at 8194-8273 Reserved GDT blocks at
      8274-8529 Block bitmap at 339 (bg #0 + 338), Inode bitmap at 355 (bg #0 + 354)
      Inode table at498-625 (bg #0 + 497) 7855 free blocks, 512 free inodes, 0
      directories,512 unused inodes Free blocks: 8530-16384 Free inodes: 513-1024 ...
      Group0 占用從 1 到 8192 號的 block。其中的 Superblock 則在 1 號 block 內(nèi)。
      文件系統(tǒng)描述說明(Group descriptors)占用從 2 到 81 號 block。
      Block bitmap 和 Inode bitmap 分別在 338 和 354 號 block 上。
      Inode table 占用 370-497 號 block。
      Group0 當(dāng)前可用的 block 號為:2432-8192,可用的 inode 號碼為:12-512。
      Group 內(nèi) inode 數(shù)的計算方式:
      一個 inode 占用 256 Bytes
      Inode 占用的 block 數(shù):497 - 370 + 1 = 128
      每個 block 的大小為 1024 Bytes
      Inode 數(shù)為:128 * 1024 / 256 = 512

      Boot Block
      每個磁盤分區(qū)的開頭 1024 字節(jié)大小都預(yù)留為分區(qū)的啟動扇區(qū),存放引導(dǎo)程序和數(shù)據(jù),所以又叫引導(dǎo)塊。引導(dǎo)塊在第一個 Block,即 Block 0
      中存放,但是未必占滿這個 Block,原因是 Block 的大小可能大于 1024 字節(jié)。
      這里是存放開機(jī)管理程序的地方,這是個非常重要的設(shè)計。因?yàn)檫@樣使得我們能夠把不同的開機(jī)管理程序安裝到每個文件系統(tǒng)的最前端,而不用覆蓋整顆磁盤唯一的
      MBR,這樣就能支持多系統(tǒng)啟動了。

      Block Group 的組成部分

      如上圖所示,每個 Block Group 都由下面幾個組成部分:

      * Superblock(超級塊)
      * Group Description(組描述)
      * Block bitmap(塊位圖)
      * Inode bitmap(inode 位圖)
      * Inode table(inode 表)
      * Data Blocks(數(shù)據(jù)塊)
      Superblock(超級區(qū)塊)
      Superblock 是記錄整個 filesystem 相關(guān)信息的地方,其實(shí)上除了第一個 block group 內(nèi)會含有 superblock
      之外,后續(xù)的 block group 不一定都包含 superblock,如果包含,也是做為第一個 block group 內(nèi) superblock
      的備份。superblock 記錄的主要信息有:

      * block 與 inode 的總量
      * 未使用與已使用的 inode/block 數(shù)量
      * block 與 inode 的大小(block 為 1,2,4K,inode 為 128 Bytes 或 256 Bytes)
      * filesystem 的掛載時間、最近一次寫入數(shù)據(jù)的時間、最近一次檢驗(yàn)磁盤(fsck)的時間等文件系統(tǒng)的相關(guān)信息
      * 一個 valid bit 數(shù)值,若此文件系統(tǒng)已被掛載,則 valid bit 為 0,若未被掛載,則 valid bit 為 1
      Superblock 的大小為 1024 Bytes,它非常重要,因?yàn)榉謪^(qū)上重要的信息都在上面。如果 Superblock
      掛掉了,分區(qū)上的數(shù)據(jù)就很難恢復(fù)了??梢允褂?dumpe2fs 命令查看 分區(qū)的 Superblock 信息,如果添加選項(xiàng) -h,dumpe2fs 命令則只輸出
      Superblock 中的信息:
      $ sudo dumpe2fs -h /dev/sdd1


      Group Description(組描述)
      Group Description 用來描述每個 group 的開始與結(jié)束位置的 block
      號碼,以及說明每個塊(superblock、bitmap、inodemap、datablock) 分別介于哪一個 block 號碼之間。

      Block bitmap(區(qū)塊對照表)
      在創(chuàng)建文件時需要為文件分配 block,屆時就會選擇分配空閑的 block 給文件使用。如何查看 block 是否已經(jīng)被使用了呢?此時就需要借助于
      block bitmap 了。通過 block bitmap 可以知道哪些 block
      是空的,因此系統(tǒng)就能夠很快地找到空閑空間來分配給文件。同樣的,在刪除某些文件時,文件原本占用的 block 號碼就要釋放出來,此時在 block bitmap
      當(dāng)中相對應(yīng)到該 block 號碼的標(biāo)志就需要修改成"空閑"。這就是 block bitmap 的作用。

      Inode bitmap(inode 對照表)
      inode bitmap 與 block bitmap 的功能類似,只是 block bitmap 記錄的是使用與未使用的 block 號,而 inode
      bitmap 則記錄的是使用與未使用的 inode 號。

      Inode table?? ?
      Inode table 中存放著一個個 inode,inode 的內(nèi)容記錄文件的屬性以及該文件實(shí)際數(shù)據(jù)是放置在哪些 block 內(nèi),inode
      記錄的主要的文件屬性如下:

      * 該文件的讀寫權(quán)限(rwx)
      * 該文件的擁有者和所屬組(owner/group)
      * 該文件的容量
      * 該文件的 ctime(創(chuàng)建時間)
      * 該文件的 atime(最近一次的讀取時間)
      * 該文件的 mtime(最近修改的時間)
      * 該文件的特殊標(biāo)識,比如 SetUID 等
      * 該文件真正內(nèi)容的指向(pointer)
      inode 的數(shù)量與大小也是在格式化時就已經(jīng)固定了的,另外 inode 還有如下特點(diǎn):

      * 每個 inode 大小均固定為 128 Bytes(新的 ext4 為 256 Bytes)
      * 每個文件都僅會占用一個 inode
      * 文件系統(tǒng)能夠創(chuàng)建的文件數(shù)量與 inode 的數(shù)量相關(guān)
      * 系統(tǒng)讀取文件時需要先找到 inode,并分析 inode 所記錄的權(quán)限與使用者是否符合,若符合才能夠開始讀取 block 的內(nèi)容
      Data block
      Data block 是用來存放文件內(nèi)容的地方,Ext2 文件系統(tǒng) 1K、2K 和 4K 大小的 block。在格式化文件系統(tǒng)時 block
      的大小就確定了,并且每個 block 都有編號。需要注意的是,由于 block
      大小的差異,會導(dǎo)致文件系統(tǒng)能夠支持的最大磁盤容量和最大單個文件的大小并不相同。下表描述了 block 大小與文件系統(tǒng)以及單個文件大小的關(guān)系:



      此外 Ext2 文件系統(tǒng)的 block 還有下面一些限制:

      * block 的大小與數(shù)量在格式化后就不能再改變了(除非重新格式化)
      * 每個 block 內(nèi)最多只能夠放置一個文件的數(shù)據(jù)
      * 如果文件大于 block 的大小,那么一個文件會占用多個 block
      * 若文件小于 block,則該 block 的剩余容量也不能再被使用了(磁盤空間被浪費(fèi))
      參考:
      鳥哥的私房菜
      dumpe2fs man page <http://man7.org/linux/man-pages/man8/dumpe2fs.8.html>
      Linux ext2, ext3, ext4 文件系統(tǒng)解讀[1]
      <https://blog.csdn.net/qwertyupoiuytr/article/details/70305582>
      Ext2文件系統(tǒng)簡單剖析(一) <https://www.jianshu.com/p/3355a35e7e0a>

      友情鏈接
      ioDraw流程圖
      API參考文檔
      OK工具箱
      云服務(wù)器優(yōu)惠
      阿里云優(yōu)惠券
      騰訊云優(yōu)惠券
      京東云優(yōu)惠券
      站點(diǎn)信息
      問題反饋
      郵箱:[email protected]
      QQ群:637538335
      關(guān)注微信

        <ul id="qxxfc"><fieldset id="qxxfc"><tr id="qxxfc"></tr></fieldset></ul>
          乱色精品无码一区二区国产盗 | 巨肉黄暴辣文高h文霸道总裁 | 操逼三区| 特级西西WWw44高清大胆图片 | 与亲女洗澡时伦了 | 草逼爽 | 丰满放荡岳乱妇91ww | 青青草视频 | 最好看的日本字幕MV视频 | 天天艹人人艹 |