场景。我有一个过时的 Ubuntu 安装,我正准备将其封存,我想使用它安装的驱动器来安装另一个发行版的全新副本。同时,我有大量关于旧 Ubuntu 的数据和配置信息想要保留。此外,这是我的主要盒子之一,我用它来发送电子邮件,并在上面运行重要的 cron 作业:我使用它主要是通过 ssh 会话使用命令行。所以我不想就这样草率地将它脱机。
任务。将操作系统传输到可启动的 USB 驱动器并从那里运行,直到在当前硬盘上重新安装新发行版完成并可运行。换句话说,我已将旧的 Ubuntu 安装从该 USB 驱动器上运行,我可以依靠它,同时根据需要设置和重新配置新发行版。USB 上的旧 Ubuntu 还可用作重要文件和数据的备份,一旦新操作系统运行,我就会将其传输到新操作系统。
问题。我有一个容量合适的 USB 闪存驱动器。我计划将其格式化为 ext2,尽管我也在考虑使用具有 ext2 启动分区的 f2fs。对于在这个临时安装中使用哪种文件系统更好,您有什么想法吗?此外,USB 驱动器是 USB2,我意识到操作系统可能会因此运行得有点慢。不过,在 2-7 天的时间内,当我设置和配置新的操作系统时,我认为操作系统的延迟是可以容忍的:对此有什么想法吗?最后,我打算运行类似的命令,rsync -aHAXx / /usb/mnt/point
以便将数据从正在运行的 Ubuntu 复制到闪存驱动器:有没有其他建议可以将过时的 Ubuntu 操作系统复制到 USB 闪存驱动器?
答案1
我建议你:
- 备份所有数据。
- 对你的 USB 闪存盘进行分区:
- 1 个 fat32 分区包含新的可启动 ubuntu 系统(例如使用 Unetbootin)。
- 1 个 ext4 分区包含旧 ubuntu 系统的映像。
- 启动您的 USB 闪存驱动器。
- 安装新系统。
- 挂载 & Chroot 映像以使用您的旧系统。
答案2
我按照原计划行事,而且我不得不说效果很好。对于像我这样的情况,安装的操作系统占用空间相对较小(即比廉价的 USB 驱动器小),并且当前安装操作系统的硬盘驱动器是将系统迁移到新操作系统的目标驱动器,这种迁移方法应该非常有效。它为您提供当前操作系统的工作副本,可随时启动,以及旧操作系统下所有文件和文件夹的副本,迁移完成后可作为数据分区访问。只需获取所需大小的 USB 驱动器(我实际上使用 32GB 驱动器),将其格式化为 ext2,使其可使用 syslinux 启动,将所有数据从旧操作系统(实际上仍在运行)复制到 USB 驱动器,最后使用 USB 驱动器重新启动系统。下面是更详细的步骤(针对旧版 BIOS、非 uefi 系统的说明)。
所需内容:合适大小的 USB 驱动器、安装了 syslinux 的系统,以及从即将被替换的操作系统运行的 rsync 实用程序
获取所需大小的 USB 驱动器,将其插入系统,创建一个分区,将其格式化为 ext2,然后为该分区设置启动标志(我在最后 3 个步骤中使用了 gparted)。
使用 syslinux 使驱动器可启动:从安装了 syslinux 的系统中运行
dd bs=440 count=1 if=/usr/lib/syslinux/bios/mbr.bin of=/dev/sdx
(“x”被插入的 USB 驱动器的驱动器号替换)。使用命令挂载驱动器并从安装 syslinux 的系统复制 syslinux 所需的文件
cp /usr/lib/syslinux/bios/*.c32 /syslinux-boot/syslinux/
(这些文件最终属于目录 /boot/syslinux,但由于该目录可能会在步骤 4 中被覆盖,因此我们在此阶段暂时将 /boot 重命名为 /syslinux-boot)使用命令将所有文件从正在运行的旧操作系统复制到 USB 驱动器
rsync -aHAXx / /mount/point-of/USB-drive
(/ 是旧操作系统的根目录,您从中运行 rsync,而 /mount/point-of/USB-drive 是您安装 USB 驱动器的任何点)。此过程可能需要很长时间:在我的系统上,使用 USB2.0 端口,需要 12 个小时以上;所以请耐心等待。复制完成后,将位于 USB 驱动器上的 /syslinux-boot 目录中的 syslinux 目录移动到 USB 驱动器上的 /boot 目录中。
在 USB 驱动器上的 /boot/syslinux 目录中编辑或创建 syslinux.cfg 文件。这可能有点棘手,因为您需要知道启动 USB 驱动器时要使用的内核和 initramfs 的确切名称和位置。您还需要规定 USB 驱动器上根文件系统的位置,因为它将由您的计算机的 BIOS 看到。我的 syslinux.cfg 文件直接从 Arch wiki 中获取,只需进行一些小编辑即可使其适合我的系统。它看起来像这样:
提示 1
超时 50
默认旧操作系统标签 旧操作系统
LINUX ../vmlinuz-3.2.0-75 APPEND root=/dev/sdc1 rw INITRD ../initramfs-linux.img
(/dev/sdc1 是我的系统上 USB 驱动器的位置)
- 重新启动计算机,在 BIOS 中选择新复制的 USB 驱动器作为启动介质,它应该会像往常一样启动。现在您可以停止使用当前硬盘驱动器并将新操作系统安装到其中,并在安装和启动新操作系统后从旧安装中复制所需的数据。
后记:
最初安装在硬盘上的操作系统可以在 USB 驱动器上运行多长时间?我不知道。我认为应该是一个相对较短的时间(也许几天?),因为如果从闪存介质运行,则需要特殊配置以最大限度地减少读/写周期。我的计划是从 USB 运行旧系统的时间不超过大约一两周。
使驱动器可启动可能可以通过 GRUB 实现。我更喜欢 syslinux 而不是 GRUB,所以我并没有真正研究过这种方法。
不确定 vfat 文件系统是否可以用于这样的方案。我想过使用 f2fs,我发现它对 USB 项目很有吸引力。不过,我上次检查时发现,f2fs 分区无法启动;因此,当前解决方案的这种变体可能需要在 USB 驱动器上放置 2 个分区——一个用于内核、initramfs 和启动文件的小型 ext2 /boot 分区,然后是格式化为 f2fs 的主数据分区。此外,还需要对 syslinux.cfg 进行额外编辑
如果运行旧操作系统的可启动 USB 驱动器有可能在其他计算机上使用,则最好在 syslinux.cfg 文件中使用驱动器的 UUID,而不是像我使用的那样使用设备路径。命令 blkid 将提供执行此操作所需的信息。
来源:Arch wiki(主要是https://wiki.archlinux.org/index.php/syslinux)