tl;dr - 如何从 USB 闪存驱动器启动 Ubuntu 服务器安装?
我正在尝试在不允许从 NVMe 驱动器启动的服务器上启动 Ubuntu Server 18.04 安装。由于驱动器在启动后可见(例如,在启动到 Live CD 后),我的想法是通过从我一直插入的 USB 闪存驱动器链式加载操作系统来使其工作。
我在网上搜索了有关如何执行此操作的指南,但找到的所有内容都处于概念层面。我正在寻找可以提供文档链接或分步指南的人。
规格:
- 戴尔 Poweredge R230
- Startech x4 PCI Express 转 M.2 PCIe SSD 适配器卡
- 三星 970 EVO NVMe (M.2) 250GB
- 金士顿 DataTraveler SE9 16GB
答案1
我有一个 USB 驱动器,用于从笔记本电脑启动,但内置硬盘驱动器偶尔会出现问题。有时 BIOS 无法检测到它,但启动后总会检测到它。
如果您在内置驱动器上安装了 systemd-boot,请按照第一个指南操作。如果没有,请跳到第二种方法。在内置驱动器上安装 systemd-boot 是推荐的方法
指南 1:内置驱动器上的 Systemd-boot
在计算机上启动实时 CD。插入要用于从 NVMe 驱动器启动的 USB 驱动器。
在 USB 驱动器上创建一个 FAT32 分区。确保它已启用 boot 和 esp 标志。最简单的方法是使用 gparted。
挂载 FAT32 分区。对于其余步骤,我假设它安装在 /mnt/usbboot
将 USB 启动分区添加到 fstab 中,以便自动挂载。最简单的方法是将 chroot(使用 arch-chroot,更简单)到内部驱动器,然后运行
sudo genfstab -U / > /etc/fstab
。在内部驱动器上创建此文件:“/etc/systemd/system/boot-sync.service”
注意:您需要为此 systemd 单元安装 rsync。
将以下内容粘贴到刚刚创建的文件中:
[Unit] Description="Sync boot files from internal drive to usb drive" RequiresMountsFor=/mnt/usbboot [Service] Type=oneshot ExecStart=/bin/bash -c "rsync -rlgopuv /boot/*.img /mnt/usbboot/" ExecStart=/bin/rsync -rlgopuv /boot/vmlinuz-linux /mnt/usbboot/ ExecStart=/bin/rsync -rlgopuv /boot/EFI /mnt/usbboot/ ExecStart=/bin/rsync -rlgopuv /boot/loader /mnt/usbboot/ [Install] WantedBy=multi-user.target
Chroot 进入您的内部驱动器并运行以下命令:
sudo systemctl enable --now boot-sync.service
重新启动并选择刚刚创建的 USB 驱动器作为默认启动设备。
指南 2:USB 驱动器上的 Systemd-boot - 不推荐
在计算机上启动实时 CD。插入要用于从 NVMe 驱动器启动的 USB 驱动器。
在 USB 驱动器上创建一个 FAT32 分区。确保它已启用 boot 和 esp 标志。最简单的方法是使用 gparted。
挂载 FAT32 分区。对于其余步骤,我假设它安装在 /mnt/usbboot
Chroot 进入你的内部驱动器并运行此命令
sudo bootctl --path=/mnt/usbboot install
运行此命令(也在内部驱动器的 chroot 内)
sudo bootctl update
(注意:这可能不是必需的,但不会造成任何损害)在 /mnt/usb/loader/entries/ubuntu_server.conf 为您的 NVMe 驱动器创建一个条目
它看起来应该是这样的:
title Ubuntu Server 18.04 linux /vmlinuz-linux initrd /initramfs-linux.img options root=PARTUUID=XXXX rw
代替XXX使用 NVMe 驱动器根分区的 PARTUUID。可以通过运行 blkid 并查找根分区来找到它。
创造
/mnt/usb/loader/loader.conf
它看起来应该是这样的:
default ubuntu_server timeout 4 editor 0
注意:完成其中任意一个步骤即可,不必同时完成。如果您选择手动复制文件,则每次更新内核时都需要重新复制它们
不建议:手动将
/boot/initramfs-linux.img
和/boot/vmlinuz-linux
从内置驱动器启动分区复制到 USB 驱动器。每次更新内核或重建 initramfs 时都需要更新这些文件。如果您希望使用脚本而不是手动复制,请先将您的 USB 启动分区添加到 fstab,以便自动挂载。最简单的方法是将 chroot(使用 arch-chroot,更简单)到您的内部驱动器,然后运行
sudo genfstab -U / > /etc/fstab
。
注意:你需要为该 systemd 单元安装 rsync
在内部驱动器上创建此文件:“/etc/systemd/system/boot-sync.service”
将以下内容粘贴到刚刚创建的文件中:
[Unit] Description="Sync boot files from internal drive to usb drive" RequiresMountsFor=/mnt/usbboot [Service] Type=oneshot ExecStart=/bin/bash -c "rsync -rlgopuv /boot/*.img /mnt/usbboot/" ExecStart=/bin/rsync -rlgopuv /boot/vmlinuz-linux /mnt/usbboot/ [Install] WantedBy=multi-user.target
Chroot 进入您的内部驱动器并运行以下命令:
sudo systemctl enable --now boot-sync.service
重新启动并选择刚刚创建的 USB 驱动器作为默认启动设备。