close
文章出處

分區里的inode號是0號和1號的block

 

我相信大家在使用Linux的時候都遇到過誤刪文件系統數據的情況,不管是自己誤刪還是幫人家恢復誤刪

現在用的比較多的恢復工具大概是ext3grep 、extundelete 這兩個

當然本文不是要說這兩個工具的使用方法,而是介紹每個分區里的inode號為0或1號的block到底是什么

 

在使用ext3grep 、extundelete 的時候,基本上都會有這樣一個步驟

在Linux下可以通過“ls-id”命令來查看某分區目錄的inode值,可以輸入:

[root@localhost /]#lsid /
2 /
[root@steven ~]# ls -id /boot
2 /boot

 

可以看到,無論是哪個分區,它的inode值都是2,而不是0,也不是1

并且當你用find命令來搜索一下0或1號inode的時候也是什么也找不到

 find /  -inum 0
find: `/proc/1461/task/1461/fd/5': No such file or directory
find: `/proc/1461/task/1461/fdinfo/5': No such file or directory
find: `/proc/1461/fd/5': No such file or directory
find: `/proc/1461/fdinfo/5': No such file or directory

那么inode為0或1的block去哪里了?

 

 

boot sector 與 superblock 的關系

block 為 1024 bytes (1K) 時:

如果 block 大小剛好是 1024 的話,那么 boot sector 與 superblock 各會占用掉一個 block , 也表示boot sector 是獨立于 superblock 外面的。

[root@www ~]# dumpe2fs /dev/hdc1
dumpe2fs 1.39 (29-May-2006)
Filesystem volume name:   /boot
....(中間省略)....
First block:              1
Block size:               1024
....(中間省略)....

Group 0: (Blocks 1-8192)
  Primary superblock at 1, Group descriptors at 2-2
  Reserved GDT blocks at 3-258
  Block bitmap at 259 (+258), Inode bitmap at 260 (+259)
  Inode table at 261-511 (+260)
  511 free blocks, 1991 free inodes, 2 directories
  Free blocks: 5619-6129
  Free inodes: 18-2008

看到最后一個特殊字體的地方嗎? Group0 的 superblock 是由 1  號 block 開始的

上面結果可以發現 0 號 block 是保留下來留給 boot sector 用的

 

block 大于 1024 bytes (2K, 4K) 時:

如果 block 大于 1024 的話,那么 superblock 將會在 0 號!

[root@www ~]# dumpe2fs /dev/hdc2
dumpe2fs 1.39 (29-May-2006)
....(中間省略)....
Filesystem volume name: /1 
....(中間省略)....
Block size: 4096
....(中間省略)....

Group 0: (Blocks 0-32767) 
Primary superblock at 0, Group descriptors at 1-1
Reserved GDT blocks at 2-626
Block bitmap at 627 (+627), Inode bitmap at 628 (+628)
Inode table at 629-1641 (+629)
0 free blocks, 32405 free inodes, 2 directories
Free blocks:
Free inodes: 12-32416

可以發現 superblock 就在第一個 block (第 0 號) 上,但是 superblock 其實就只有 1024bytes 

為了怕浪費更多空間,因此第一個 block 內就含有 boot sector 與 superblock

上面結果顯示,因為每個 block 占有 4K ,但是 superblock 其實就只有 1024bytes

因此在第一個 block 內 superblock 僅占有 1024-2047 ( 由 0 號起算的話),而 0-1023 就保留給 boot sector 來使用。

而后面的2048bytes 的空間保留

 

 

現在也明白了為什麼df命令這麼快了吧,它是讀取每個分區inode為0的superblock里面的信息,

而superblock里面就保存了分區文件系統類型、大小、已使用大小、可用大小

 

 

 

 

我們可以使用tune2fs命令查看某一分區的塊大小等信息

tune2fs -l /dev/sdb1
tune2fs 1.41.12 (17-May-2010)
Filesystem volume name:   <none>
Last mounted on:          <not available>
Filesystem UUID:          4814e6f2-6550-4ac5-bf2d-33109fc53061
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 large_file huge_file uninit_bg dir_nlink extra_isize
Filesystem flags:         signed_directory_hash 
Default mount options:    (none)
Filesystem state:         clean
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              65280
Block count:              261048
Reserved block count:     13052
Free blocks:              252525
Free inodes:              65269
First block:              0
Block size:               4096
Fragment size:            4096
Reserved GDT blocks:      63
Blocks per group:         32768
Fragments per group:      32768
Inodes per group:         8160
Inode blocks per group:   510
Flex block group size:    16
Filesystem created:       Thu Jun  2 12:23:23 2016
Last mount time:          Thu Jun  2 12:24:06 2016
Last write time:          Thu Jun  2 12:24:06 2016
Mount count:              1
Maximum mount count:      20
Last checked:             Thu Jun  2 12:23:23 2016
Check interval:           15552000 (6 months)
Next check after:         Tue Nov 29 12:23:23 2016
Lifetime writes:          32 MB
Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)
First inode:              11
Inode size:              256
Required extra isize:     28
Desired extra isize:      28
Journal inode:            8
Default directory hash:   half_md4
Directory Hash Seed:      fad5ad24-52ef-482c-a54b-367a5bb4f122
Journal backup:           inode blocks

 

