我有几个服务器,每个服务器都使用一个 USB 盘运行。服务器基本上就是虚拟机管理程序。
我当时想做的是,以下载系统映像并将其直接解压到实时 USB 磁盘设备的形式分发二进制更新,然后重新启动。这种技术归结为dd if=newimage.img of=/dev/sda && reboot
。
但是,我尝试过,但效果不如预期。新镜像的磁盘无法启动。
由于可以在每台主机上运行一系列命令并在大多数情况下通过这种方式更新它们,所以这对我来说并不重要。但是,我想知道是否有办法在实时运行的系统上解压磁盘映像,并让它正确启动到新环境,无论它是哪种环境。例如,我可能会决定有一天用完全不同的操作系统替换那些 Linux,谁知道呢 :)
有想法或建议吗?
答案1
dd
(假设我之前的问题的答案是“是”)。主机可能在运行期间或之后写入(其认为正确的文件系统布局)USB 设备。您可以remount -o ro,remount
在执行 之前尝试在正在运行的主机的文件系统上执行dd
,但当dd
它尝试写入 /dev/sda 时,您可能会阻止其工作。您可能还需要快速而“粗暴”地重新启动(echo b > /proc/sysrq-trigger
),以便操作系统不会在关机期间尝试写入任何内容。
答案2
破坏当前正在运行的系统的文件系统听起来是个坏主意。您可以通过以只读方式重新挂载根文件系统,然后执行命令dd
,然后重置系统来使其正常工作(注意:不要使用重启脚本,因为如果您破坏了根文件系统,您不想执行关机操作,您只想重新启动系统。)