Linux笔记——删除原理以及inode、block、superblock

一、Linux文件系统

磁盘的组成

磁盘设备可包括一个或多个物理盘片,每个盘片分一个或两个存储面(见图a),每个盘片上有若干个磁道,磁道之间有必要的间隙。每条磁道又被从逻辑上划分成若干个扇区,软盘大约有8至32个扇区,硬盘则多达数百个,图b显示了一个磁道分成8个扇区的布局情况。一个扇区称为一个盘块(或数据块),各扇区之间保留一定的间隙。
在这里插入图片描述

文件存储在硬盘上,硬盘的最小存储单位叫做扇区sector,每个扇区存储512个字节,操作系统在读取硬盘数据时,并不是一个一个扇区去读取,而是按照多个扇区,也就是一次性读取一块数据,这种由扇区组成的块(block)是文件存取最小单位,最常见的块大小为4KB,即8个连续的sector组成一个block。

文件的数据都存在块上,我们知道一个文件除了存储的数据以外还有一部分数据,我们称为元数据,如文件创建
日期,大小等等,这种存放元数据的区域我们称为inode。

block、inode、superblock

  • block:实际记录文件的内容,若文件太大时,会占用多个区块。
  • inode:记录文件的属性,一个文件占用一个inode,同时记录此文件的数据所在的区块号码。
  • superblock:记录文件系统的整体信息,包括inode与block的总量、使用量、剩余量,以及文件系统的格式与相关信息等。

inode中包含文件的元数据,可以通过stat命令查看文件的元数据

[root@localhost ~]# stat file3
  文件:"file3"
  大小:21         块:8          IO 块:4096   普通文件
设备:fd00h/64768d Inode:817643      硬链接:1
权限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
环境:unconfined_u:object_r:admin_home_t:s0
最近访问:2020-07-20 11:54:42.601694824 +0800
最近更改:2020-07-20 11:54:30.550645950 +0800
最近改动:2020-07-20 11:54:30.550645950 +0800
创建时间:-

inode也会消耗磁盘空间,在磁盘格式化时,操作系统会自动将磁盘分为两个区域,一个数据区,一个inode区,存放inode所包含的信息,整个磁盘的可以使用容量由inode和磁盘空间共同决定,当inode消耗完之后,磁盘空间还有剩余也无法存储数据。

读取文件流程:(以/etc/fstab文件为例)
在这里插入图片描述

挂载点的意义

每个文件系统都有独立的inode、区块、超级区块等信息,这个文件系统要能够链接到目录树才能被我们使用。将文件系统与目录树结合的操作称为挂载
挂载点一定是目录,该目录为进入该文件系统的入口。因此并不是你有任何文件系统都能使用,必须要挂载到目录树的某个目录后,才能够使用该文件系统。

二、删除原理

rm命令

参数作用
-f强制删除,忽略不存在的文件,从不给出提示
-i交互式删除,删除时给出提示
-r递归删除目录下面文件以及子目录的文件
-R同r
-v显示运行时详细信息

软链接与硬链接

硬链接

[root@localhost ~]# ln /tmp/hello ./hellol
  • 具有相同Inode节点号的多个文件是互为硬链接文件。
    在这里插入图片描述

  • 删除硬链接文件或者删除源文件任意之一,文件实体并未被删除。 因为你将任何一个文件名删除,其实inode与区块都还是存在的。只要inode有链接,就不会被清理掉,因此更安全。

  • 只有删除了源文件及所有对应的硬链接文件,文件实体才会被删除。

  • 当所有硬链接文件及源文件被删除后,再存放新的数据会占用这个文件的空间,或者磁盘fsck检查的时候,删除的数据也会被系统回收。

  • 硬链接文件就是文件的另一个入口。

  • 可以通过给文件设置硬链接文件,来防止重要文件被误删。

  • 硬链接文件可以用rm命令删除。

  • 对于静态文件(没有进程正在调用的文件)来说,当对应硬链接数位0(i_link),文件就被删除。i_link的查看方法(ls -
    l结构的第三列就是)

软链接:

[root@localhost ~]# ln -s /tmp/hello ./hellor
  • 软链接类似windows的快捷方式(可以通过readlink查看其指向)。

  • 软链接类似一个文本文件,里面存放的是源文件的路径,指向源文件实体。
    在这里插入图片描述

  • 删除源文件,软链接文件依然存放,但是无法访问指向的源文件路径内容了。

  • 失效的时候一般是红字白底闪烁提示。

  • 软链接和源文件是不同类型的文件,也是不同的文件。inode号也不相同。

  • 删除软链接文件可以用rm命令。

当源文件为一个目录时,链接文件也会是目录;当源文件为文件时,链接文件也会是文件。

目录链接:

  • 对于目录,不可以创建硬链接,但可以创建软链接
[root@localhost ~]# ln /tmp/file1 ./file1
ln: "/tmp/file1": 不允许将硬链接指向目录

我是这样理解的,假设可以创建硬链接:
每当创建一个目录,会有两个目录随即被创建:

[root@localhost ~]# mkdir file1
[root@localhost ~]# ls -a file1
.  ..
#.指向当前目录,..指向父目录

file1的父目录是家目录,那么问题来了:。与。。互为硬链接的话,“。。”应该指向file1目录还是~目录?

  • 目录的硬链接不能跨越文件系统
  • 每个目录下面都有一个硬链接“.”号,和对应上级目录的硬链接“…”。
  • 在父目录里面创建一个子目录,父目录的链接数增加1(子目录里都有…来指向父目录)。但是在父目录里创建文件,父目录的链接数不会增加。

删除原理

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

i_count的意义是当前文件使用者(或被调用)的数量,i_nlink 的意义是介质连接的数量(硬链接的数量);可以
理解为i_count是内存引用计数器,i_nlink是磁盘的引用计数器。

当一个文件被某一个进程引用时,对应i_count数就会增加;当创建文件的硬链接的时候,对应i_nlink数就会增
加。

对于删除命令rm而言,实际就是减少磁盘引用计数i_nlink。
这里就会有一个问题,如果一个文件正在被某个进程调用,而用户却执行rm操作把文件删除了,那么会出现什么结果呢
当用户执行rm操作删除文件后,再执行ls或者其他文件管理命令,无法再找到这个文件了,但是调用这个删除的文件的进程却在继续正常执行,依然能够从文件中正确的读取及写入内容。这又是为什么呢?

这是因为rm操作只是将文件的i_nlink减少了,如果没其它的链接i_nlink就为0了;但由于该文件依然被进程引用,因此,此时文件对应的i_count并不为0,所以即使执行rm操作,但系统并没有真正删除这个文件,当只有i_nlink及i_count都为0的时候,这个文件才会真正被删除。也就是说,还需要解除该进程的对该文件的调用才行。
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值