为什么NTFS系统容易产生碎片而ext系列则不会?
2014-08-20 13:29
363 查看
以下是我自己的理解:
给文件分配空间的算法不同。NTFS是连续分配,如果连续顺序地新建一系列文件,它们是一个个紧挨着的。但ext则不同,每个文件后会留下一些空间。这时候,如果修改了中间的某个文件,加入了新的内容,NTFS一定会产生碎片,但ext因为有预留,所以不容易产生碎片。
推荐看看维基百科,英文的最好。
===============================================================================
windows概念下的碎片,在上面linux官方资料中称为外部碎片,它就是影响性能的那个碎片概念。(This is called "external fragmentation" or simply "fragmentation" and is a common problem with MS-DOS file systems. )而linux一般不会产生这种碎片。外部磁盘碎片应该称为文件碎片,是因为文件被分散保存到整个磁盘的不同地方,而不是连续地保存在磁盘连续的簇中形成的。
当应用程序所需的物理内存不足时,一般操作系统会在硬盘中产生临时交换文件,用该文件所占用的硬盘空间虚拟成内存。虚拟内存管理程序会对硬盘频繁读写,产生大量的碎片,这是产生硬盘碎片的主要原因。
其他如IE浏览器浏览信息时生成的临时文件或临时文件目录的设置也会造成系统中形成大量的碎片。文件碎片一般不会在系统中引起问题,但文件碎片 过多会使系统在读文件的时候来回寻找,引起系统性能下降,严重的还要缩短硬盘寿命。另外,过多的磁盘碎片还有可能导致存储文件的丢失。
上面所说的就是windows如何产生外部碎片的,其实这与文件系统所使用的数据结构有关。对于FAT来说,使用的是chain式的结构来记录一个文件所使用的簇。这种方式的好处就是有助于文件的动态增长的需要。但是却带了碎片的问题,使得读写文件的时候,磁头频繁移动。对于CD-ROM,由于是 read-only的,所以不存在数据增长的问题,所以,采用了连续的方法来记录数据,也不会产生碎片,而linux的ext等文件格式与CD-ROM的存储有相似之处。
下面这篇文章通俗易懂地解说了为什么linux不需要碎片整理以及windows为什么需要碎片整理:
来自http://geekblog.oneandoneis2.org/index.php/2006/08/17/why_doesn_t_linux_need_defragmenting
请注意,官方资料所说的是linux文件系统在磁盘还有5%空闲空间的情况下是不需要碎片整理的。(Linux native file systems do not need defragmentation under normal use and this includes any condition with at least 5% of free space on a disk.)。而在实际使用中,磁盘在还有8%左右未使用时就会有警告产生,所以碎片整理是不用考虑的。
补充:
Ext3和ext4是一种日志式文件系统。
日志式文件系统的优越性在于:由于文件系统都有快取层参与运作,如不使用时必须将文件系统卸下,以便将快取层的资料写回磁盘中。因此每当系统要关机时,必须将其所有的文件系统全部shutdown后才能进行关机。
如果在文件系统尚未shutdown前就关机 (如停电) 时,下次重开机后会造成文件系统的资料不一致,即产生碎片,故这时必须做文件系统的重整工作,将不一致与错误的地方修复。然而,此一重整的工作是相当耗时的,特别是容量大的文件系统,而且也不能百分之百保证所有的资料都不会流失。
为了克服此问题,使用所谓‘日志式文件系统 (Journal File System) ’。此类文件系统最大的特色是,它会将整个磁盘的写入动作完整记录在磁盘的某个区域上,以便有需要时可以回溯追踪。
由于资料的写入动作包含许多的细节,像是改变文件标头资料、搜寻磁盘可写入空间、一个个写入资料区段等等,每一个细节进行到一半若被中断,就会造成文件系统的不一致,因而需要重整。
然而,在日志式文件系统中,由于详细纪录了每个细节,故当在某个过程中被中断时,系统可以根据这些记录直接回溯并重整被中断的部分,而不必花时间去检查其他的部分,故重整的工作速度相当快,几乎不需要花时间,因此避免了出现磁盘碎片太多无法找到的情况。
实际上,ext也是会产生碎片的,但数量极少,基本不需要额外的磁盘整理软件,这一点可以参考ubuntu的官方说明。
参考:
http://www.zhihu.com/question/19853952
给文件分配空间的算法不同。NTFS是连续分配,如果连续顺序地新建一系列文件,它们是一个个紧挨着的。但ext则不同,每个文件后会留下一些空间。这时候,如果修改了中间的某个文件,加入了新的内容,NTFS一定会产生碎片,但ext因为有预留,所以不容易产生碎片。
推荐看看维基百科,英文的最好。
===============================================================================
windows概念下的碎片,在上面linux官方资料中称为外部碎片,它就是影响性能的那个碎片概念。(This is called "external fragmentation" or simply "fragmentation" and is a common problem with MS-DOS file systems. )而linux一般不会产生这种碎片。外部磁盘碎片应该称为文件碎片,是因为文件被分散保存到整个磁盘的不同地方,而不是连续地保存在磁盘连续的簇中形成的。
当应用程序所需的物理内存不足时,一般操作系统会在硬盘中产生临时交换文件,用该文件所占用的硬盘空间虚拟成内存。虚拟内存管理程序会对硬盘频繁读写,产生大量的碎片,这是产生硬盘碎片的主要原因。
其他如IE浏览器浏览信息时生成的临时文件或临时文件目录的设置也会造成系统中形成大量的碎片。文件碎片一般不会在系统中引起问题,但文件碎片 过多会使系统在读文件的时候来回寻找,引起系统性能下降,严重的还要缩短硬盘寿命。另外,过多的磁盘碎片还有可能导致存储文件的丢失。
上面所说的就是windows如何产生外部碎片的,其实这与文件系统所使用的数据结构有关。对于FAT来说,使用的是chain式的结构来记录一个文件所使用的簇。这种方式的好处就是有助于文件的动态增长的需要。但是却带了碎片的问题,使得读写文件的时候,磁头频繁移动。对于CD-ROM,由于是 read-only的,所以不存在数据增长的问题,所以,采用了连续的方法来记录数据,也不会产生碎片,而linux的ext等文件格式与CD-ROM的存储有相似之处。
下面这篇文章通俗易懂地解说了为什么linux不需要碎片整理以及windows为什么需要碎片整理:
来自http://geekblog.oneandoneis2.org/index.php/2006/08/17/why_doesn_t_linux_need_defragmenting
请注意,官方资料所说的是linux文件系统在磁盘还有5%空闲空间的情况下是不需要碎片整理的。(Linux native file systems do not need defragmentation under normal use and this includes any condition with at least 5% of free space on a disk.)。而在实际使用中,磁盘在还有8%左右未使用时就会有警告产生,所以碎片整理是不用考虑的。
补充:
Ext3和ext4是一种日志式文件系统。
日志式文件系统的优越性在于:由于文件系统都有快取层参与运作,如不使用时必须将文件系统卸下,以便将快取层的资料写回磁盘中。因此每当系统要关机时,必须将其所有的文件系统全部shutdown后才能进行关机。
如果在文件系统尚未shutdown前就关机 (如停电) 时,下次重开机后会造成文件系统的资料不一致,即产生碎片,故这时必须做文件系统的重整工作,将不一致与错误的地方修复。然而,此一重整的工作是相当耗时的,特别是容量大的文件系统,而且也不能百分之百保证所有的资料都不会流失。
为了克服此问题,使用所谓‘日志式文件系统 (Journal File System) ’。此类文件系统最大的特色是,它会将整个磁盘的写入动作完整记录在磁盘的某个区域上,以便有需要时可以回溯追踪。
由于资料的写入动作包含许多的细节,像是改变文件标头资料、搜寻磁盘可写入空间、一个个写入资料区段等等,每一个细节进行到一半若被中断,就会造成文件系统的不一致,因而需要重整。
然而,在日志式文件系统中,由于详细纪录了每个细节,故当在某个过程中被中断时,系统可以根据这些记录直接回溯并重整被中断的部分,而不必花时间去检查其他的部分,故重整的工作速度相当快,几乎不需要花时间,因此避免了出现磁盘碎片太多无法找到的情况。
实际上,ext也是会产生碎片的,但数量极少,基本不需要额外的磁盘整理软件,这一点可以参考ubuntu的官方说明。
参考:
http://www.zhihu.com/question/19853952
相关文章推荐
- asp.net为什么会产生app_offline.htm 这个文件,为什么删除后运行浏览器就不会报应用程序脱机
- 1 开发一个注重性能的JDBC应用程序不是一件容易的事. 当你的代码运行很慢的时候JDBC驱动程序并不会抛出异常告诉你。 本系列的性能提示将为改善JDBC应用程序的性能介绍一些基本的指导原则,这其中的原则已经被许多现有的JDBC应用程序编译运行并验证过。 这些指导原则包括: 正确的使用数据库MetaData方法 只获取需要的数据 选用最佳性能的功能 管理连
- JCIP_5_01_CopyOnWriteArrayList为什么不会产生ConcurrentModificationException?
- ORA FAQ 性能调整系列之——为什么AUTOTRACE不会在执行计划中显示分区截断(partition pruning)?
- 关于“幽灵架构”的补充说明3:为什么不会产生“循环引用”
- 回忆容易产生误解的模式名称
- 为什么流量对人家来说那么容易?
- 人为什么活着系列-From Blogbus
- 没有安全感的IT员工--为什么容易“集体跳槽”
- ext.1.1系列(1)--Ext.data.Store
- 为什么写在Iframe中 的关于Cookie的javascript代码不会被执行,而且Iframe的页面如果是jsp写的,也不可以用response对象写入Cookie!
- SUSE LINUX 10 扫盲系列:为什么用 SUSE LINUX? 推荐
- 如果一个触发器中只有一条Null语句,是否会产生日志?为什么?
- SSH系列(二)--为什么要用Hibernate,给个理由先?
- 为什么trufun UML系列产品会出人意料的热卖?
- 为什么年轻it人容易猝死?聪明反被聪明误啊!
- 新的系统是怎样产生的?(软工系列文章之六)
- Sql server 2005 Clr集成系列开篇 为什么微软要集成clr 到sql server?
- 为什么秋季里人容易伤感呢?
- 为什么Bindows不会成功