传输块设备的内容

MvG*_*MvG 8 linux ssh backup block-device disk-image

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

  • scp 会抱怨 not a regular file
  • tar 将尝试在目标端重新创建设备 inode
  • rsyncskipping non-regular file

我目前最好的选择是nc通过端口转发,或cat在每个分区的远程端调用一次,这意味着每个分区输入一个密码,除非设置公钥。有没有更优雅的解决方案?

环境可以是任何合理的Linux live系统。目前我碰巧有一个 Debian wheezy,但它不应该具体。

fro*_*utz 10

您可以通过 SSH 进行管道传输。使用示例dd

dd bs=1M if=/dev/disk | ssh -C target dd bs=1M of=disk.img
Run Code Online (Sandbox Code Playgroud)

如果传输过程中网络连接中断,如果您知道复制了多少,则可以恢复。例如,如果您确定至少1000MiB已经传输(检查 的文件大小disk.img):

dd bs=1M skip=1000 if=/dev/disk | ssh -C target dd bs=1M seek=1000 of=disk.img
Run Code Online (Sandbox Code Playgroud)

dd 只是一个例子,只要它们与管道一起工作,它就可以与其他命令一起使用。

  • 一方面,它可以让您恢复。但我们在这里争论意见。没有用。你不喜欢 `dd`,你使用别的东西。就这么简单。至于拼写错误,你也可以混淆 `<` 和 `>`,在许多情况下,这同样是灾难性的。 (2认同)

mdp*_*dpc 5

如果您尝试通过以太网链路传输,我会安装缓冲程序(如果您的发行版中尚未存在)。它就像 dd 但更好更快。基本上它被编程为使用共享内存缓冲区进行并发读取和写入。我曾经用它来进行磁带转储,它节省了大约 10% 的传输时间。命令行是:

  buffer -i /dev/disk -m 100m | ssh -C target buffer -o disk.image -m 100m
Run Code Online (Sandbox Code Playgroud)

还有更多可用选项,默认块大小为 10K。上面分配了 100MBytes 共享内存,您可能需要调整此参数或您的配置以允许这样做。

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

  • 如果传输过程中网络连接中断如何恢复? (3认同)