出于备份的目的,我想通过 ssh 链接传输(几个)整个磁盘分区。源是块特殊设备,目标应该是常规文件。不过,常用工具似乎不适合这样做:
scp
会抱怨not a regular file
tar
将尝试在目标端重新创建设备 inodersync
说skipping non-regular file
目前我最好的选择是nc
通过端口转发,或者每个cat
分区在远程端进行一次调用,这意味着每个分区一次密码输入,除非设置公钥。有更优雅的解决方案吗?
环境可以是任何合理的 Linux live 系统。目前我碰巧有一个 Debian 喘息,但它不应该是也具体到这一点。
答案1
你可以通过 SSH 进行管道传输。使用示例dd
:
dd bs=1M if=/dev/disk | ssh -C target dd bs=1M of=disk.img
如果传输期间网络连接中断,如果您知道复制了多少内容,则可以恢复。例如,如果您确定至少1000MiB
已经传输(检查 的文件大小disk.img
):
dd bs=1M skip=1000 if=/dev/disk | ssh -C target dd bs=1M seek=1000 of=disk.img
dd
这只是一个例子,它与其他命令一样工作,只要它们与管道一起使用。
答案2
如果您尝试通过以太网链路传输,我会安装缓冲程序(如果您的发行版中尚未存在)。它就像 dd 但更好更快。基本上它被编程为使用共享内存缓冲区进行并发读取和写入。我曾经用它来进行磁带转储,它节省了大约 10% 的传输时间。命令行是:
buffer -i /dev/disk -m 100m | ssh -C target buffer -o disk.image -m 100m
还有更多可用选项,默认块大小为 10K。上面分配了 100MBytes 共享内存,您可能需要调整此参数或您的配置以允许这样做。
警告:以这种方式传输活动分区将会出现问题。因此请确保要传输的分区未安装。