我有一些 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
最佳答案
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 …
我的答案里有什么吗?
– -
我明白你的回答。我只是想看看如果从接收服务器执行该命令会是什么样子,所以它必须是
rsync
,scp
或者类似的东西才能从远程服务器获取图像。
– -
1@vfclists 从接收方来看可能是
ssh user@source '<image.gz cat' | gzip -d >/dev/sda
。这假设您可以写入/dev/sda
。
– -
1我通常使用
/dev/sdXX
它作为示例。如果有人想要复制/粘贴并将其编辑为想要覆盖的正确设备名称,最好不要出现意外换行符/回车符可能覆盖可能存在的设备的情况。我猜@vfclists 确实在问题中使用了它sda
,但在我看来,这样也更好sdXX
,因为其他未来的读者可能会复制/粘贴评论。
–
|
image.tar.gz
,但如果此.tar.gz
后缀表示该图像已压缩并经过 gzip 压缩,则您tar -x
在远程端会丢失信息。但tar -x
并非设计用于管道中间;而且它对于tar
磁盘的单个图像来说毫无意义。您的第一个命令看起来非常合理,但第二个命令(带有 的命令image.tar.gz
)则不合理。–
tar
创建过这个文件。我只是养成了以前处理文件时使用 tar.gz 的习惯,但在这种情况下,图像是直接从设备创建的。–
image.tar.gz
是从某处得到的东西dd … | gzip -c
,那么你的第二个命令与第一个命令一样合理,只是文件的名称具有误导性(image.gz
会更好)。–
dd
这样做;dd
因为它很难使用,容易搞砸,而且性能通常不是最佳的。Plaincat
当然可以,但我建议pv
使用基本上是“带进度条的 cat”。–
|