本文将介紹怎樣讀取一個分區的superblock:
1. 首先我們檢視一下在磁盤上有哪些分區,通過fdisk -l

這裡有三個分區,我們下面檢視/dev/sda3(這是一個device file)
2. 從/dev/sda3拷貝1024B-2048B(這就是superblock的位置)到一個叫superblock的檔案
這裡我們用到了dd這個工具,它在對磁盤進行這樣讀寫操作時非常有用,具體請見man。
bs=1k 每次讀寫的塊大小
skip=1 偏移多少塊開始讀(這裡塊為bs=1k,偏移1,表示從1k開始讀)
count=1 讀的大小(這裡表示讀1k)
if,of 分别表示從哪裡讀和寫到哪裡去。
這裡你也許會問為什麼要從1k處開始讀,并且就讀1k的大小呢?下圖就是一個分區的實體存儲結構:
從圖中我們可以看到第一個Block的第一個1k處是存儲的Boot Block,而superblock是從1k開始,大小為1k。
3. 檢視superblock檔案
用vim打開我們剛才從/dev/sda3複制出來的superblock檔案,由于是二進制檔案,我們在用vim打開之後要用:%!xxd轉換成16進制形式。
到這裡其實我們已經看到了在磁盤上superblock的形式了。下面我想驗證一個這個superblock的正确性。
首先,通過檢視/usr/include/linux/ext3_fs.h頭檔案中的struct ext3_super_block:
我們可以知道在superblock的頭上記錄着inodes的個數和block的個數,它們分别是32位。
那從superblock中可以看出:
inodes_count: 0000 3a04(注意:這裡是小數端) –> 043a0000 = 70909952
blocks_count: fdc4 3904 –> 0439c4fd = 70894845
那麼該如何驗證這個結果呢?linux為我們提供了dumpe2fs這個工具:
dumpe2fs /dev/sda3 |less
我們可以看到如下的輸出(一部分)
到這裡,有關如果看superblock的方法,這裡就全部都講完了,同樣我們可以用dd檢視磁盤上任意的部分。