linux复制文件数据结构,7.28_Linux_ext数据结构inode的原理浅析、软硬链接的区别

inode表结构浅析

下图以ext文件系统为参考,以4k块大小分区,简单描述一下ext文件系统的数据结构原理,如果有任何错误,烦请各位指出

3c8ce6380daa33c267ccb0e2e66a02de.png

inode 索引节点

硬盘上的每个磁道被等分为若干个弧段,这些弧段便是磁盘的扇区。硬盘的读写以扇区为基本单位。

扇区的大小,是2的N次方倍。分区的大小可以有多样,1k、2k、4k…以4k块大小来说明。4k块大小分为8个扇区,每个扇区对应512字节。每一块也称为block,文件以block为单位进行存储,并且每一个bolck只能属于一个文件,若文件大小不足4k,也按照4k大小的块来存储。inode的数量是格式化的时候指定的,理论上来说,inode的数量和block的数量是越接近越好,但是在实际过程中一一对应是很难的,所以一般格式化的时候会按照服务器的用途来指定一定比例的inode数量。

#df 查看系统每个分区bolck的数量

#df -i 查看系统每个分区inode的数量

3c8ce6380daa33c267ccb0e2e66a02de.png

每个分区都有一个独立的inode table

元数据也是在inode里面,元数据也是会占用磁盘空间的。

指针:数据块的路径

直接指针:有12个指针,一个4k, 可以存储4*12=48K的数据块。

间接指针:第十三个指针,指向下一个文件块的指针,也是4k块大小,4k块来说,可以划分1024个指针,里面的指针才是指向真正的数据块。一共可以存储1024*4k=4M的数据块,那么文件在4M左右范围里面,可以用间接指针就可以完成。

两重指针:第十四个指针。也是指向一个4k指针数据块,4k指针块再指向1024个指针数据块,

每个指针可以存放1024个4k数据,所以可以存储1024*1024*4k=4G的数据块。

三重指针:跟两重指针工作原理类似,最后可以存放1024*1024*1024*4k=4t的数据块。

inode table是缓存在内存里面的,所以查询速度还是很快的。一般来说,在系统里面删掉文件的操作并不是删掉数据块,而是删掉inode table里面的元数据,这里解释一下元数据,元数据就是数据块的属性,例如:名字,身高等这些就可以理解为元数据。所以,这个就是为什么删掉了文件以后,只要没有新的文件覆盖掉原有的数据块,数据一般都可以恢复的原因。很多文件系统,例如windows下面的fat和ntfs也是同样的原理。一般来说,在磁盘里面的数据都是连续写入,由于有时候会删除掉部分数据,使得磁道里面有些空位置并不能一下子连续的存储下一个文件,一般这样都是分散存储在不同的磁道里面,当读取这一部分的数据,磁盘的指针要来回转多几个圈,造成性能下降,这就是文件碎片的由来。所以隔一段时间进行碎片整理是必须的。但是现在一些新的硬盘,如SSD固态硬盘,就没有磁道这些说法,所以就并不需要像传统的机械硬盘一样进行碎片整理。

磁盘里的数据块有文件和目录,这两者的inode的存储方式也是不同的。

在inode table里面文件是直接引用一个inode的号码,而目录则是在inode table里面的目录项下面存储文件名和文件inode之间的映射。

复制、删除、移动对inode的影响

cp 复制:新的文件会分配一个空闲的inode号,在inode表中生成新条目

在目录中创建一个目录项,将名称与inode编号关联

拷贝数据生成新的文件,是两个完全不相同的数据块。

rm 删除:链接数递减,从而释放的inode号可以被重用

把数据块放在空闲列表中

删除目录项

数据实际上不会马上被删除,但当另一个文件使用数据块时将被覆盖,如果恢复inode的元数据的时候文件就会马上链接恢复。

mv 移动:如果mv命令的目标和源在相同的同一个分区下面,作为mv命令

用新的文件名创建对应新的目录项

删除旧目录条目对应的旧的文件名

不影响inode表(除时间戳)或磁盘上的数据位置:没有数据被移动!所以在同一个分区里面移动文件的速度是非常的快的原因。

如果目标和源在一个不同的文件系统,mv相当于cp和rm

硬链接和软链接的区别

什么是硬链接?

硬链接:指向同一个inode的多个文件路径。(简单理解的意思就是一个人有两个名字,例如张三,他的外号叫老张,又叫小三,其实都是同一个人)

特性:

1 目录不支持硬链接

2 硬链接不能跨文件系统(不能跨分区)

3 创建硬链接会增加inode引用计数;

创建硬链接文件命令

ln 源文件 硬链接文件…

删掉其中一个硬链接文件,其他硬链接文件不受影响

什么是软链接(符号链接)

软链接:指向同一个文件路径的另一个文件路径;

特性:

1 符号链接于文件是两人各自独立的文件,各有自己的inode;对原文件创建符号链接

不回增加引用计数;

2 支持对目录创建符号链接,可以跨文件系统;

3 删除符号链接文件不影响原文件;但删除原文件,符号指定的路径即使不存在,此时会

变成无效链接。

注意:符号链接文件的大小是其指定的文件的路径字符串的字节数

创建软链接文件命令

创建软链接的时候,必须要用绝对路径!

原始文件相对于软链接文件路径,而不是相对于当前工作目录。

两者区别:

这里以个人理解做了一个小表格

3c8ce6380daa33c267ccb0e2e66a02de.png

练习题

1、显示/var目录下所有以l开头,以一个小写字母结尾,且中间出现至少一位数字的文件或目录

2、显示/etc目录下以任意一位数字开头,且以非数字结尾的文件或目录

3、显示/etc/目录下以非字母开头,后面跟了一个字母及其它任意长度任意字符的文件或目录

4、显示/etc目录下所有以m开头以非数字结尾的文件或目录

5、显示/etc目录下,所有以.d结尾的文件或目录

6、显示/etc目录下,所有.conf结尾,且以m,n,r,p开头的文件或目录

7、使用别名命令,每日将/etc/目录下所有文件,备份到/testdir/下独立的新目录下,并要求新目录格式为backupYYYY-mm-dd,备份过程可见

8、先创建/testdir/rootdir目录,再复制/root所有下文件到该目录内,并要求保留原有权限

9、如何创建/testdir/dir1/x, /testdir/dir1/y, /testdir/dir1/x/a, /testdir/dir1/x/b, /testdir/dir1/y/a, /testdir/dir1/y/b

10、如何创建/testdir/dir2/x,/testdir/dir2/y,/testdir/dir2/x/a,/testdir/dir2/x/b

11、如何创建/testdir/dir3, /testdir/dir4, /testdir/dir5, /testdir/dir5/dir6, /testdir/dir5/dir7

原创文章,作者:~微风~,如若转载,请注明出处:http://www.178linux.com/28244

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值