前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >软链接和硬链接

软链接和硬链接

作者头像
mindtechnist
发布2024-08-08 17:13:19
1270
发布2024-08-08 17:13:19
举报
文章被收录于专栏:机器和智能

1 文件系统的寻址过程——以cat命令是如何读出文件内容、文件的删除过程为例

在操作系统级别看存储空间的话,是分为很多的block块,这些block块是分为很多种类的

当我们使用cat命令查看文件的时候,比如 cat /1.txt ,那么首先会去寻找根目录/,Linux一切皆文件,目录也是文件,根据目录名找到inode编号,然后查看归属信息和权限,是否拥有cat权限,如果有的话再根据指针寻找指向的内容,/的inode block的指针应该是指向/目录的目录块directiry block。然后在/目录的directiry block块中搜索1.txt文件,如果有,找到它的inode号,然后根据1.txt的inode编号找到该文件的inode block,检测归属和权限,如果有权限,则根据指针寻找指针指向,该指针指向的就是文件1.txt的具体内容所在的数据块。这样就可以把文件内容读出来了。

如果我们要删除一个文件的时候,比如删除1.txt,首先在super block中,会把1.txt的inode编号标记为free(自由的),也就是可用的。然后再去该文件所在的目录块(比如/目录)中把a.txt和inode编号1111的映射关系删掉。最后一步,把1.txt的数据所在的数据块标记为free,也就是可用的,如果有其它数据要存储,那么这个block是可以分配的。但是,实际上,block里面的内容还没有被抹去,删除只是删除了寻址的方式和映射关系,真正的文件数据还是保存在block中的。

所以,删除的数据是可以恢复的,首先在super block中把inode1111重新标记为不可分配,然后在directory block中把1.txt和inode1111的映射关系重新建立起来,那么数据就恢复成功了。数据恢复就是一个重新建立关系,打通寻址路径的过程。

文件只有在被覆盖的时候,才算是真正的删除了,也就是有当其他数据正好存在1.txt数据所用的block中时,把原来1.txt文件的内容覆盖掉,这才算是真正的删除。所以说,没有真正的删除,我们没有办法直接把物理硬盘的数据抹去,只能通过删除映射关系,覆盖原数据的方式去删除。(我们看到的磁盘还有多少G空间都是一个逻辑的概念,实际上你的硬盘可能已经全是数据了,只不过有的空间不可用,它保存了你需要的数据,而那些被标记为free状态的block是可用的,即使它上面有数据也是你已经删除不需要的数据,当你保存新数据的时候就会分配一些被标记为free状态的block给你,你的新数据会覆盖掉原来的数据,这样新数据就被保存了。所以,一定要分清楚逻辑的可用空间概念和物理硬盘的概念)

综上,磁盘没有真正的删除操作,只能覆盖。而格式化的过程就是建立文件系统的过程,也就是把各种block块划分出来的过程。

如图,我们用ll命令查看到的信息就是存在18653这个inode block中的

所以,即便是建新文件,磁盘空间也会被占用(虽然没有实际数据,但是会有inode中的信息)

不管是新建还是删除文件,第一步都是找super block,分配编号或者把编号标记为free,第二步去目录中增加或删除映射关系,第三步给文件的inode块关联一个数据块或把关联的数据块标记free。

2 深入探析软链接和硬链接本质

软链接相当于Windows下的快捷方式,修改软链接文件,源文件内容也会改变,修改源文件内容,软链接文件内容随之改变。删除软链接不影响源文件,删除源文件软链接文件失效。

修改硬链接文件,源文件内容也会改变,修改源文件内容,硬链接文件内容随之改变。删除硬链接文件,源文件无影响;删除源文件,硬链接文件无影响。

那么软链接和硬链接这些特性是怎么来的呢?首先我们知道,文件存储分为两部分,一部分是inode block,另一部分是数据block。

软链接是指向文件名的

硬链接是指向inode的

一个分区就是一个文件系统,软链接可以跨分区而硬链接不可以跨分区。

这是因为不同分区可以有相同的文件名,但是inode唯一标识一块block。硬链接是指向inode编号的,假如说我现在有一个1.txt的inode编号为12345,该文件在磁盘分区1上面。我现在在磁盘分区2中创建一个指向inode12345的硬链接文件,这两个12345inode编号指向的是自己分区的block块,这两个block根本就不是同一块磁盘空间。

