天天看點

[OS][FS]檢視ext3檔案系統分區的superblock

本文将介紹怎樣讀取一個分區的superblock:

1. 首先我們檢視一下在磁盤上有哪些分區,通過fdisk -l

[OS][FS]檢視ext3檔案系統分區的superblock

這裡有三個分區,我們下面檢視/dev/sda3(這是一個device file)

2. 從/dev/sda3拷貝1024B-2048B(這就是superblock的位置)到一個叫superblock的檔案

[OS][FS]檢視ext3檔案系統分區的superblock

這裡我們用到了dd這個工具,它在對磁盤進行這樣讀寫操作時非常有用,具體請見man。

bs=1k 每次讀寫的塊大小

skip=1 偏移多少塊開始讀(這裡塊為bs=1k,偏移1,表示從1k開始讀)

count=1 讀的大小(這裡表示讀1k)

if,of 分别表示從哪裡讀和寫到哪裡去。

這裡你也許會問為什麼要從1k處開始讀,并且就讀1k的大小呢?下圖就是一個分區的實體存儲結構:

[OS][FS]檢視ext3檔案系統分區的superblock

從圖中我們可以看到第一個Block的第一個1k處是存儲的Boot Block,而superblock是從1k開始,大小為1k。

3. 檢視superblock檔案

用vim打開我們剛才從/dev/sda3複制出來的superblock檔案,由于是二進制檔案,我們在用vim打開之後要用:%!xxd轉換成16進制形式。

[OS][FS]檢視ext3檔案系統分區的superblock

到這裡其實我們已經看到了在磁盤上superblock的形式了。下面我想驗證一個這個superblock的正确性。

首先,通過檢視/usr/include/linux/ext3_fs.h頭檔案中的struct ext3_super_block:

[OS][FS]檢視ext3檔案系統分區的superblock

我們可以知道在superblock的頭上記錄着inodes的個數和block的個數,它們分别是32位。

那從superblock中可以看出:

inodes_count: 0000 3a04(注意:這裡是小數端) –> 043a0000 = 70909952

blocks_count: fdc4 3904 –> 0439c4fd = 70894845

那麼該如何驗證這個結果呢?linux為我們提供了dumpe2fs這個工具:

dumpe2fs /dev/sda3 |less      
我們可以看到如下的輸出(一部分)      
[OS][FS]檢視ext3檔案系統分區的superblock

到這裡,有關如果看superblock的方法,這裡就全部都講完了,同樣我們可以用dd檢視磁盤上任意的部分。

繼續閱讀