下面一篇是转载,皆有自己的笔记,红字部分!--------------------------------------------
磁盘碎片,更确切地应该称为文件系统碎片。按照引文(1)的linux官方资料,可分为外部碎片(external fragmentation)和内部碎片(internal fragmentation)。
内部碎片是怎么产生的呢?
我们知道,文件系统以簇(cluster)作为基本存储单位来组织数据的。假设簇大小为4KB,一个大小不足1KB的文件也至少要分配一个簇,即4KB
的空间,这就浪费了大约3KB的磁盘空间,产生了3KB的内部碎片。这就是windows文件属性中的占用空间,包含内部碎片的空间。如果将簇大小设为
1Byte,那不就不会产生碎片了吗?理论上这是正确的,然而一则簇通常是扇区大小(一般为512Byte)的倍数,磁盘一般按照物理扇区进行数据读写,
所以这是不现实的。二则由于物理磁盘访问次数剧增,这会严重影响文件系统I/O性能。因此,文件系统设计都要在内部碎片和性能之间进行权衡,以取得时间和
空间上的整体最佳。内部碎片主要是造成磁盘空间的浪费,并且无法进行碎片整理,windows的磁盘碎片整理功能所整理的碎片不是这个碎片,而是外部碎
片。
linux下的ext2和ext3是以块(block)为基本存储单位的,块的大小是可以调整的,默认是4K。
外部碎片又是怎么产生的呢?
外部碎片就是我们通常所说的
windows碎片整理下的概念,它主要影响性能。外部碎片应该称为文件碎片,是由于文件被分散保存到整个磁盘的不同地方,而不是连续地保存在磁盘连续的
簇中形成的。文件碎片一般不会在系统中引起问题,但文件碎片
过多会引起系统性能下降,严重的还要缩短硬盘寿命,还有可能导致存储文件的丢失(对linux来说,外部碎片的存在,会导致文件读写时,磁盘寻址需要多花时间,影响性能。)。FAT文件系统非常容易产生文件碎片,这与文件系统所使用的数据结构有关。对于FAT来说,使用的是链式的结构来记录一个文件所使用的簇。这种方式有助于文件的动态增长,但却产生了碎片的问题。所有的文件都连续存放,因此只要任何一个文件大小变化,就可能产生碎片。于是很快磁盘就会变成很混乱,访问效率就会变低了。而对于ntfs,linux的ext2/3文件系统来说,它们采取在整个磁盘上存储文件,尽量保持单个文件连续存放。因此不易产生文件碎片,也就不需要碎片整理,只在文件系统利用率接近饱和时才需要,但一般情况下是不会发生的。
外部碎片还有一种情况,那就是同一文件的块不连续。这种情况可以模拟,而且在磁盘满负荷下的多次读写也会导致这一情况。
小结一下:
1、windows系统下需要进行文件碎片整理,并且是对于FAT文件系统来说的,NTFS一般不需要。
2、linux文件系统不需要进行文件碎片整理,估计也没人实现这样的工具。当然对FAT文件系统整理是一个例外。(ext2曾经有一个关于磁盘碎片整理的工具, ext3没有。ext4存在在线磁盘整理的功能,就是在mount的时候也可以对磁盘进行碎片整理。因此,linux下不是完全不存在碎片,而是存在碎片的可能性比较小。)
3、文件碎片整理是对外部碎片来说的,内部碎片无法进行整理。(实现了片功能,也只是减少碎片所占的总磁盘空间,而不会避免内部碎片!)
( Aiguille.LIU / 刘爱贵, aigui.liu@gmail.com)
参考文献:
[1]
linux官方网站对碎片的解说
[2] http://geekblog.oneandoneis2.org/index.php/2006/08/17/why_doesn_t_linux_need_defragmenting
这篇文章通俗易懂地解说了为什么linux不需要碎片整理以及windows为什么需要碎片整理
阅读(2023) | 评论(0) | 转发(0) |