我有以下案例:
Ubuntu 14.04 安装应升级到版本 22.04。硬盘驱动器需要重新分区,并且旧的 14.04 安装应完全擦除。 Ubuntu 14.04 在硬盘上使用 LVM。
是否可以配置 GRUB 将 Ubuntu 22.04 的 .iso 文件加载到 RAM 中,然后从 RAM 引导 .iso 文件?我已经能够修改 GRUB 以从硬盘驱动器(具有 Ubuntu 22.04)启动 .iso 文件,但我无法对硬盘驱动器重新分区,因为它正在使用中(即使我在 GRUB 中使用了“toram”选项加载 Linux 的入口)。
如果我使用 Ubuntu 22.04 从 USB 记忆棒启动机器,则可以对硬盘驱动器进行重新分区。但我需要某种方法从硬盘开始安装,并在没有任何 USB 记忆棒的情况下进行全新安装。我有一些计算机位于远程位置,因此我需要能够在不前往现场的情况下重新安装这些计算机。
答案1
Grub 不这样做。 Grub 所做的只是加载内核/initrd 并传递参数。然后 Ubuntu 将自身加载到 RAM 中。 Grub 不会进一步参与该过程。
toram
是 Ubuntu 的 kernel/initrd 实现的一个功能。其他实时图像可能对类似功能使用不同的名称,或者可能根本不实现它。
一般来说,此功能需要足够的内存才能工作。在内存有限的机器上,它可能会完全失败。映像必须完全适合 RAM,并且仍然有足够的可用 RAM 来实际执行任何安装工作。
您可以toram
从命令行检查是否在内核参数中:
$ grep toram /proc/cmdline
… toram …
以下输出是使用 Ubuntu 22.04 桌面 amd64 生成的。
df
启用后的输出toram
(/dev/shm as /cdrom):
$ df -h
Filesystem Size Used Avail Use% Mounted on
tmpfs 972M 1.5M 971M 1% /run
/dev/shm 3.8G 3.6G 182M 96% /cdrom
/cow 4.8G 58M 4.7G 2% /
tmpfs 4.8G 0 4.8G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 4.8G 0 4.8G 0% /tmp
tmpfs 972M 128K 972M 1% /run/user/999
df
禁用时的输出toram
(/dev/usbstick 为 /cdrom,未安装其他任何东西):
$ df -h
Filesystem 1K-blocks Used Available Use% Mounted on
tmpfs 995092 1496 993596 1% /run
/dev/usbstick 3737140 3737140 0 100% /cdrom
/cow 4975444 58760 4916684 2% /
tmpfs 4975444 0 4975444 0% /dev/shm
tmpfs 5120 0 5120 0% /run/lock
tmpfs 4975444 0 4975444 0% /tmp
tmpfs 995088 120 994968 1% /run/user/999
free
启用后的输出toram
(3.6Gi 共享,4.9Gi 可用):
$ free -h
total used free shared buff/cache available
Mem: 9.5Gi 736Mi 4.4Gi 3.6Gi 4.4Gi 4.9Gi
Swap: 0B 0B 0B
free
禁用时的输出toram
(81Mi 共享,8.5Gi 可用):
$ free -h
total used free shared buff/cache available
Mem: 9.5Gi 727Mi 4.4Gi 81Mi 4.4Gi 8.5Gi
Swap: 0B 0B 0B
根据系统的不同,这看起来会有所不同,但大致就是它应该如何工作。服务器或网络启动映像的 RAM 要求可能不同。
答案2
我找到了解决方案这里并测试了这是否有效。
简而言之,程序如下:
- 将现有的 Ubuntu 22.04 ISO 安装文件提取到临时位置。
- 将文件提取
casper/initrd
到临时位置。 - 将以下行添加到
casper/scripts/casper-bottom/05mountpoints
文件中(就在文件最后一行之前):
if grep -q '^[^ ]* /isodevice ' /proc/mounts; then
mkdir -p /root/isodevice
mount -n -o move /isodevice /root/isodevice.
fi
(我实际上跳过了 if 语句,只添加了 mkdir 和 mount 命令)
- 重新打包initrd文件并替换原来的文件。
- 重新打包 ISO 文件。
- 将修改后的 ISO 文件复制到硬盘,然后 grub 可以找到它。
- 重新启动计算机并使用
toram
grub 中的选项引导 ISO 文件。 - 打开终端窗口并键入以下命令:
sudo losetup -d /dev/loop0
sudo umount /isodevice
- 现在,您应该能够对硬盘驱动器重新分区,并在同一硬盘驱动器上安装 Ubuntu 22.04 而不是 Ubuntu 14.04(无需执行所有正常升级步骤 16.04 -> 18.04 -> 20.04,但效果不太好)。
如果没有这些步骤,Ubuntu 22.04 就无法对硬盘驱动器(从哪里启动)重新分区,GParted 会抱怨有一个文件系统正在使用中。