1. 文件系统特性(索引式文件系统)
文件系统格式化后block group的组成部分:
super block:记录文件系统整体信息,inode和data block的总量,使用量,剩余量,以及文件系统格式与相关信息,一般大小为1024bytes.
inode table:记录文件的权限与属性,一个文件占用一个inode,同时记录此文件的数据所在的block号码,每个inode默认固定大小为128bytes。
data block:记录文件的实际内容,若文件太大,会占用多个block,ext2文件系统所支持的block大小有1k,2k,4k三种
filesystem description:描述了每个block group的开始于结束的block号码
block bitmap:记录了使用的和未使用的block号
inode bitmap:记录了使用的和未使用的inode号
【N】文件系统格式化的过程会中就已经把inode与block规划好了,以便操作系统识别使用,除非重新格式化,或者resize2f更新文件系统
[root@Darren ~]# dumpe2fs /dev/sda3
dumpe2fs 1.41.12 (17-May-2010)
Filesystem volume name: <none>
Last mounted on: /
Filesystem UUID: 7b6aa9b8-aa0d-4497-ac09-d423c035d50a
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: user_xattr acl
Filesystem state: clean
Errors behavior: Continue
Filesystem OS type: Linux
Inode count: 479552 --inode总数
Block count: 1914624 --block总数
Reserved block count: 95731
Free blocks: 968312 --剩余block
Free inodes: 365275 --剩余inode
First block: 0
Block size: 4096 --每个block大小
Fragment size: 4096
Reserved GDT blocks: 467
Blocks per group: 32768
Fragments per group: 32768
Inodes per group: 8128
Inode blocks per group: 508
Flex block group size: 16
Filesystem created: Wed Aug 3 23:22:08 2016
Last mount time: Thu Nov 10 15:49:44 2016
Last write time: Wed Aug 3 23:31:03 2016
Mount count: 32
Maximum mount count: -1
Last checked: Wed Aug 3 23:22:08 2016
Check interval: 0 (<none>)
Lifetime writes: 9 GB
Reserved blocks uid: 0 (user root)
Reserved blocks gid: 0 (group root)
First inode: 11
Inode size: 256 --每个inode的大小
Required extra isize: 28
Desired extra isize: 28
Journal inode: 8
Default directory hash: half_md4
Directory Hash Seed: 0d3fdc26-38ed-4b93-8a85-ec305215a827
Journal backup: inode blocks
Journal features: journal_incompat_revoke
Journal size: 128M
Journal length: 32768
Journal sequence: 0x00008bac
Journal start: 1
Group 0: (Blocks 0-32767) [ITABLE_ZEROED]
Checksum 0x5873, unused inodes 0
Primary superblock at 0, Group descriptors at 1-1
Reserved GDT blocks at 2-468
Block bitmap at 469 (+469), Inode bitmap at 485 (+485)
Inode table at 501-1008 (+501)
21078 free blocks, 0 free inodes, 1315 directories
Free blocks: 11080-11099, 11144-11199, 11227, 11764-11829, 11831-11883, 11886-32767
Free inodes:
2.与目录树的关系
目录:
linux下ext2文件系统新建一个目录会分配一个inode和至少一个block,inode记录该目录相关的属性和权限,还有分配到那block号码,而block则是记录该目录下文件名与该文件名占用的inode号
文件:
linux下ext2文件系统新建一个文件会分配一个inode和相对该文件大小的block数量的文件。
目录树读取:
系统通过挂载的inode号(文件系统最顶层的inode号由2开始),找到inode的内容,根据inode内容读取目录的block内的文件名和数据,再一层层找到文件数据。
[root@Darren ~]# ls -lid / /etc /etc/passwd
2 dr-xr-xr-x. 22 root root 4096 11月 10 15:49 /
130052 drwxr-xr-x 98 root root 12288 11月 10 17:39 /etc
137728 -rw-r--r-- 1 root root 1532 11月 10 16:27 /etc/passwd
3.日志文件系统
日志文件系统就是一种具有故障恢复能力的文件系统,所谓日志就是一种特殊的文件,它会在一个循环的缓冲区内记录文件系统的修改,然后将其定期提交到文件系统。一旦系统发生崩溃,日志文件就会起到一个检查点的作用,用于恢复未保存的信息,防止损坏文件系统元数据。
ext2不支持日志文件系统,从ext3开始支持。
把ext3升级到ext4:
(1)卸载umount
(2)[root@Darren ~]# tune2fs -O extents,uninit_bg,dir_index /dev/sdb1
(3)[root@Darren ~]# e2fsck /dev/sdb1
4.其他linux支持的文件系统
linux支持哪些文件系统:
[root@Darren ~]# ls -l /lib/modules/$(uname -r)/kernel/fs
系统已经加载到内核中的文件系统:
[root@Darren ~]# cat /proc/filesystems
5.连接文件:ln
硬连接:通过文件系统的inode连接产生新文件名,而不是产生新文件,连接文件和源文件的inode一样,不占用inode和block。
限制:
不能跨分区建立硬连接;
不能连接目录;
软连接:相当于windows的快捷方式,是一个独立的新的文件,指向源文件,连接文件和源文件的inode不同,占用inode和block。
例:
[root@Darren tmp]# touch file1.txt
[root@Darren tmp]# ln file1.txt file2.txt --创建硬链接
[root@Darren tmp]# ln -s file1.txt file3.txt --创建软链接
[root@Darren tmp]# ls -il
3508 -rw-r--r-- 2 root root 0 Nov 8 01:08 file1.txt
3508 -rw-r--r-- 2 root root 0 Nov 8 01:08 file2.txt
3514 lrwxrwxrwx 1 root root 9 Nov 8 01:13 file3.txt -> file1.txt
硬连接文件file2.txt与原文件file1.txt 的inode节点相同,然而符号连接文件的inode节点不同。
[root@Darren tmp]# echo 'This is test' >> file1.txt
[root@Darren tmp]# cat file1.txt
This is test
[root@Darren tmp]# cat file2.txt
This is test
[root@Darren tmp]# cat file3.txt
This is test
[root@Darren tmp]# rm file1.txt --删除file1.txt
[root@Darren tmp]# ls -li
3508 -rw-r--r-- 1 root root 13 Nov 8 01:20 file2.txt
3514 lrwxrwxrwx 1 root root 9 Nov 8 01:13 file3.txt -> file1.txt
[root@Darren tmp]# cat file2.txt --硬链接无影响
This is test
[root@Darren tmp]# cat file3.txt --软链接失效
cat: file3.txt: No such file or directory
总结:
(1)删除符号连接f3,对f1,f2无影响;
(2)删除硬连接f2,对f1,f3也无影响;
(3)删除原文件f1,对硬连接f2没有影响,导致符号连接f3失效;
(4)同时删除原文件f1,硬连接f2,整个文件会真正的被删除。
[root@Darren tmp]# mkdir -p dir1
[root@Darren tmp]# ln dir1/ dir2/
ln: target `dir2/' is not a directory: No such file or directory
[root@Darren tmp]# ln dir1/ dir2 --目录是不能做硬链接的
ln: `dir1/': hard link not allowed for directory
[root@Darren tmp]# ln -s dir1/ /tmp/dir2 --创建目录的软链接
[root@Darren tmp]# ls -li
total 20
3514 drwxr-xr-x 2 root root 4096 Nov 8 01:41 dir1
3617 lrwxrwxrwx 1 root root 5 Nov 8 01:55 dir2 -> dir1/