關於ext4 buddy bitmap構建分析

2021-08-21 02:51:26 字數 1419 閱讀 3502

(注釋,此處再次強調bitmap

是磁碟上bitmap在記憶體裡的表現,而buddy bitmap只在記憶體裡,是掃瞄磁碟構建出來的,umount的時候會清理掉)

其中磁碟的bitmap乙個位代表乙個block的使用情況,而buddy bitmap也是乙個page也就是4096 *8 = 32768位,使用前0-16383位表示每2個blocks的使用與否,用16834-24575位表示每4個blocks使用與否,以此類推,情況如下圖所示:

以上就是buddy bitmap的儲存格式。但是如何利用空閒的block來填充buddy bitmap中的位呢?

這個函式就是在初始化buddy bitmap,首先函式用mb_find_next_zero_bit在bitmap裡找到第乙個空閒的block的位置,之後再while裡,繼續在bitmap裡找第乙個1的位置,從開始的0到下乙個1,其實就是在找這之間空閒的塊到底有多少個,也就是**的i-first=len,如果len=1則直接新增到bb_counter[0]裡,這裡解釋一下這個bb_counter是什麼意思,原始碼的注釋截圖如下:

也就是表示2的index(陣列的索引)個blocks的個數,假如bb_counter[3]=5也就是磁碟上連續8個block有5個,所以我們找到的len=1自然也就在bb_counter[0]加1.接著看len>1的情況,這是會呼叫

**上面的例子很簡單,也就是說假如從5開始有7個block空閒,則要拆分為4+2+1,修改對應的bb_counter,同時根據block要清楚他在buddy bitmap裡對應的位,以表示空閒。這樣就函式執行完畢,我們就構建出了buddybitmap。最後放一張google到的ppt裡的圖

從這圖就可以看出假設磁碟0-14個block是空閒的,拆分為8+4+2,第乙個8個block到對應的buddy bitmap裡表示連續8個block的點陣圖區域把第乙個位清零。第二個4個block到對應的表示連續4個block的點陣圖區域把第三個清零,最後的兩個塊,到最開始表示連續2個塊的block點陣圖區域把第7個位清零,這樣就驗證了前面分析的正確性。

顯示 Ext2 Ext3 Ext4 結構資訊

要顯示乙個 ext2 ext3 ext4 資訊,可以使用 e2fsprogs 中的dumpe2fs或tune2fs l命令,例如 dumpe2fs dev sda1 或者tune2fs l dev sda1 dumpe2fs 會顯示 superblock 上的資訊和每個區塊組 block group...

ext2 ext3與ext4的區別

ext2與ext3 linux ext2 ext3檔案系統使用索引節點來記錄檔案資訊,作用像windows的檔案分配表。索引節點是乙個結構,它包含了乙個檔案的長度 建立及修改時間 許可權 所屬關係 磁碟中的位置等資訊。乙個檔案系統維護了乙個索引節點的陣列,每個檔案或目錄都與索引節點陣列中的唯一乙個元...

ext3,ext4下誤刪檔案

先新增一塊硬碟 然後分割槽 格式化為ext3 4並掛載 mkfs.ext4 dev sdb1 mkdir data mount dev sdb1 aa extundelete安裝 安裝依賴的軟體包 必須安裝 yum install e2fsprogs y yum install gcc gcc c ...