Fork me on GitHub

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 信息确定文件存储的位置

  

 

 

 


  

 

posted @ 2021-06-04 17:16  索智源  阅读(175)  评论(0编辑  收藏  举报