挂载ext4镜像时loop设备报WRITE_ZEROES不支持的疑问
挂载ext4镜像时loop设备报WRITE_ZEROES不支持的疑问
嘿,这个问题我之前也碰到过,咱们来一步步拆解清楚:
错误原因
你在Windows用fsutil file createnew创建的root.img是稀疏文件——简单说就是文件里那些还没写入数据的部分,实际上并没有占用NTFS分区的物理空间,只是用系统占位符标记了位置。当Linux的loop设备尝试对这些空白区域执行WRITE_ZEROES(写入零块)操作时,NTFS-3G驱动对这个操作的支持有限,所以就抛出了“operation not supported”的错误。
为什么后来错误停止了
这个错误会持续到扇区数接近文件总大小,是因为loop设备在逐个处理稀疏文件里的所有占位扇区。当所有空白区域都被遍历处理完(不管是实际写入了零,还是NTFS-3G完成了占位转换),就没有需要执行WRITE_ZEROES的区域了,自然就不再报错。
要不要处理?分两种情况看
如果后续挂载正常,文件系统读写无异常:
那完全不用特意处理,这个错误只是挂载初期的临时问题,不会影响ext4镜像的正常使用。你可以正常使用这个镜像,之后再挂载应该也不会再出现这个错误了。如果想彻底避免下次挂载再出现这个错误:
可以把稀疏文件转换成“非稀疏文件”,也就是让文件的所有空间都实际占用磁盘(空白部分填充零)。在Arch里可以用这两个方法:- 更快的方式(如果NTFS-3G支持fallocate):
这里的fallocate -l 214748364800 /mnt/ArchLinux/root.img214748364800要和你当初创建文件时的大小一致。 - 更稳妥的方式(适合所有情况):
dd if=/dev/zero of=/mnt/ArchLinux/root.img bs=1M conv=notruncconv=notrunc参数很重要,它会保留文件里已有的数据,只填充空白部分。
- 更快的方式(如果NTFS-3G支持fallocate):
额外建议
在处理完之后,最好检查一下ext4文件系统的完整性,避免过程中出现意外损坏:
e2fsck -f /mnt/ArchLinux/root.img
备注:内容来源于stack exchange,提问作者nullrefexc
相关产品推荐
相关产品推荐

