更新时间:2024-09-27 13:04
稀疏文档又称稀疏文件(英语:sparse file),是一种计算机文件,它能尝试在文件内容大多为空时更有效率地使用文件系统的空间。它的原理是以简短的信息(元数据)表示空数据块,而不是在在磁盘上占用实际空间来存储空数据块。只有真实(非空)的数据块会按原样写入磁盘。
稀疏文件(英语:sparse file)是一种计算机文件,它能尝试在文件内容大多为空时更有效率地使用文件系统的空间。它的原理是以简短的信息(元数据)表示空数据块,而不是在在磁盘上占用实际空间来存储空数据块。只有真实(非空)的数据块会按原样写入磁盘。
在读取稀疏文件时,文件系统会按元数据在运行时将这些透明转换为“真实”的数据块,即填充为零。应用程序不会察觉这个转换。
大多数现代的文件系统支持稀疏文件,包括大多数Unix变种和NTFS。苹果的HFS+不提供稀疏文件支持,但在OS X中,虚拟文件系统层支持在任何受支持文件系统中存储稀疏文件,包括HFS+。2016年6月在WWDC宣布的苹果文件系统(APFS)支持稀疏文件。稀疏文件常被用在磁盘映像、数据库快照、日志文件和科学应用中。
稀疏文件的优势是,它分配的存储空间只在需要时使用:这样节省了磁盘空间,并且可以创建很大的文件,即使文件系统中的可用空间不足。这也减少了首次写入的时间,因为系统不会分配“跳过”的空间。如果初始分配需要写入全零到空间,这也使得系统不必写入两次。
稀疏文件的缺点包括:稀疏文件可能碎片化;文件系统的空余空间报告可能产生误导;包含稀疏文件的文件系统被填满可能产生意外效果,例如只是重写现有文件的内容时遭遇磁盘已满或超出配额错误——开发者未预料到文件可能被稀疏;使用非显式支持的计算机程序复制稀疏文件可能会复制整个内容,即未压缩的文件大小,包括未实际在磁盘上分配的零空间——也就是使稀疏文件失去稀疏属性。稀疏文件也不是被所有备份软件和应用支持。不过,VFS的实现回避了先前两个缺点。在Windows上加载稀疏的可执行文件(exe或dll)可能需要更多时间,因为文件不被映射到内存和缓存。
Windows的NTFS
如果一个文件的大部分数据是0,则这个文件被称包含了稀疏数据集。 文件压缩可以有效率地表示稀疏文件,但压缩与解压会带来时间代价。 NTFS文件系统支持稀疏文件表示,并对文件的读写操作透明。
大部分文件,在改变它的EndOfFile的时候,中间的空白会被操作系统填0,也就是说,如果用SetFilePointer和SetEndOfFile来产生一个很大的文件,那么这个文件它占用的是真正的磁盘空间,即使里面全是0,系统默认的也会在DeviceIoControl中的ControlCode里用FSCTL_SET_ZERO_DATA标记,这个标记使得那些文件空洞被0所填充。为了节省磁盘空间,必须把一个文件声明为稀疏文件,以便让系统把那些无用的0字节压缩,并释放相应的磁盘空间,这需要用DeviceIoControl将标记改为FSCTL_SET_SPARSE。