我尝试了以下命令,但目标上只创建了一个空文件,并且命令保持打开状态
qemu-img convert -f raw -O vmdk /dev/sda1 - | ssh foo@bar "cat > /home/foo/foobar.vmdk"
注:sshfs
不可用。
答案1
qemu-img
不幸的是,由于输出文件需要可查找,因此无法将输出写入管道
答案2
单独使用是不可能做到这一点的qemu-img
(如https://serverfault.com/a/1113484/217241),但您也可以使用libguestfs 命令附带的qemu-nbd
(网络块设备) 实用程序。在 Debian 和派生发行版中,可以在包中找到。qemu-img
nbdcopy
nbdcopy
libnbd-bin
nbdcopy -- [ qemu-nbd -f qcow2 myVM.qcow2 ] - | ssh user@otherhost cat '>' raw-image-elsewhere
相反的情况是:
ssh user@otherhost cat raw-image-elsewhere | nbdcopy -- - [ qemu-nbd -f qcow2 local.qcow2 ]
事实上是nbdkit
可以使用和的组合qemu-img
,但是 nbdkit 作者建议改用nbdcopy
with qemu-nbd
:https://rwmj.wordpress.com/2014/10/14/streaming-nbd-server/
nb 顺便说一句,如果您受到网络带宽的限制,那么您可能还需要使用标志-C
来 ssh 以压缩传输中的数据,或者通过管道zstd
或类似方式进行传输。