如何从 USB 闪存驱动器启动 Ubuntu 服务器(Dell PowerEdge R230)然后安装在 NVMe SSD 上?

如何从 USB 闪存驱动器启动 Ubuntu 服务器(Dell PowerEdge R230)然后安装在 NVMe SSD 上?

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

  1. 在计算机上启动实时 CD。插入要用于从 NVMe 驱动器启动的 USB 驱动器。

  2. 在 USB 驱动器上创建一个 FAT32 分区。确保它已启用 boot 和 esp 标志。最简单的方法是使用 gparted。

  3. 挂载 FAT32 分区。对于其余步骤,我假设它安装在 /mnt/usbboot

  4. 将 USB 启动分区添加到 fstab 中,以便自动挂载。最简单的方法是将 chroot(使用 arch-chroot,更简单)到内部驱动器,然后运行sudo genfstab -U / > /etc/fstab​​。

  5. 在内部驱动器上创建此文件:“/etc/systemd/system/boot-sync.service”

注意:您需要为此 systemd 单元安装 rsync。

  1. 将以下内容粘贴到刚刚创建的文件中:

    [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
    
  2. Chroot 进入您的内部驱动器并运行以下命令:sudo systemctl enable --now boot-sync.service

  3. 重新启动并选择刚刚创建的 USB 驱动器作为默认启动设备。


指南 2:USB 驱动器上的 Systemd-boot - 不推荐

  1. 在计算机上启动实时 CD。插入要用于从 NVMe 驱动器启动的 USB 驱动器。

  2. 在 USB 驱动器上创建一个 FAT32 分区。确保它已启用 boot 和 esp 标志。最简单的方法是使用 gparted。

  3. 挂载 FAT32 分区。对于其余步骤,我假设它安装在 /mnt/usbboot

  4. Chroot 进入你的内部驱动器并运行此命令sudo bootctl --path=/mnt/usbboot install

  5. 运行此命令(也在内部驱动器的 chroot 内)sudo bootctl update(注意:这可能不是必需的,但不会造成任何损害)

  6. 在 /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 并查找根分区来找到它。

  7. 创造/mnt/usb/loader/loader.conf

    它看起来应该是这样的:

    default ubuntu_server
    
    timeout 4
    
    editor 0
    

  1. 注意:完成其中任意一个步骤即可,不必同时完成。如果您选择手动复制文件,则每次更新内核时都需要重新复制它们

    • 不建议:手动将/boot/initramfs-linux.img/boot/vmlinuz-linux从内置驱动器启动分区复制到 USB 驱动器。每次更新内核或重建 initramfs 时都需要更新这些文件。

    • 如果您希望使用脚本而不是手动复制,请先将您的 USB 启动分区添加到 fstab,以便自动挂载。最简单的方法是将 chroot(使用 arch-chroot,更简单)到您的内部驱动器,然后运行sudo genfstab -U / > /etc/fstab​​。


注意:你需要为该 systemd 单元安装 rsync

  1. 在内部驱动器上创建此文件:“/etc/systemd/system/boot-sync.service”

  2. 将以下内容粘贴到刚刚创建的文件中:

    [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
    
  3. Chroot 进入您的内部驱动器并运行以下命令:sudo systemctl enable --now boot-sync.service

  4. 重新启动并选择刚刚创建的 USB 驱动器作为默认启动设备。

相关内容