温故:
每个逻辑块的大小一般为4096字节,即4kb.一个目录或文件可能用到一到多个逻辑块,比如文件a的大小为9k,那么这个文件最起码需要3个逻辑块,前两个逻辑块占满了,第三个逻辑块只占用了1k,剩余3k的区域没有用到。但是AIX中要求逻辑块中剩余的部分不能给其他的文件或目录继续使用,这样就造成了很大的浪费,因为大部分的文件都会在最后一个逻辑块中有剩余,哪有那么多真正正好不多不少的文件。
于是为了避免这种情况的发生,碎片的概念也就有了。碎片是在文件系统创建的过程设定的,如果没有自定义的话,系统内就默认为4096字节。
原文链接:AIX日志型文件系统之逻辑块和碎片(Fragment)
知新:
看标题大家就应该知道了,本篇文章的意义是对“碎片”这个知识点进行补充。在上一篇文章AIX日志型文件系统之逻辑块和碎片(Fragment)中主要说了碎片的好处,但是事务都有其双面性,“碎片”也不例外。
上文讲过碎片的意义是提高资源的使用率,但是碎片太小也会增加文件系统的总开销,这种说法要如何理解呢?
假设一:当前文件系统的碎片设置的值为512字节,那么如果你要对一个文件大小为0的文件进行一次512字节的写操作,系统就需要为这次写操作分配一次空间,如果此时你又要对这个文件进行两次512字节的写操作,三次写操作下来就需要进行3次碎片的分配;
假设二:当前文件系统的碎片设置的值为4096字节,那么如果你要对一个文件大小为0的文件进行一次512字节的写操作,系统就需要为这次写操作分配一次空间,如果此时你又要对这个文件进行两次512字节的写操作,就不再需要有额外的分配操作,因为之前分配出的4096字节的空间足够后面两次的写操作。
从上面这两种假设来看,文件系统的碎片值不一定是越小越好,还是要根据实际的情况进行分配。
另外,也可以从另一个角度来说明使用小于 4 096 字节的碎片可能会引起更多的磁盘空闲空间的残片(Fragmentation)。例如,假设把一个磁盘区域划分成8 个 512 字节的碎片,假定有 4个不同的文件,每一个文件的大小是 512 个字节,把它们分别依次写到这个磁盘区域的第 1,4,5 和7个碎片上,那么还剩余第 2,3,6 和 8 个碎片是空闲的。尽管剩余的 4个碎片提供了2 048 字节的空闲磁盘空间,但是却无法把这些空闲碎片分配给要求占用 4 个碎片(2 048 字节)的文件,因为一次所要分配的文件碎片在空间必须是连续的,我们把在空间上不连续的空闲碎片称为残片。
由于给一个文件或目录逻辑块分配的碎片必须是连续的。即使文件系统中可用的空闲空间总数量大于一次操作所需的空间数量,在文件系统分配新的磁盘空间时,残片也会导致文件系统的这次空间分配操作失败。例如,如果要对一个大小为 0 的文件实施一个扩充空间的写操作,写操作的 I/O 单位是逻辑块,那么这个写操作要求文件系统能够分配 4 096字节的连续磁盘空间,而如果文件系统的空闲空间被划成 512 字节的碎片,而且只包含了 32 个非连续的碎片或者 16KB 的非连续空闲磁盘空间,那么这个写操作就会失败,因为文件系统中没有 8 个连续的空闲碎片或没有 4 096 字节的连续的空闲磁盘空间来满足这次写操作。踩7F。
对于存在大量残片(Fragmentation)的文件系统,用 defragfs 命令可以使这些分散的碎片连续化,但 defragfs 命令的执行会对文件系统的性能产生影响。
关于日志型文件系统的“碎片”就讲到这里