我们平时不论是买一个U盘硬盘,或者自己在电脑上创建一个分区,大小总是比我们创建的要小一点,有些人会说,这个正常啊,是因为厂家规定的1M=1000k,真正的是1M=1024k,要是这样,我这篇文章就不用写了。厂家的规格可能是一部分原因,不过我现在是以U盘硬盘,或者分区的底层来分析这个问题。
开班第十天:
今天的课程大纲:
真正了解文件系统分析U盘变小了的原因如何选择date block大小软链接、硬链接数据恢复的原理
详细讲解:
真正了解文件系统linux中叫创建文件系统,windows中习惯称呼为格式化,filesystem一种管理文件的方式,我们平时在linux中挂载本质上挂载的是文件系统。一个文件系统包括了inode block和date block,分别为索引节点块和数据块,这是在mkfs创建文件系统的时候就已经生成了。下面我用一张我手画的图来模拟一个分区的构成,不好看,大家不要介意。(实在看不清的就留言,单独给你发)
再解释一下上面图,dir是一个目录索引表,这里假设我要执行cat a.txt文件,我怎么知道a.txt文件里的内容,这里我们先找到dir中a.txt对应inum是1,然后再在file中找到inum=1所对应的文件,可以看到block对应的是<10,11,12>,而在date block中是没有inum的,我写上为了方便理解,我们找到了<10,11,12>,那么我们就从date block中读取出数据,然后返回给cat,这样我们就能读取到a.txt文件内容了。
我这里讲的简单了,其实目录还要索引一次,创建文件系统的时候,根目录的索引是默认分配好的。
分析U盘变小了的原因看懂了上面的图,现在就很容易理解U盘,分区变小的原因了。在inode中,dir的一条记录占用一个inode,file中一条记录占用了一个inode,而且file中的一条记录还记录了这个文件的拥有者,所属组和属性等信息。这一部分总占用的资源就是我们U盘,分区少的那一部分,所以我们分区创建好之后,会变小,就是这个原因。
如何选择date block大小今天我闲的无聊用英文写了这个问题的解答,只过了四级,所以语法很多问题,不过搞IT嘛,能看懂就行,哈哈!
every date block has regular size:
if regular size is small,the inode will occupation(占用) to much space,the rest for date block will decrease( 减少).
if regular size is large,some small document can’t occupation full of a date block,the bad things :much space will be waste.
so choose the right date block regular size is decide to you requirement.
我想表达的大概意思就是,每一个文件系统我们都可以规定date block的默认大小。如果太小,那么inode就会占用太多的资源,那么留给date block就会变少,那么我们看到的分区就比现在还要小;如果太大,那么一些小文件可能占用不完一个block,而使用了一个block,那么很多的空间就会被浪费。所以选择一个合适的date block大小取决于你的需求。
软链接、硬链接我们知道,在用ls -l查看文件权限的时候,第一位可能是 -,d,l,-代表的是普通文件,d代表目录,l代表链接文件。其实这样的属性还有很多个。今天来讲一下链接文件。
软链接做个比喻,其实就像windows中的快捷方式。如何来创建链接呢?
①软链接:ln -s a.txt b.txt,b.txt是本来不存在的,现在b.txt就是a.txt的一个快捷方式。
②硬链接:ln a.txt b.txt,表示硬链接,a.txt和b.txt互相为对方的硬链接。
这里说一下软硬链接的性质:
①不能跨文件系统创建硬链接,因为不同的文件系统可能有相同的inode。
②不能做目录的硬链接。
③硬链接,删除其中一个硬链接,另外一个可以读取,软链接删除源文件,不能读取了。
④两个硬链接都被删除,该inode会被重新分配。
⑤软链接会占用磁盘空间,硬链接不会占用磁盘空间。
硬链接其实就是指向同一文件且inum相同的两条inode,所以他们都会占用一条inode。
数据恢复的原理 我们知道,删除一个文件只是删除了这个文件的inode,而指向的date block却没有被删除,所以我们可以再次通过已知的inode值来找到date block,从而重新读取出里面的数据。但是我们常见的数据恢复软件都会友情提示,数据误删除之后,都不要再继续进行读写磁盘,因为可能重新写的数据会占用了你之前删除的inode,date block也会被占用,那么即时你找回了,要不是原来的数据了。
总结:
好好揣摩一下文件系统的结构,这对我们今后走运维这条路很有帮助的,希望大家都能够越走越远,越走越顺利!