我有一些 gzip 文件想要传输到远程服务器并直接提取到目标驱动器上。

它类似于这个命令

dd if=/dev/sda bs=5M conv=fsync status=progress | gzip -c -9 | ssh user@DestinationIP 'gzip -d | dd of=/dev/sda bs=5M'

来自上的这个问题。

就我而言,文件已经被压缩,因此gzip -9不需要源。

它可能更类似于:

load-some-file /drive/image.tar.gz | ssh user@DestinationIP 'gzip -d | dd of=/dev/sda bs=5M'

应该是什么命令load-some-file

像这样的命令就cat足够了吗,或者dd它本身就够了吗?

可以将输出直接dd发送到命令吗?ssh

4

  • 3
    您可以将任何文件命名为image.tar.gz,但如果此.tar.gz后缀表示该图像已压缩并经过 gzip 压缩,则您tar -x在远程端会丢失信息。但tar -x并非设计用于管道中间;而且它对于tar磁盘的单个图像来说毫无意义。您的第一个命令看起来非常合理,但第二个命令(带有 的命令image.tar.gz)则不合理。


    – 


  • 回想起来,我以前并没有tar创建过这个文件。我只是养成了以前处理文件时使用 tar.gz 的习惯,但在这种情况下,图像是直接从设备创建的。


    – 

  • 3
    如果你的image.tar.gz是从某处得到的东西dd … | gzip -c,那么你的第二个命令与第一个命令一样合理,只是文件的名称具有误导性(image.gz会更好)。


    – 

  • “像 cat 这样的命令够用吗,还是 dd 本身就够用?” – 我不建议dd这样做;dd因为它很难使用,容易搞砸,而且性能通常不是最佳的。Plaincat当然可以,但我建议pv使用基本上是“带进度条的 cat”。


    – 


最佳答案
1

应该是什么命令load-some-file

根本没有命令。使其ssh自身读取文件,即重定向其输入:

</drive/image.tar.gz ssh …

像这样的命令就cat足够了吗?

cat /drive/image.tar.gz | ssh …应该可以工作,但这是

或者dd本身就可以吗? 的输出可以直接dd发送到ssh命令吗?

原则上是的。有许多命令可以按原样输出其输入,请参阅。不过,如果您只想ssh在其 stdin 上获取文件,那么输入重定向就足够了。

12

  • 另一端的命令是怎样的?类似于rsync user@source:/image.gz | gzip -d | dd of=/dev/sda bs=5M?第一个字符之前是否还需要其他命令|


    – 

  • @vfclists 这是从哪里来的rsync?你是在问ssh …我的答案里有什么吗?


    – 

  • 我明白你的回答。我只是想看看如果从接收服务器执行该命令会是什么样子,所以它必须是rsyncscp或者类似的东西才能从远程服务器获取图像。


    – 

  • 1
    @vfclists 从接收方来看可能是ssh user@source '<image.gz cat' | gzip -d >/dev/sda。这假设您可以写入/dev/sda


    – 

  • 1
    我通常使用/dev/sdXX它作为示例。如果有人想要复制/粘贴并将其编辑为想要覆盖的正确设备名称,最好不要出现意外换行符/回车符可能覆盖可能存在的设备的情况。我猜@vfclists 确实在问题中使用了它sda,但在我看来,这样也更好sdXX,因为其他未来的读者可能会复制/粘贴评论。


    –