通過上面的信息就可以知道superblock是在block 0還是block 1

那么上面的信息又是從哪里讀取出來的

答案是:還是superblock

 

superblock如此重要,所以系統也對superblock做了一些保護措施

文件系統會有一些備用超級塊,備用超級塊一般創建于塊 8193、16384 或 32768

ext類文件系統會把block分成一組一組來管理簡稱為塊組,可以看到Blocks per group這一行,就是每個group都包含了32768個block

每個group都會有一個備用superblock,所以備用超級塊一般創建于塊 8193、16384 或 32768,根據格式化時的block size而定

tune2fs -l /dev/sda4 |grep group
Blocks per group: 32768
Fragments per group: 32768
Inodes per group: 8192
Inode blocks per group: 512
Flex block group size: 16
Reserved blocks gid: 0 (group root)

 

 

注意:非ext類文件系統是不能用tune2fs命令的,而且原理和內部格式跟ext類文件系統不相同!!

tune2fs -l /dev/sdb1
tune2fs 1.41.12 (17-May-2010)
tune2fs: Bad magic number in super-block while trying to open /dev/sdb1
Couldn't find valid filesystem superblock.

 

 

參考資料:http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=4250473&extra=page%3D1%26filter%3Dauthor%26orderby%3Ddateline%26orderby%3Ddateline

EXT4是Linux kernel 自 2.6.28 開始正式支持的新的文件系統,目前已經廣泛應用在新發行的LINUX版本中。移動終端方面的Android默認系統分區也已成為EXT4。隨著LINUX系統的不斷更新,相信EXT4將很快替代EXT3,成為下一代LINUX上的標準文件系統。
相比EXT3而言,EXT4最大的改動是文件系統的空間分配模式。默認情況下,EXT4不再使用EXT3的block mapping分配方式 ,而改為Extent方式分配。從專業的數據恢復理論看,基于block mapping的EXT3在數據刪除后就很難恢復,如果基于Extent,可參考的信息就更少,如何有效的恢復EXT4誤刪除的數據,是個公認的技術難題。
近日,我公司經過不斷地嘗試和改進,終于完成了對EXT4數據誤刪除恢復的技術攻關,形成了一套完整的技術解決方案,并成功開發出了基于EXT4的專業數據恢復系統。
下面為北亞數據恢復中心對EXT4誤刪除數據的恢復方案簡介。
1、關于EXT4的結構特征:
EXT4在總體結構上與EXT3相似,大的分配方向都是基于相同大小的塊組,每個塊組內分配固定數量的INODE,可能的超級塊(或備份),及可能的塊組描述表。
EXT4的INODE 結構做了重大改變,為增加新的信息,大小由EXT3的128字節增加到默認的256字節,同時塊索引不再使用EXT3的12直接塊+1個1次間接塊+1個2次間接塊+1個3次間接塊的索引模式,而改為4個Extent片斷流,每個片斷流設定片斷的起始塊號及連續的塊數量(有可能直接指向數據區,也有可能指向索引塊區)。
2、EXT4刪除數據的結構更改:
EXT4刪除數據后,會依次釋放文件系統bitmap空間位、更新目錄結構、釋放inode空間位。而INODE空間的釋放不像WINDOWS NTFS或FAT一樣保留數據的全部或部分索引,一個更徹底的操作是直接清除所有節點中的索引項。
清除了文件的存儲索引,意味著即使可以得到文件的名稱、日期等元信息,也無法直接知道文件原來存儲在什么位置,而基于Extent的存儲方式更緊湊,刪除之后,很難保證可以很容易還原原先的存儲索引。

 

塊組是block group
block group包含備用super block,inode,block group description

INODE 結構做了重大改變,為增加新的信息,大小由EXT3的128字節增加到默認的256字節
Inode size:              256 byte


EXT4刪除數據后,會依次釋放文件系統bitmap空間位
Block bitmap at 259 (+25, Inode bitmap at 260 (+259)

 

以上內容針對于ext類文件系統,不對的地方歡迎拍磚

部分參考了鳥哥文章:http://vbird.dic.ksu.edu.tw/linux_basic/0230filesystem_6.php


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 AutoPoster 的頭像
    AutoPoster

    互聯網 - 大數據

    AutoPoster 發表在 痞客邦 留言(0) 人氣()