文件系统(维护课堂2)

文件系统

文件系统主要就是负责管理文件在硬盘上的存储的,如果说一般看到的都是罗基层的,那么文件系统就是物理层跟逻辑层的桥梁,比如你存储了一个文件,他在硬盘上是怎么被存储的。

还有如何组织文件系统更加高效,如何存储更大的文件,如何降低磁盘碎片,如何优化提升文件系统性能,提升稳定性。这些都是文件系统的事情。

最早起的文件系统,比如fat16,简单的把文件存储到硬盘上进行管理,所以容易产生碎片,

也没什么优化,最大文件体积也很小,到了fat32,最大文件体积到了4Gb

windows是在win2000开始引入了NTFSNewTechnology File System)文件系统

NTFS属于日志文件系统

NTFS提供了更大文件支持,更好的权限管理,支持文件系统级别的压缩,更好的稳定性,跟更少的碎片。

对于Linux来说现在最多的是ext文件系统,最新是ext4也是个日志文件系统。

还有那种分布式文件系统,比如googlegfs,根据gfs开发的hdfsgfs是块文件系统,有一个索引服务器,底下的存储借点存储的都是数据快,而不是文件。

对于这种文件系统你要向索引服务器请求文件,索引服务器再从底下的节点中把相关的数据块取出来发给你,这个就是分布式文件系统。

对于分布式文件系统,你必须需要一个所以来管理所有的文件存储,你总不能存储一个文件就要广播一次询问所有服务器,所以针对不同规模的文件系统有不同的设定。

现在的文件系统总的来说都是日志文件系统。日志文件系统(英语:Journaling file system),一种文件系统,指在文件系统发生变化时,先把相关的信息写入一个被称为日志的区域,然后再把变化写入主文件系统的文件系统。在文件系统发生故障(如内核崩溃或突然停电)时,日志文件系统更容易保持一致性,并且可以较快恢复。

无论是ext btrfs ntfs 还是machfs 都是日志文件系统。

在文件系统里你每一次操作系统文件都会有一个日志负责记录这些操作,一旦操作失败系统可以根据日志回滚操作。

而且现在都是用簇来当作单位,所谓的簇就是硬盘上最小的文件大小,就是说你建立了一个1kb的文件,但是在硬盘上它是被写入了一个簇里面。比如ntfs里面默认簇大小是16kb,那么这个1kb的文件就被写入了一个16kb的簇里面。所以你在windows的文件属性中看到一个实际大小和一个占用大小。

这样的好处是大大的加快了硬盘的操作速度,最开始人们都是1bit 1bit的读取,后来发现速度实在是太慢了,之后就有人提出才用块的方案,一块一块的读取,这样就快多了。缺点就是可能会占用很多多余的空间。

现在都在开发下一代文件系统了,linux unix的比较多,linux还在争,貌似主流倾向于btrfs,这个目前还是只能创建访问,但不是不能当做启动分区,启动分区还是要求ext4

unix系列来说么,最牛X的当然是zfs了,这个号称地球上最强的文件系统,据说塞满这个文件系统所需要的物质已经超过这个宇宙了,zfs无论是功能还是稳定性都是奇佳。

但是缺点就是需求很大= =。根据官方指南,你要是用4T的硬盘,大概需要8GB的内存来支持这个文件系统,不过据说测试的话读写性能不如ext4,但是对于服务器来说稳定性才是最重要的。

windows的文件系统也是经过了很多曲折的,vista推出之前放出过一个beta,那个版本里面微软开发了一个号称是革命性的文件系统winfs,用sql server作为底层,再用sql server来组织管理文件系统,这个思路跟ext的思路差不多,后来被抛弃了。

不过在win server 2012里面微软正式发布了他们的下一代文件系统ReFS弹性文件系统,目前只能啊在server2012里看见。而且这个文件系统依然不能作为启动盘的分区。这个文件系统主要是针对大规模存储设计的,可以很方便的进行横向或者纵向扩展,方便企业随时调整他们的存储规模,可以也融入了一部分winfs的技术吧,不过跟NTFS一样,资料不外泄= =

现在说所linuxext文件系统,这个文件系统比较特别,自从你创建开始你所能存储的文件数目就是一定的。哪怕你硬盘没有满但是文件数达标了你也创建不了新的文件了。

这个磁盘格式开始格式化的时候会创建一个叫嘴inode的区域,每个文件的属性都会写入那个区域,在Linux里面,一切都是文件,无论是文件夹设备还是什么都是文件你都可以用操作文件的方式去操作他。ext可以实现很多ntfs实现不了的特性依托于inode

举个例子,你在windows底下创建一个快捷链接,如果你移动原始文件那么快捷连接就会失效了。但是linux底下不会,因为你创建的快捷链接是指向inode里面那个文件的记录,而不是文件所在的位置,所以即使文件变了但是链接依旧不会失效,通过这个inode列表可以高效对文件进行操作,比如删除文件,直接移除inode里面的文件记录就行了。这样的效率其实比 ntfs高很多,这也是winfs的设计思路。

其实删除文件并没有把文件删除,只是删除了路径,系统默认那个文件消失了。直到新的文件覆盖了原先的位置,文件也就算真正意义上删除了。回收站就会输这个原理。

一般来说文件系统设计就这几种了,向ntfs这样,一个文件就是一个,Linuxext那样通过inode统一管理文件,或者是zfs那样,功能强大依托于日志,不过以后在企业中大规模存储,用的最多的还是SAN存储网络,一般都是块存储。都会有一个独立索引服务器,或者叫存储控制器的东西,他来存储每个文件对应的数据块是哪些,类似于GFS或者HDFS设计也是这个思路。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章