Linux的文件存储笔记
1. 文件存储单位
sector 扇区
block 块
扇区:常见的1个扇区512个字节,由8个扇区组成1个块。
块: Linux下文件存取的最小存储单位,常见的大小4kb,连续8个扇区组成1个块。
一个文件由1~N个块组成,即使写入1个字符,也会申请N个块(这由系统设定,通常一个文件系统会默认分配8个块,也就是32kb),如下我们在Linux系统中创建一个 test.txt 的文件,并写入1个字符。
[root@SZY-Computer suozhiyuan]# touch test.txt [root@SZY-Computer suozhiyuan]# echo "1" > test.txt [root@SZY-Computer suozhiyuan]# ll total 4 -rw-r--r-- 1 root root 2 Jun 4 15:23 test.txt [root@SZY-Computer suozhiyuan]# stat test.txt File: test.txt Size: 2 Blocks: 8 IO Block: 4096 regular file Device: fd01h/64769d Inode: 83993937 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2021-06-04 15:23:28.457249377 +0800 Modify: 2021-06-04 15:23:15.868778733 +0800 Change: 2021-06-04 15:23:15.868778733 +0800 Birth: -
如上,新创建了一个文件 test.txt ,并且写入了一个数字 “1”,通过 stat 命令查看文件信息。
Size: 2 为文件包含字符,包括一个结束符
Blocks: 8 为系统给文件分配块的数量,8个块一共32kb,也就是往文件中写入内容超过32kb时才会分配新内存
IO Block: 4096 为每个块占用字节数
2. 文件的结构
Ext* 格式化分区: 操作系统自动将硬盘分成三个区域。
1. 目录项区: 存放目录下文件的列表信息
2. 数据区: 存放文件数据
3. inode区(inode table):存放 inode 所包含的信息
比如这段信息
[root@SZY-Computer suozhiyuan]# touch test.txt [root@SZY-Computer suozhiyuan]# echo "1" > test.txt [root@SZY-Computer suozhiyuan]# ll total 4 -rw-r--r-- 1 root root 2 Jun 4 15:23 test.txt [root@SZY-Computer suozhiyuan]# stat test.txt File: test.txt Size: 2 Blocks: 8 IO Block: 4096 regular file Device: fd01h/64769d Inode: 83993937 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2021-06-04 15:23:28.457249377 +0800 Modify: 2021-06-04 15:23:15.868778733 +0800 Change: 2021-06-04 15:23:15.868778733 +0800 Birth: -
其中
Inode: 83993937 为文件的 Inode 信息
还可以通过 ls -i 或 ls -li 来查看目录下所有文件的信息,如下:
[root@SZY-Computer suozhiyuan]# touch test1.txt [root@SZY-Computer suozhiyuan]# echo "1" > test1.txt [root@SZY-Computer suozhiyuan]# ls -i 83993938 test1.txt 83993937 test.txt [root@SZY-Computer suozhiyuan]# ls -li total 8 83993938 -rw-r--r-- 1 root root 2 Jun 4 17:48 test1.txt 83993937 -rw-r--r-- 1 root root 4 Jun 4 16:11 test.txt
inode 索引节点:储存文件的元信息,比如文件的创建者、文件的创建日期,文件的大小等等。每个 inode 都有一个号码,操作系统用 inode 号码来识别不同的文件。
inode 节点大小:一版是128字节或256字节。inode 节点的总数,格式化时就已经给定,一般是每1kb或每2kb就设置1个 inode,这个是可以根据实际使用需求自己设定。通常默认情况下一块1GB的硬盘中,每1kb就设置1个 inode,那么 inode table 的大小就会达到128MB,占整个硬盘的12.8%。
3. 系统读取文件步骤
3.1 先逐级遍历目录,查找文件,取得 Inode number
3.2 根据 Inode number查询 Inode table 取得 Inode 信息
3.3 根据 Inode 信息确定文件存储的位置