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

相关推荐

  • screen命令

    安装SCREEN[root@centos6 ~]# dfFilesystem     1K-blocks    Used Available Use% Mounted on/dev/sda2       51475068 5052580  43801048  11% /…

    2017-07-22
  • 脚本的进阶与一些基本脚本

    1,脚本中用于表示数字大小写和符号为: -gt(大于)-lt(小于)-ne(不等于)-eq(等于) 格式为 [[空格 ”符号”空格]] 2,测试文件类型的选项 -f(是否为普通文件)-l(是否为链接文件)-d(是否为目录)-e(单独测试文件是否存在) 3,if语句的格式:(其中path代表条件,elif链接多个条件,最后一个条件用else表示) if pat…

    Linux干货 2017-05-22
  • Linux文件管理初步(第二周)

    第二周作业 1.Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示 目录管理管理类命令 mkdir make directories mkdir [OPTION]… DIRECTORY… 注意:路径基名作为命令的作用对象时,基名之前的路径必须要存在;     -p:自动按…

    Linux干货 2016-09-05
  • Linux的文件系统的基础目录、帮助、部分命令介绍

    Linux的文件系统的基础目录、帮助、部分命令介绍 目录 linux基础目录 Linux获取帮助 相关控制命令,翻屏等 部分命令介绍 linux的基础目录 Bin: 共所有用户使用的基本命令,就是二进制程序 Sbin:系统的二进制程序。供管理员使用的 Boot:基本的加载器,引导加载器所依赖的各种静态文件 Dev:设备文件和特殊文件 其中设备分为两种类型,字…

    Linux干货 2016-10-29
  • 初识linux文件管理

    初识linux文件管理 1.文件系统与目录结构 文件系统从根目录 下开始,用“/”。 以. 开头的文件为隐藏文件,路径分隔用/表示。文件系统的层级结构是LSB(linux standard base),遵循文件系统层级标准(FHS ) 文件命名规则:   文件名最长255个字节,包括路径名在内共4095个字节  &nb…

    2017-02-18
  • vim文本编辑器

    vim简介: vi: Visual Interface,文本编辑器 文本:ASCII, Unicode 文本编辑种类: 行编辑器: sed 全屏编辑器:nano, vi vim – Vi Improved 其他编辑器: gedit一个简单的图形编辑器 gvim一个Vim 编辑器的图形版本   vim使用: 三种主要模式: 命令(Norm…

    Linux干货 2017-06-17