分區里的inode號是0號和1號的block 我相信大家在使用Linux的時候都遇到過誤刪文件系統數據的情況,不管是自己誤刪還是幫人家恢復誤刪 現在用的比較多的恢復工具大概是ext3grep 、extundelete 這兩個 當然本文不是要說這兩個工具的使用方法,而是介紹每個分區里的inode號為0 ...
分區里的inode號是0號和1號的block
我相信大家在使用Linux的時候都遇到過誤刪文件系統數據的情況,不管是自己誤刪還是幫人家恢復誤刪
現在用的比較多的恢復工具大概是ext3grep 、extundelete 這兩個
當然本文不是要說這兩個工具的使用方法,而是介紹每個分區里的inode號為0或1號的block到底是什麼
在使用ext3grep 、extundelete 的時候,基本上都會有這樣一個步驟
在Linux下可以通過“ls-id”命令來查看某分區目錄的inode值,可以輸入:
[root@localhost /]#ls –id / 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.
以上內容針對於ext類文件系統,不對的地方歡迎拍磚
部分參考了鳥哥文章:http://vbird.dic.ksu.edu.tw/linux_basic/0230filesystem_6.php