上周课上,向勇老师让我们去了解ZFS等文件系统。我想到了一个问题:一个文件系统与另一个文件系统,主要区别在哪些方面呢?
为此我看了一些资料,整理如下。
1、文件系统之间的不同,主要体现在三个方面:
2、Limits
Limits与metadata的有关,metadata某些字段的长度是固定的,从而对某些属性有限制。
文件系统与此有关的特点:
3、Features
这部分主要是文件系统的功能特点,不同文件系统可能有其中的某些功能。这些功能不包括文件系统的分配管理。常见的特点简单介绍如下:
$ mkdir Temp
$ file temp
temp: directory
$ mkdir temp
mkdir: temp: File exists
removing its directory entry
releasing the inode to the pool of free inodes
returning all used disk blocks to the pool of free disk blocks
1、拷贝所有内容块到文件系统某个位置
2、再这些内容追加到该文件的末尾
4、Allocation and layout policies
文件系统为文件的data分配空间,用一些策略来提高性能或利用率。
FILE *file = fopen("temp.txt","w");
fseek(file,1024*1024*1024,SEEK_CUR);
fputc('0',file);
fclose(file);
5、小结
对于一个文件系统,我们要看到一些数字,例如单文件最大长度、目录最大层级数,等等,这是我们容易注意到的。同时也要看到文件系统的特点,例如ZFS的日志、COW、快照等等,但特点可能会牺牲时间、空间,不一定越强大越好,简单的U盘可能FAT就够了。写程序的时候,可以根据文件系统的特点做优化。
课上向勇老师还提出,希望我们能进一步了解这些文件系统的某些细节。我们是否可以了解一下ZFS的zpools更具体的内容、这些文件系统的inode长什么样、这些文件系统的空间如何partition,等等。大家感兴趣可以进一步了解。
6、参考资料
主要就是把wiki上看到整理了一下。
https://msdn.microsoft.com/en-us/library/windows/desktop/aa380375(v=vs.85).aspx
https://en.wikipedia.org/wiki/Design_of_the_FAT_file_system
https://en.wikipedia.org/wiki/Comparison_of_file_systems
https://en.wikipedia.org/wiki/Journaling_file_system
可能有理解不正确的地方,欢迎大家批评指正~