传输块设备的内容

传输块设备的内容

出于备份的目的,我想通过 ssh 链接传输(几个)整个磁盘分区。源是块特殊设备,目标应该是常规文件。不过,常用工具似乎不适合这样做:

  • scp会抱怨not a regular file
  • tar将尝试在目标端重新创建设备 inode
  • rsyncskipping 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 共享内存,您可能需要调整此参数或您的配置以允许这样做。

警告:以这种方式传输活动分区将会出现问题。因此请确保要传输的分区未安装。

相关内容