Starten Sie NVME SSD von einem USB-Stick

621
megahertz

tl; dr - Wie bootet man eine Ubuntu Server-Installation von einem USB-Stick?

Ich versuche, eine Ubuntu Server 18.04 LTS-Installation auf einem Server zu starten, der das Starten von einem NVMe-Laufwerk nicht zulässt. Da das Laufwerk nach dem Booten sichtbar ist (nach dem Booten einer Live-CD zum Beispiel), bestand mein Gedanke darin, das Betriebssystem durch Verketten des Betriebssystems von einer USB-Festplatte / einem USB-Stick aus zu starten, die ich ständig angeschlossen habe.

Ich habe im Internet nach einem Leitfaden gesucht, wie das geht, aber alles, was ich gefunden habe, ist auf einer sehr konzeptionellen Ebene. Ich suche jemanden, der Links zu Dokumentation oder Schritt-für-Schritt-Anleitungen bereitstellt.

Hardwarespezifikationen (falls erforderlich):

Dell Poweredge R230 Startech x4 PCI Express zu M.2 PCIe SSD-Adapterkarte Samsung 970 EVO NVMe (M.2) 250 GB Kingston DataTraveler SE9 16 GB

0

1 Antwort auf die Frage

-1
Layne Bernardo

Ich habe ein USB-Laufwerk, das ich zum Starten von meinem Laptop verwende, was gelegentlich Probleme mit der internen Festplatte hat. Manchmal wird es nicht im BIOS erkannt, aber es wird immer erkannt, wenn es bereits gestartet ist.

Wenn Sie systemd-boot auf Ihrem internen Laufwerk installiert haben, befolgen Sie die erste Anleitung. Wenn nicht, fahren Sie mit der zweiten Methode fort. Die Installation von systemd-boot auf Ihrem internen Laufwerk ist die empfohlene Methode

