7.28_Linux_ext数据结构inode的原理浅析、软硬链接的区别

inode表结构浅析

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

wKioL1ea9qKwMA88AAQ0CV5awjQ474.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的数量

wKiom1ebAPKCPrmpAABYTLiUKfk558.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
2
ln [OPTION]... [-T] TARGET LINK_NAME   (1st form)
ln - make links between files

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


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

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

特性:

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

 不回增加引用计数;

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

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

 变成无效链接。


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


创建软链接文件命令

1
2
3
4
#ln -s 原始文件路径文件1 软链接文件1..2..创建软链接 
 
-s, --symbolic
              make symbolic links instead of hard links

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

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


两者区别:

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

wKiom1edagqDeu7mAAB4bq3JH9s031.png




练习题


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

1
# ls -ld /var/l*[0-9]*[[:lower:]]

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

1
# ls -ld /etc/[0-9]*[^0-9]

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

1
# ls -ld /etc/[^[:alpha:]][[:alpha:]]*

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

1
# ls -ld /m*[^0-9]

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

1
# ls -ld /etc/*.d

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

1
# ls -ld /etc/[mnrp]*.conf

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

1
2
# alias bkday='cp -av /etc/ /testdir/backup`date +%F`'
# bkday

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

1
#cp -av /root /testdir/rootdir

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

1
# mkdir -p /testdir/dir1/{x,y}/{a,b}

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

1
# mkdir -pv /testdir/dir2/{x/{a,b},y}

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

1
# mkdir -p /testdir/dir{3,4,5/dir{6,7}}

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

赞 (0)
~微风~~微风~
上一篇 2016-08-03 19:20
下一篇 2016-08-03 21:16

相关推荐

  • vim及脚本

    1、复制/etc/rc.d/rc.sysinit文件至/tmp目录,将/tmp/rc.sysinit文件中的以至少一个空白字符开头的行的行首加#。     第一步:     [root@localhost ~]# cp /etc/rc.d/rc.sy…

    Linux干货 2016-12-02
  • 集中管理利器-puppet快速入门-下

    Puppet配置 1.    文件管理 file 文件服务器写法: /etc/puppet/ fileserver.conf 定义 [files] path /tmp/files  ## puppet数据存放目录 =è后面远程备份实战会用到 allow *.example.com 实战1: 备份master机…

    Linux干货 2015-05-07
  • linux发展史-

    前言: 人类文明的进步伴随着战争,战争留下的产物也是非常伟大的。 最初用于战争的通电钢铁,如今以进入人们生活。 而它的附带产物如今也是变得妙不可言。 本文简要说明操作系统的发展过程,以及该大树下一些分支。         简 述   Linux是诞生与UNIX下的一款操系统,有着安全稳定的文件系统,…

    Linux干货 2016-10-19
  • 软连接与硬连接

    硬链接定义 新建的文件是已经存在的文件的一个别名,当原文件删除时,新建的文件仍然可以使用. 硬链接(hard link) ln   UNIX文件系统提供了一种将不同文件链接至同一个文件的机制,称这种机制为链接。它可以使得单个程序对同一文件使用不同的名字。这样的好处是文件系统只存在一个文件的副本。系统简单地通过在目录中建立一个新的登记项来实现这种连接。该登记项…

    Linux干货 2017-07-22
  • 02Linux上终端的类型

    一、终端的概念 所谓终端就是在一个连接主机的端子上面接入鼠标、键盘、显示器等所组成的一个组合。终端用于用户与主机之间的交互。早期的时候,在大型主机上,想使用主机的用户很多,但是主机却只有一个,也不能实现人手一台。于是为了让一台主机给多个用户使用,便产生了多个终端和多个用户,这样每个用户只要有一个终端变可以与主机交互了。 二、终端的种类 终端的类型有四类:物理…

    Linux干货 2016-10-14
  • N22-第十周作业

    1、请详细描述CentOS系统的启动流程(详细到每个过程系统做了哪些事情) (1)POST:加电自检,利用COMS里记录的配置信息检测硬件是否都工作正常 (2)Boot Sequence: 按次序查找各引导设备,第一个有引导程序的设备即为本次启动要用到的设备 Grub引导程序:提供一个菜单,允许用户选择要启动的系统或不同的内核版本, 把用户选定的内…

    Linux干货 2016-10-25