我创建了一个稀疏文件
truncate -s 4T image.img
在通过 NFS 安装的 ext4 文件系统上。以下测试表明系统在识别稀疏文件方面存在问题:
cp --sparse=always /mnt/data_extension/a.img /tmp/a.img # where a.img is created the same way image.img is
rsync --sparse /mnt/data_extension/a.img /tmp/a.img
花费很长时间,而且我从不让它完成,因为该命令花费超过一秒钟的时间表明稀疏文件无法被识别,并且复制/移动孔会消耗 I/O,但事实并非如此。
tar --sparse -c -v -f /tmp/a.tar /mnt/data_extension/a.img
立即返回并生成一个 tar,如果 a.img 为空,则可以解压该 tar,如果我在里面写入某些内容(例如用创建一个伪 btrfs 文件系统sudo mkfs.btrfs /mnt/data_extension/a.img
),它就会停止工作,即像上面的命令一样需要很长时间。
一切都在本地目标 ext4 文件系统上运行良好,即复制和移动演示图像a.img
只需 1 秒或更短的时间。
当我将上述命令应用到实际图像时image.img
,watch du -h /local/image.img
0 的大小从未更新,但它应该在写入第一个字节后更新。
安装信息/mnt/data_extension
:
$ mount | grep /mnt/data_extension
192.168.178.76:/volume1/data_extension on /mnt/data_extension type nfs (rw,addr=192.168.178.76)
如何image.img
从 NFS 挂载移动/复制到本地文件系统,而不需要读取 4TB?!
编辑:指定sparse-version=1.0
使tar
客户端工作,但不通过 NFS 工作(cifs
我尝试过,但行为相同)。这至少允许在服务器上对稀疏文件进行 tar 处理,并以客户端上一次不必要的 untar 操作为代价传输结果。
答案1
创建是通过支持的,将在 4.2 版中添加SEEK_SET
对的支持(目前正在开发中)[fallocate
http://www.spinics.net/lists/linux-nfs/msg44500.html]