Anleitung 1: Systemd-Boot auf dem internen Laufwerk

  1. Starten Sie eine Live-CD auf dem Computer. Schließen Sie das USB-Laufwerk an, das Sie zum Booten vom NVMe-Laufwerk verwenden.

  2. Erstellen Sie eine FAT32-Partition auf dem USB-Laufwerk. Stellen Sie sicher, dass die Boot- und die Esp-Flags aktiviert sind. Am einfachsten geht das mit gparted.

  3. Mounten Sie die FAT32-Partition. Für den Rest der Schritte gehe ich davon aus, dass es unter / mnt / usbboot eingehängt ist

  4. Fügen Sie der Fstab Ihre USB-Startpartition hinzu, damit sie automatisch angehängt wird. Der einfachste Weg, dies zu tun, besteht darin, chroot (verwenden Sie Arch-chroot, es ist einfacher) in Ihr internes Laufwerk und dann auszuführen sudo genfstab -U / > /etc/fstab.

  5. Erstellen Sie diese Datei auf dem internen Laufwerk: `/etc/systemd/system/boot-sync.service '

    Hinweis: Für diese systemd-Einheit muss rsync installiert sein.

  6. Fügen Sie Folgendes in die gerade erstellte Datei ein:

[Einheit]

Description = "Bootdateien vom internen Laufwerk zum USB-Laufwerk synchronisieren"

RequiresMountsFor = / mnt / usbboot

[Bedienung]

Typ = Einschuss

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 /

[Installieren] WantedBy = multi-user.target

  1. Chroot in dein internes Laufwerk und führe folgenden Befehl aus: sudo systemctl enable --now boot-sync.service

  2. Starten Sie neu und wählen Sie das soeben erstellte USB-Laufwerk als Standardstartgerät aus.


Anleitung 2: Systemd-Boot auf dem USB-Laufwerk - Nicht empfohlen

  1. Starten Sie eine Live-CD auf dem Computer. Schließen Sie das USB-Laufwerk an, das Sie zum Booten vom NVMe-Laufwerk verwenden.

  2. Erstellen Sie eine FAT32-Partition auf dem USB-Laufwerk. Stellen Sie sicher, dass die Boot- und die Esp-Flags aktiviert sind. Am einfachsten geht das mit gparted.

  3. Mounten Sie die FAT32-Partition. Für den Rest der Schritte gehe ich davon aus, dass es unter / mnt / usbboot eingehängt ist

  4. Gehen Sie in Ihr internes Laufwerk und führen Sie diesen Befehl aus sudo bootctl --path=/mnt/usbboot install

  5. Führen Sie diesen Befehl aus (auch innerhalb der chroot auf Ihrem internen Laufwerk) sudo bootctl update(HINWEIS: Dies ist möglicherweise nicht erforderlich, aber es tut nicht weh)

  6. Erstellen Sie einen Eintrag für Ihre NVMe-Festplatte unter /mnt/usb/loader/entries/ubuntu_server.conf

Es sollte ungefähr so ​​aussehen:

title Ubuntu Server 18.04 linux /vmlinuz-linux initrd /initramfs-linux.img options root=PARTUUID=XXXX rw 

Ersetzen Sie XXXX durch die PARTUUID für die Root-Partition Ihres NVMe-Laufwerks. Dies kann gefunden werden, indem Sie blkid ausführen und nach Ihrer Root-Partition suchen.

  1. Erstellen Sie /mnt/usb/loader/loader.conf

Es sollte ungefähr so ​​aussehen:

default ubuntu_server  timeout 4  editor 0 

HINWEIS: Führen Sie entweder Schritt 8A oder Schritt 8B aus. Wenn Sie sich dafür entscheiden, die Dateien manuell zu kopieren, müssen sie bei jeder Aktualisierung des Kernels erneut kopiert werden


8A (nicht empfohlen). Kopieren Sie manuell /boot/initramfs-linux.imgund /boot/vmlinuz-linuxvon Ihrer internen Laufwerk - Boot - Partition über zu dem USB - Laufwerk. Diese Dateien müssen jedes Mal aktualisiert werden, wenn Sie Ihren Kernel aktualisieren oder Ihre initramfs neu erstellen.


8B. Wenn Sie das Skript anstelle des manuellen Kopierens verwenden möchten, fügen Sie zunächst die USB-Boot-Partition zur fstab hinzu, damit sie automatisch angehängt wird. Der einfachste Weg, dies zu tun, besteht darin, chroot (verwenden Sie Arch-chroot, es ist einfacher) in Ihr internes Laufwerk und dann auszuführen sudo genfstab -U / > /etc/fstab.


Hinweis: Für diese systemd-Einheit muss rsync installiert sein

  1. Erstellen Sie diese Datei auf dem internen Laufwerk: `/etc/systemd/system/boot-sync.service '

  2. Fügen Sie Folgendes in die gerade erstellte Datei ein:

[Einheit]

Description = "Bootdateien vom internen Laufwerk zum USB-Laufwerk synchronisieren"

RequiresMountsFor = / mnt / usbboot

[Bedienung]

Typ = Einschuss

ExecStart = / bin / bash -c "rsync -rlgopuv /boot/*.img / mnt / usbboot /"

ExecStart = / bin / rsync -rlgopuv / boot / vmlinuz-linux / mnt / usbboot /

[Installieren] WantedBy = multi-user.target

  1. Chroot in dein internes Laufwerk und führe folgenden Befehl aus: sudo systemctl enable --now boot-sync.service

  2. Starten Sie neu und wählen Sie das soeben erstellte USB-Laufwerk als Standardstartgerät aus.

