[root@study ~]# dumpe2fs [-bh] 设备文件名
选项与参数:
-b :列出保留为坏轨的部分(一般用不到吧!?)
-h :仅列出 superblock 的数据,不会列出其他的区段内容!
范例:鸟哥的一块 1GB ext4 文件系统内容
[root@study ~]# blkid <==这个指令可以叫出目前系统有被格式化的设备
/dev/vda1: LABEL="myboot" UUID="ce4dbf1b-2b3d-4973-8234-73768e8fd659" TYPE="xfs"
/dev/vda2: LABEL="myroot" UUID="21ad8b9a-aaad-443c-b732-4e2522e95e23" TYPE="xfs"
/dev/vda3: UUID="12y99K-bv2A-y7RY-jhEW-rIWf-PcH5-SaiApN" TYPE="LVM2_member"
/dev/vda5: UUID="e20d65d9-20d4-472f-9f91-cdcfb30219d6" TYPE="ext4" <==看到 ext4 了!
[root@study ~]# dumpe2fs /dev/vda5
dumpe2fs 1.42.9 (28-Dec-2013)
Filesystem volume name: <none> # 文件系统的名称(不一定会有)
Last mounted on: <not available> # 上一次挂载的目录位置
Filesystem UUID: e20d65d9-20d4-472f-9f91-cdcfb30219d6
Filesystem magic number: 0xEF53 # 上方的 UUID 为 Linux 对设备的定义码
Filesystem revision #: 1 (dynamic) # 下方的 features 为文件系统的特征数据
Filesystem features: has_journal ext_attr resize_inode dir_index filetype extent 64bit
flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
Filesystem flags: signed_directory_hash
Default mount options: user_xattr acl # 缺省在挂载时会主动加上的挂载参数
Filesystem state: clean # 这块文件系统的状态为何,clean 是没问题
Errors behavior: Continue
Filesystem OS type: Linux
Inode count: 65536 # inode 的总数
Block count: 262144 # block 的总数
Reserved block count: 13107 # 保留的 block 总数
Free blocks: 249189 # 还有多少的 block 可用数量
Free inodes: 65525 # 还有多少的 inode 可用数量
First block: 0
Block size: 4096 # 单个 block 的容量大小
Fragment size: 4096
Group descriptor size: 64
....(中间省略)....
Inode size: 256 # inode 的容量大小!已经是 256 了喔!
....(中间省略)....
Journal inode: 8
Default directory hash: half_md4
Directory Hash Seed: 3c2568b4-1a7e-44cf-95a2-c8867fb19fbc
Journal backup: inode blocks
Journal features: (none)
Journal size: 32M # Journal 日志式数据的可供纪录总容量
Journal length: 8192
Journal sequence: 0x00000001
Journal start: 0
Group 0: (Blocks 0-32767) # 第一块 block group 位置
Checksum 0x13be, unused inodes 8181
Primary superblock at 0, Group descriptors at 1-1 # 主要 superblock 的所在喔!
Reserved GDT blocks at 2-128
Block bitmap at 129 (+129), Inode bitmap at 145 (+145)
Inode table at 161-672 (+161) # inode table 的所在喔!
28521 free blocks, 8181 free inodes, 2 directories, 8181 unused inodes
Free blocks: 142-144, 153-160, 4258-32767 # 底下两行说明剩余的容量有多少
Free inodes: 12-8192
Group 1: (Blocks 32768-65535) [INODE_UNINIT] # 后续为更多其他的 block group 喔!
....(底下省略)....
# 由于数据量非常的庞大,因此鸟哥将一些信息省略输出了!上表与你的屏幕会有点差异。
# 前半部在秀出 supberblock 的内容,包括标头名称(Label)以及inode/block的相关信息
# 后面则是每个 block group 的个别信息了!您可以看到各区段数据所在的号码!
# 也就是说,基本上所有的数据还是与 block 的号码有关就是了!很重要!
如上所示,利用 dumpe2fs 可以查找到非常多的信息,不过依内容主要可以区分为上半部是 superblock 内容,
下半部则是每个 block group 的信息了。从上面的表格中我们可以观察到鸟哥这个 /dev/vda5 规划的 block 为 4K,
第一个 block 号码为 0 号,且 block group 内的所有信息都以 block 的号码来表示的。
然后在 superblock 中还有谈到目前这个文件系统的可用 block 与 inode 数量喔!
至于 block group 的内容我们单纯看 Group0 信息好了。从上表中我们可以发现:
Group0 所占用的 block 号码由 0 到 32767 号,superblock 则在第 0 号的 block 区块内!
文件系统描述说明在第 1 号 block 中;
block bitmap 与 inode bitmap 则在 129 及 145 的 block 号码上。
至于 inode table 分布于 161-672 的 block 号码中!
由于 (1)一个 inode 占用 256 bytes ,(2)总共有 672 - 161 + 1(161本身) = 512 个 block 花在 inode table 上,
(3)每个 block 的大小为 4096 bytes(4K)。由这些数据可以算出 inode 的数量共有 512 * 4096 / 256 = 8192 个 inode 啦!
这个 Group0 目前可用的 block 有 28521 个,可用的 inode 有 8181 个;
剩余的 inode 号码为 12 号到 8192 号。
如果你对文件系统的详细信息还有更多想要了解的话,那么请参考本章最后一小节的介绍喔!
否则文件系统看到这里对于基础认知您应该是已经相当足够啦!底下则是要探讨一下,
那么这个文件系统概念与实际的目录树应用有啥关连啊?
7.1.4 与目录树的关系
由前一小节的介绍我们知道在 Linux 系统下,每个文件(不管是一般文件还是目录文件)都会占用一个 inode ,
且可依据文件内容的大小来分配多个 block 给该文件使用。而由第五章的权限说明中我们知道目录的内容在记录文件名,
一般文件才是实际记录数据内容的地方。那么目录与文件在文件系统当中是如何记录数据的呢?基本上可以这样说:
当我们在 Linux 下的文件系统创建一个目录时,文件系统会分配一个 inode
与至少一块 block 给该目录。其中,inode 记录该目录的相关权限与属性,并可记录分配到的那块 block 号码;
而 block 则是记录在这个目录下的文件名与该文件名占用的 inode 号码数据。也就是说目录所占用的 block 内容在记录如下的信息:
图7.1.5、记载于目录所属的 block 内的文件名与 inode 号码对应示意图
如果想要实际观察 root 家目录内的文件所占用的 inode 号码时,可以使用 ls -i 这个选项来处理:
[root@study ~]# ls -li
total 8
53735697 -rw-------. 1 root root 1816 May 4 17:57 anaconda-ks.cfg
53745858 -rw-r--r--. 1 root root 1864 May 4 18:01 initial-setup-ks.cfg
由于每个人所使用的电脑并不相同,系统安装时选择的项目与 partition 都不一样,因此你的环境不可能与我的 inode
号码一模一样!上表的左边所列出的 inode 仅是鸟哥的系统所显示的结果而已!而由这个目录的 block 结果我们现在就能够知道,
当你使用『 ll / 』时,出现的目录几乎都是 1024 的倍数,为什么呢?因为每个 block 的数量都是 1K, 2K, 4K 嘛!
看一下鸟哥的环境:
[root@study ~]# ll -d / /boot /usr/sbin /proc /sys
dr-xr-xr-x. 17 root root 4096 May 4 17:56 / <== 1 个 4K block
dr-xr-xr-x. 4 root root 4096 May 4 17:59 /boot <== 1 个 4K block
dr-xr-xr-x. 155 root root 0 Jun 15 15:43 /proc <== 这两个为内存内数据,不占磁盘容量
dr-xr-xr-x. 13 root root 0 Jun 15 23:43 /sys
dr-xr-xr-x. 2 root root 16384 May 4 17:55 /usr/sbin <== 4 个 4K block
由于鸟哥的根目录使用的 block 大小为 4K ,因此每个目录几乎都是 4K 的倍数。
其中由于 /usr/sbin 的内容比较复杂因此占用了 4 个 block !至于奇怪的 /proc
我们在第五章就讲过该目录不占磁盘容量,
所以当然耗用的 block 就是 0 啰!
|
|
|