我试图在嵌入式Linux框中使用`dd’命令在VFAT分区上创建一个大的空文件:
dd if=/dev/zero of=/mnt/flash/file bs=1M count=1 seek=1023
目的是跳过前1023个块并在文件末尾只写一个块,这在原生EXT3分区上应该非常快,而且确实如此.但是,此操作在VFAT分区上变得非常慢,并伴有以下消息:
lowmem_shrink:: nr_to_scan=128, gfp_mask=d0, other_free=6971, min_adj=16
// ... more `lowmem_shrink' messages
另一种尝试是在VFAT分区上fopen()一个文件然后fseek()到最后写入数据,这也被证明是慢的,以及来自内核的相同消息.
基本上,有没有一种快速的方法在VFAT分区上创建文件(不遍历前1023块)?
谢谢.
解决方法:
为什么VFAT“跳过”写得这么慢?
除非在这方面使VFAT文件系统驱动程序“作弊”,否则在FAT类型文件系统上创建大文件总是需要很长时间.符合FAT规范的驱动程序必须分配所有数据块并对它们进行零初始化,即使您“跳过”写入也是如此.这是因为“群集链”FAT确实如此.
这种行为的原因是FAT无法支持:
>文件中的UN * X风格“漏洞”(又名“稀疏文件”)
这就是你在ext3上用你的测试用例创建的 – 一个文件没有分配给它的第一个1GB-1MB的数据块,另一个是1MB的实际提交的,零初始化的块).
> NTFS样式的“有效数据长度”信息.
在NTFS上,文件可以分配给它的未初始化块,但文件的元数据将保留两个大小字段 – 一个用于文件的总大小,另一个用于实际写入它的字节数(从文件