Was machen die bootctl-Befehle? Der Mensch impliziert, dass es etwas mit systemd und EFI zu tun hat. Sind sie erforderlich? Xen2050 vor 5 Jahren 0
Von https://wiki.archlinux.org/index.php/systemd-boot#Installing_the_EFI_boot_manager - "[bootctl install] kopiert den systemd-boot-Bootloader auf die EFI-Partition: auf einem x64-Architektursystem die beiden identischen Binärdateien. Esp / EFI / systemd / systemd-bootx64.efi und esp / EFI / BOOT / BOOTX64.EFI werden zum ESP übertragen und setzen systemd-boot als Standard-EFI-Anwendung (Standardstarteintrag), die vom EFI-Boot-Manager geladen wird. " Grundsätzlich kopiert es die erforderlichen EFI-Stubs und Dateien, die von der UEFI-Implementierung auf Ihrem Motherboard ausgeführt werden. Es ist für diese Methode erforderlich. Layne Bernardo vor 5 Jahren 0
Zunächst einmal vielen Dank für eine schnelle Antwort und dafür, dass Sie sich die Zeit genommen haben, um zu helfen! Ich kann nicht scheinen, dass dies funktioniert. Ich erhalte keine besonderen Fehlermeldungen, außer ich musste den Pfad in Schritt 5 angeben (sudo bootctl update --path = / mnt / sdb1). Beim Booten erhalte ich die folgende Fehlermeldung: "Fehler beim Laden von \ vmlinuz-linux: Nicht gefunden Fehler beim Ausführen von Ubuntu Server 18.04 (\ vmlinuz-linux): Nicht gefunden" megahertz vor 5 Jahren 0
Oh, das stimmt, ich habe diesen Teil vergessen. Ich habe eine hackhafte Lösung. Sie können das Problem beheben, indem Sie `initramfs-linux.img` und` vmlinuz-linux` von Ihrer Boot-Partition für interne Laufwerke auf das USB-Laufwerk kopieren. Sie müssen diese Dateien jedes Mal kopieren, wenn Sie den Linux-Kernel aktualisieren. Ich habe eine systemd-Einheit, die das beim Booten ausführt und die Antwort aktualisiert. Layne Bernardo vor 5 Jahren 0
Das Tutorial wurde aktualisiert - einschließlich einer viel einfacheren Methode, die ich vergessen hatte. Welche Methode kann verwendet werden, wenn systemd-boot bereits auf dem internen Laufwerk installiert ist. Ich entschuldige mich dafür, ich habe mein USB-Startlaufwerk vor über einem Jahr eingerichtet und habe mich seitdem nicht mehr damit beschäftigt. Beachten Sie, dass ich den Mount-Speicherort von / mnt / usb in / mnt / usbboot geändert habe, da er mit der systemd-Einheit weniger verwirrend ist. Prost! Layne Bernardo vor 5 Jahren 0
Entschuldigung, ich habe das neue Tutorial ausprobiert (einschließlich der Ausführung unter Arch Linux, die live von einem anderen USB-Stick ausgeführt wird, um Zugriff auf Arch-chroot und Genfstab zu erhalten). Vielleicht bin ich einfach nicht für solche fortgeschrittenen Operationen unter Linux gedacht. Ich fange an zu denken, ich sollte einfach eine normale SATA-SSD mit dem CD / DVD-Anschluss des Servers anschließen. Ich dachte, dies wäre so einfach wie dem Server zu sagen, dass er / dev / nvme0n1p1 vom USB-Stick booten soll. Trotzdem vielen Dank für die ganze Zeit, die Sie investiert haben! megahertz vor 5 Jahren 0
Entschuldige diesen Mann! Es ist ehrlich gesagt einfacher, das BIOS-Boot zu verwenden und GRUB einfach zu laden, aber ich habe das BIOS-Boot schon so lange nicht mehr verwendet, an das ich mich nicht wirklich erinnern kann. Vielleicht kann jemand mit mehr Wissen als ich ein besseres Tutorial schreiben. Ich weiß, dass meine Methode funktioniert, weil ich jeden Tag mein USB-Startlaufwerk benutze, aber es ist nicht die einfachste und meine geschriebene Methode ist nicht gut formatiert. Sie könnten in den Arch-Foren nachfragen, die Arch-Community ist äußerst sachkundig und hilfreich. Layne Bernardo vor 5 Jahren 0