分区里的inode号是0号和1号的block

分区里的inode号是0号和1号的block

我相信大家在使用Linux的时候都遇到过误删文件系统数据的情况,不管是自己误删还是帮人家恢复误删

现在用的比较多的恢复工具大概是ext3grep 、extundelete 这两个

当然本文不是要说这两个工具的使用方法,而是介绍每个分区里的inode号为0或1号的block到底是什么

在使用ext3grep 、extundelete 的时候,基本上都会有这样一个步骤

在Linux下可以通过“ls-id”命令来查看某分区目录的inode值,可以输入:

[[email protected] /]#ls –id /
2 /
[[email protected] ~]# 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 外面的。

[[email protected] ~]# 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 号!

[[email protected] ~]# 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

时间: 2024-09-29 08:55:32

分区里的inode号是0号和1号的block的相关文章

内核怎么通过主设备号找驱动、次设备号找设备

之前看韦东山老师视频,说到linux驱动就知道主设备号找驱动,次设备号找设备.这句到底怎么理解呢,如何在驱动中实现呢,在介绍该实现之前先看下内核中主次设备号的管理.在内核中,dev_t  类型( 在 <linux/types.h>头文件有定义 ) 用来表示设备号,包括主设备号和次设备号两部分.对于 2.6.x内核,dev_t是个32位量,其中高12位用来表示主设备号,低20位用来表示次设备号. <span style="font-family:Times New Roman;f

旌旗灯号量:整型、记载型旌旗灯号量以及应用旌旗灯号量完成过程互斥和前驱关系

旌旗灯号量机构是一种功用较强的机制,可用来处理互斥与同步的成绩,它只能被两个规范的原语wait(S)和signal(S)来拜访,也可以记为"P操作"和"V操作".原语是指完成某种功用且不被联系不被中缀履行的操作序列,平日可由硬件来完成完成不被联系履行特征的功用.如前述的"Test-and-Set"和"Swap"指令,就是由硬件完成的原子操作.原语功用的不被中缀履行特征在单处置机时可由软件经过屏障中缀办法完成.原语之所以不克不及

10号刘卫浩和34号段胜小组作业

10号刘卫浩和34号段胜小组作业

js中 单引号 双引号 参数问题 单引号 替换成 \&#39; 双引号 替换成 \&quot; 等

.replace(/\'/g, "\\'")    ->  ' 替换成  \' .replace(/\"/g, "\\\"")  ->  " 替换成\" 注:适用于 onclick='Test("数字双音\"")'  这种写法 .replace(/\"/g, """)  ->" 替换成 " 注:适用于onclick=&q

VC6.0如何显示行号?

1:在网上下载一个显示行号的插件VC6LineNumberAddin.dll: http://download.csdn.net/download/x_zerger/1318086 2:将VC6LineNumberAddin.dll文件放在VC6.0安装路径,例如:C:\Program Files\Microsoft Visual Studio\Common\MSDev98\AddIns: 3:下载的压缩文件中有一个注册表,点击VC6LineNumberAddin.reg进行注册,点击后会出现一

[转]Wing IDE 6.0 安装及算号器注册机代码

下载安装wing 选择第三个,运行算号器,输入license id 输入request id. Python 2 算号器注册机代码 import string import random import sha BASE16 = '0123456789ABCDEF' BASE30 = '123456789ABCDEFGHJKLMNPQRTVWXY' def randomstring(size=20, chars=string.ascii_uppercase + string.digits): re

Microsoft Visual C++ 6.0中如何添加行号

VC6.0是一款比较稳定的功能强大的IDE,目前也有很多人在使用.但美中不足的是它不能像其他IDE那样显示行号. 这里需要用到一个插件VC6LineNumberAddin,下载地址:http://files.cnblogs.com/emanlee/VC6LineNumberAddin.rar(这是EmamLee上传的,感谢). 使用步骤: 1.将文件中的VC6LineNumberAddin.dll拷贝到目录C:\Program Files\Microsoft Visual Studio\Comm

微信公众号开发(5)---使用开源组件开发公众号OAuth2.0网页授权授权登录

搞清微信公众号授权登录的步骤步骤,我们的开发就完成了一大步 献上github 地址: https://github.com/Wechat-Group/weixin-java-tools/wiki/MP_OAuth2%E7%BD%91%E9%A1%B5%E6%8E%88%E6%9D%83 第一步:需要在微信后台配置:注意,只填写自己的域名 2.配置完毕后,构建网页授权url,配置重定向地址 3.当用户同意授权后,会回调所设置的url并把authorization code传过来 4, 拿到这个co

关于Android 5.0 网络图标叹号的解决办法

那么下面就给出解决方法(无需root): 1.完全屏蔽网络检查功能,最简单快速,但是就没有办法提示wifi登录: adb shell "settings put global captive_portal_detection_enabled 0" 2.用国内的服务器替换掉google的服务器: adb shell "settings put global captive_portal_server xn--yet824cpd.xn--fiqs8s" 这个服务器是我自