[TOC]
1. 文件系统的组成部分
1.1. block块理解
硬盘的读写IO一次是一个扇区512
字节, 如果要读写大量文件,以扇区
为单位肯定很慢很消耗性能,所以Linux中通过文件系统控制使用"块"
为读写单元
比如需要读一个或多个块时,文件系统的IO管理器
通知磁盘控制器要读取哪些块
的数据,硬盘控制器将这些块按扇区
读取出来,再通过硬盘控制器将这些扇区数据重组返回给计算机
- block的出现使得在文件系统层面上读写性能大大提高,也大量减少了碎片
- 可能造成空间浪费
在当下硬盘容量廉价且追求性能的时代,使用block是一定的。
1.2. inode
假如block大小为1KB,仅仅存储一个10M
的文件就需要10240个block,而且这些blocks很可能在位置上是不连续
在一起的(不相邻)
读取该文件时难道要从前向后扫描整个文件系统的块,然后找出属于该文件的块吗?
???
每个文件都有属性(如权限、大小、时间戳等),这些属性类的元数据存储在哪里呢?难道也和文件的数据部分存储在块中吗?
如果一个文件占用多个block那是不是每个属于该文件的block都要存储一份文件元数据?
如果不在每个block中存储元数据文件系统又怎么知道某一个block是不是属于该文件呢?
解决方法是使用索引,通过扫描索引找到对应的数据,而且索引可以存储部分数据
在文件系统上索引技术具体化为索引节点(index node
),在索引节点上存储的部分数据即为文件的属性元数据及其他少量信息.
索引节点称为inode。在inode中存储了inode号、文件类型、权限、文件所有者、大小、时间戳等元数据信息,最重要的是还存储了指向属于该文件block的指针
- 可以用stat命令,查看某个文件的inode信息:
1
2
3
4
5
6
7
8
9$ stat ~/.bashrc
File: ‘/home/local/SPREADTRUM/liguang.zhang/.bashrc’
Size: 7829 Blocks: 16 IO Block: 4096 regular file
Device: 821h/2081d Inode: 39059515 Links: 1
Access: (0644/-rw-r--r--) Uid: (1488486870/SPREADTRUM\liguang.zhang) Gid: (1488454145/SPREADTRUM\domain^users)
Access: 2019-03-18 09:52:16.796663821 +0800
Modify: 2019-02-22 10:10:58.044537613 +0800
Change: 2019-02-22 10:10:58.044537613 +0800
Birth: - - 查看每个inode节点的大小,可以用如下命令:打印文件的inode number
1
2
3$ sudo dumpe2fs /dev/sda1 | grep "Inode size"
dumpe2fs 1.42.9 (4-Feb-2014)
Inode size: 256
ls命令用于列出文件/文件夹的信息。参数 -i 说明需要显示每个文件的inode number。我们可以结合参数 -l 一起使用以列出详细信息:显示文件系统inode的使用信息1
2
3
4$ ls -li
total 16
43650565 drwxr-xr-x 108 SPREADTRUM\liguang.zhang SPREADTRUM\domain^users 12288 Mar 15 10:10 extensions
43783364 drwxr-xr-x 2 SPREADTRUM\liguang.zhang SPREADTRUM\domain^users 4096 May 17 2018 projects
df命令汇总可用和已用的磁盘空间。你可以通过传递 -i 或 –inodes 选项来接收有关可用和已使用的inode报告。列出文件系统超级块的信息1
2
3
4
5
6
7
8
9
10
11
12
13$ df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
udev 2040313 563 2039750 1% /dev
tmpfs 2043070 647 2042423 1% /run
/dev/sda1 3055616 909414 2146202 30% /
none 2043070 2 2043068 1% /sys/fs/cgroup
none 2043070 5 2043065 1% /run/lock
none 2043070 119 2042951 1% /run/shm
none 2043070 38 2043032 1% /run/user
/dev/sda3 25526272 276893 25249379 2% /home
/dev/sdb3 56901632 6017447 50884185 11% /home/newdisk
/dev/sdc1 244195328 7604192 236591136 4% /home/newdisk1
//tjnas1/data_exchange_tunnel/From_Shanghai/PLD_APPS/liguang.zhang 0 0 0 - /home/newdisk1/liguang.zhang/smb_dir/datasync
tune2fs -l 命令来显示所有与inode相关的信息1
2
3
4
5
6
7$ sudo tune2fs -l /dev/sda1 | grep inode
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
Free inodes: 2146270
First inode: 11
Journal inode: 8
First orphan inode: 131185
Journal backup: inode blocks