![我可以使用 dd 到它运行的驱动器吗?](https://linux22.com/image/1578779/%E6%88%91%E5%8F%AF%E4%BB%A5%E4%BD%BF%E7%94%A8%20dd%20%E5%88%B0%E5%AE%83%E8%BF%90%E8%A1%8C%E7%9A%84%E9%A9%B1%E5%8A%A8%E5%99%A8%E5%90%97%EF%BC%9F.png)
这个问题是这个问题。
假设我有一个图像文件。example.img
,存储在可以通过 ssh、rsync 和 wget(无论哪种方式都可以)访问的服务器中。
然后你有一台运行 Linux(例如 Ubuntu)的 PC。
问题是,我可以example.img
通过 ssh 或 wget 从该机器向现有机器执行 dd 操作吗?
此命令
wget http://example.com/files/example.img | dd of=/dev/sda
当 Linux 实际启动时,它可以工作吗/dev/sda
?
如果 example.img
可以启动,机器是否能够启动结果,考虑到它example.img
本身是否是由这台机器/dev/sda
之前的版本制作的?
谢谢!
答案1
目前尚不清楚你到底在问什么,所以我将研究一下各种可能性 -
如果映像文件包含带有分区的黄昏映像,而不是仅包含分区的内容,并且如果硬件足够相似(即正确的驱动程序 - 如果 Linux 的问题比 Windows 的问题少得多)并且没有许可证相关问题(即不同硬件上的 Windows 许可证密钥) - 如果您可以完全复制映像,它就会起作用。 尽管存在争议,但这种事情在虚拟机管理中很常见
下一个问题是目标驱动器 - 您不希望操作系统当前在目标驱动器上运行,因此您需要从 zUSB 启动,这是 PXE/网络启动的替代方式。从现有的活动驱动器启动可能会使其处于不一致的状态并产生隐藏的问题。
实际上复制图像并不难 - 您可以将其流式传输(例如通过 ssh)并将其写入磁盘块设备。这里有很多选项,您可以包括压缩、进度监控、速度限制等内容。一个非常简单的命令可能是:
ssh [email protected] "cat /path/to/file.img" > /dev/sdX
因为 ssh 将提示写入 stderr,所以即使需要密码,这也可以工作。当然,您可以在任一方向执行 SSH 并使用管道来控制流 - 例如,我喜欢使用 PV 来显示进度。
答案2
对正在运行的机器执行 dd 操作会导致内核崩溃,并且磁盘无法使用。
当 linux 位于 /dev/sda 时,我们正在运行 dd if=something of=/dev/sda,它会在进度的一半处挂起,然后内核本身就会崩溃。