linux系统中的inode,block,superblock及删除原理

    硬盘的最小存储单位是 扇区(sector),每个扇区可以存储512个字节。

    操作系统在读取硬盘中的数据时,并不是每次单一扇区进行读取,而是一次性读取多个扇区,即一次性读取一块数据,这种由多块扇区组成的块(block),是文件的最小存储单位,最常见的块大小为4KB,也就是8个扇区(sector)。

    硬盘除了存储的文件以外,还存储着和文件有关的数据信息,如:文件创建日期,大小,权限等信息,我们把除了原文件以外的这些和文件相关的信息称为元数据。

    Linux系统可以简单的分为inode table 和data area。其中inode table中存有inode,而每个inode记录着文件的元数据。

    元数据存储在inode table中。文件实际内容存储在data block区块中,而硬盘还有一个超级区块(superblock),超级区块会记录整个文件系统的整体信息,如:inode 和block的总量,使用量,剩余量等。

1. inode

硬盘中存储文件的元数据区域称为inode。一个文件有着与之对应的inode,记录着此文件所在的block号码。

inode也会占用磁盘空间。在磁盘格式化时,操作系统会自动将磁盘划分为两个区域,一个为数据区,一个为inode区。整个磁盘的总量由inode和磁盘空间共同决定,若是inode区域被使用完,则这个磁盘即使有剩余空间也无法再写入文件。

2. block

存储着文件的实际内容,block的大小可以自己设定。

若文件太大,则一个文件会占用多个block,文件读取效率会降低。

若文件很小,而block又大,则block剩下的空间将会被浪费,磁盘利用率会降低。

 

3. superblock

记录着文件的整体信息。包括inode和block的总量,使用量,剩余量等信息。

[root@root tmp]# touch file
[root@root tmp]# ls
file
[root@root tmp]# stat file
  File: "file" 
  Size: 0               Blocks: 0          IO Block: 4096    regular empty file
Device: 802h/2050d      Inode: 524313      Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2020-03-18 04:37:30.098703162 +0800
Modify: 2020-03-18 04:37:30.098703162 +0800
Change: 2020-03-18 04:37:30.098703162 +0800

如上:/tmp目录下创建一个空文件。然后通过stat “file” 来查看文件的信息。
其中:
File :文件名    Block:块       IO Block:系统一次性读取的数据大小(字节)  regular empty file 普通空文件  

Size:文件大小  Inode :节点号    Links :链接数
Access:访问权限   Uid :属主       GId:属组
Access:最近一次访问时间
Modify:最近一次修改时间
Change:最近一次改变时间。会随着Access和Modify改变而改变。  

4. 文件读取流程

若是要读取/tmp/file

首先先去访问/目录下的tmp的inode信息,找到tmp中存放的file文件的inode,从而找到磁盘中的file文件。

5. 文件删除原理

    硬链接:一个文件可以有多个有效的路径名,是文件的另一个入口,当一个文件有多个硬链接时,只有将所有的硬链接文件和源文件删除,才会彻底删除源文件

[root@root tmp]# touch file
[root@root tmp]# echo hello > file
[root@root tmp]# ls
file
[root@root tmp]# ln file file_hard
[root@root tmp]# ls
file  file_hard
[root@root tmp]# rm -f file
[root@root tmp]# ls
file_hard
[root@root tmp]# cat file_hard
hello

  软链接:软链接文件存放着源文件的路径。源文件删除时,软链接文件依然存在,但不能再访问源文件。

[root@root tmp]# touch file
[root@root tmp]# ls
file
[root@root tmp]# ln -s file file-sys
[root@root tmp]# ls
file  file-sys
[root@root tmp]# echo hello > file
[root@root tmp]# cat file-sys
hello
[root@root tmp]# rm -f file
[root@root tmp]# cat file-sys
cat: file-sys: 没有那个文件或目录

  Linux是通过控制link的数量来删除文件的。只有当一个文件不存在任何的link时,文件才会被删除,而一般来说,每个文件都有2个link计数器:i_count 和i_link 。

  i_count :当前文件被调用的次数(内存计数器)。

  i_link :当前文件硬链接的数量(磁盘引用计数器)。

  删除命令rm只能删除硬链接的数量,即i_link的数量,若当一个文件正在被调用时,rm命令删除了i_link,文件无法被找到,单调用此文件的进程仍然会正常运行,仍然能从此文件中读取内容甚至写入内容。当进程终止,即i_count为零,此文件的inode会被释放,磁盘空间下次再次利用时会直接覆盖。

------------------------------------------------------------------------------------------------------- 返回目录

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值