在操作系统级别,维护的都是inode编号,也就是说操作系统不认文件名,只认inode编号。我们知道,在文件系统中,inode block中有一个指针,软链接的指针就是指向源文件的文件名的。

实际上,在每个目录中都有两个隐藏文件,.是当前目录的硬链接,..是上一级目录的硬链接。

3 磁盘满的两种情况

文件在保存到磁盘(硬盘)的时候,除了保存文件的内容,还包括时间信息、权限信息、文件归属信息、文件名等等。这些文件信息都是存在i节点中的。我们知道,存储空间在硬盘级别是一个一个的扇区,而在操作系统级别是一个一个的block块,这些block数据块分为两种,一种是数据block块,另一种是inode bloak,而这些inode block就是专门存放文件信息的存储空间。文件的具体内容存放在数据block块中。查看inode相关信息的命令如下

代码语言:javascript
复制
ls -i /etc/password #可以查看inode编号(-di 可以查看目录的inode编号)
df -i #查看每个磁盘分区的inode信息

通过上面介绍,我们知道文件的存储是由两部分数据组成的,一个是文件内本身的数据,也就是文件内容,另一部分就是存放在inode中的文件信息。实际上,即便是你创建一个空文件,它也是占据磁盘空间的,空文件没有数据,不会占用数据block的空间,但是只要是文件就会有属性、权限等等信息,所以它会占据inode block的空间。因此,磁盘满是分为两种情况的,一种是数据太多,比如文件内容有几百G,数据block的磁盘空间就满了;第二种情况是创建的文件太多,把inode block占满了,或者说inode编号不够用了,这种情况虽然还有磁盘空间可用,但是已经没有inode编号可以分配了。

比如说,我们创建一个大文件,虽然这个文件只占用了一个inode编号,但是它太大了,超过了磁盘空间,这就是磁盘满的第一种情况

代码语言:javascript
复制
dd if=/dev/zero of=/sdb5/test bs=10G count=1
#把/dev/zero中的内容写到/sdb5/test文件中,文件大小为10G,总共写1个文件
# dd 表示写数据
# if input file 表示输入文件
# of output file 输出文件
# bs block size
# count

dd是一个命令,也就是一个应用程序,我们使用程序向磁盘写数据的时候,会先把数据放到内存中,然后再从内存刷到磁盘上。比如说,下图所示“dd 内存耗尽”,这说明内存放不下10G的数据,我们可以缩小一下。

这6G数据的写入是非常卡,非常慢的。有时候我们也会用这个命令来测试磁盘写数据的速度。

实际上,虽然我们在命令中指定写入6G,但是由于内存的限制,写入内容可能会远少于这个数字。(内存大小远小于磁盘)

第二种磁盘满的情况就是inode编号不够用,比如说我们创建了大量文件,像这种情况我们查看磁盘空间的时候,会发现还有大量空间可用,但是查看可用inode节点的时候,发现已经满了,这也会提示磁盘满。

在实际场合,我们个人的电脑磁盘满一般是指磁盘没有空间了,这可能是我们电脑磁盘上保存了大量的数据导致的;在服务器中,更常见的磁盘满是inode节点编号满了,因为服务器是给很多人用的,文件数量会很多,并且还会有大量的日志文件(服务器上经常会做日志切割,实际上就是把原来的log文件mv为log1并新建一个log),这就会导致没有inode编号可用。其实,在电商中经常需要备份信息,因为这些信息包含了用户交易等重要数据,所以不能删除,要备份出来,如果使用cp命令去备份,比如说我们把服务器上的数据备份到一块硬盘上,那么很可能会出现inode不够用的情况,因为服务器上的数据很多,这样即使硬盘还有很多剩余空间,但是inode已经不够用了,导致磁盘满。正确的备份方法是使用tar打包(打包和压缩是有区别的,tar命令只打包不压缩,打包是把多个文件打包成一个文件,不会节省存储空间,而压缩会节省存储空间,所以我们见到的.tar格式的文件都是打包文件,而不是压缩文件,压缩格式一般为gz或zip等),使用tar命令把多个文件打包为一个文件,打包后的文件只占用一个inode编号,这样就不会导致inode不够用了。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-04-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 机器和智能 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 文件系统的寻址过程——以cat命令是如何读出文件内容、文件的删除过程为例
  • 2 深入探析软链接和硬链接本质
  • 3 磁盘满的两种情况
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档