如果我有一个代表块设备的稀疏文件,那么如何通过网络有效地恢复该文件?理想情况下,我会使用rsync -S host:file /dev/sdb
,但rsync
不会写入块设备。我正在使用ssh host dd if=file | dd of=/dev/sdb
,但这效率不高,因为零字节将通过网络传输并写入设备。我可以使用tar -S
或cp --sparse=always
以某种方式吗?我可以在不将文件存储在本地(即使是暂时的)的情况下执行此操作吗? sshfs 可以识别稀疏文件吗?
答案1
我还没有测试过,但是有一个write-devices
rsync 补丁可以解决你的问题。您可以在以下位置找到该补丁rsync 补丁存储库。
答案2
您可以安装iSCSI 企业目标软件并从稀疏文件设置 iSCSI LUN,如下所示:
在 /etc/iet/ietd.conf 中:
Target iqn.my.iscsi.test:disk1
Lun 0 Path=/path/to/my/sparse_file,Type=fileio
然后从需要恢复的主机启动目标。由于目标将显示为本地设备(例如/dev/sdd),因此您可以dd
从该设备连接到本地设备。
答案3
您是否尝试过压缩/解压缩飞行中的数据?零批次应该压缩良好。
其实,再想一想,也很简单。在远程主机上,创建一个带有mkfifo
. scp
/dd
照常到该管道,然后cp --sparse=always
从它到实际的目标文件。
在我的安装上进行了测试,它确实在输出中生成了一个稀疏文件。谢谢你提出了一个好问题!