Das Linux Live-Betriebssystem bestimmt das aktuelle Bootmedium (CD/USB), das zum Booten des Kernels und des Root-FS verwendet wird, die sich auf demselben Medium befinden

Das Linux Live-Betriebssystem bestimmt das aktuelle Bootmedium (CD/USB), das zum Booten des Kernels und des Root-FS verwendet wird, die sich auf demselben Medium befinden

Gibt es eine Möglichkeit, dieaktuelles Bootmediumdient zum Booten einesLinux Live OS? In einem Live-OS-System möchte ich das aktuelle Bootmedium eindeutig bestimmen (CD/USB), das zum Booten der Festplatte verwendet wurde. Ich möchteBestimmen Sie dies auf Betriebssystemebene, nicht auf Bootloaderebene.

Aktuelles Bootmediumin meinem Fall bedeutet die Medienwo sich der Bootloader befindet, der zum Starten des Betriebssystems verwendet wurde.

Ich habe Folgendes geprüft, aber in keinem davon sind Informationen zum Dev-Pfad des aktuellen Boot-Mediums zu finden (wie z. B. /dev/sr0, das anzeigt, dass der aktuelle Boot-Pfad CD ist).

  • Überprüfen von systemdmagazinctlProtokolle.
  • ÜberprüfungdmesgProtokolle.
  • Mögliche Schnittstellen inudevUndAbonnierenDienstprogramm.
  • Busybox rdevwie vorgeschlagen inhttp://free-electrons.com/blog/find-root-device/. Das Verfahren zum Vergleichen von stat / mit dem der Haupt-:Nebengerätenummer von /dev/sr0 scheint nicht übereinzustimmen.

Ich habe auch in GRUB2 nachgesehen,http://git.savannah.gnu.org/cgit/grub.git/tree/grub-core/kern/i386/pc/init.cwobei die GRUB-UmgebungsvariablenWurzelUndPräfixgesetzt sind. Wenn ich beispielsweise in einer GRUB2-Shell, die von einer CD gebootet wurde,echo $wurzel, Ich bekommehd31. Wie kann ich dies nun einem Linux-Blockgerätepfad zuordnen, wie/Entwickler/sr0für CD oder einige/dev/sdb1für einen USB-Stick? Ich habe auch nachgesehenLinux: Den Gerätenamen der aktuellen Bootdiskette abrufenUndhttps://stackoverflow.com/questions/6787819/how-to-determine-the-booting-deviceaber beides scheint nicht zu helfen.

Im Idealfall würde ichvermeiden Sie die Montagejede CD/USB (/dev/sr0 oder /dev/sdb1 und dergleichen), um manuell zu prüfen, ob Initrd- und Kerneldateien vorhanden sind. Diese Methode ist nicht narrensicher. Gibt es eine einfache Möglichkeit, dies zu tun?

Antwort1

Ich habe Folgendes gefunden, bin mir aber nicht sicher, was es einstellen würde. Vielleicht der Kernel/Grub, in diesem Fall sollte es eingestellt sein.

„Es könnte auch die Geräteknotenreferenz für den Einhängepunkt eines anderen LiveOS-Dateisystems sein,einschließlich des aktuell laufenden (z. B. eine gebootete Live-CD/DVD/USB, wobei /run/initramfs/livedev auf das gebootete LiveOS-Gerät verweist)."

Aus https://www.mankier.com/8/livecd-iso-to-disk

Antwort2

Dem Linux-Kernel selbst ist es egal, woher er geladen wird – und er betrachtet dies als Aufgabe des Bootloaders. Idealerweise würde der Bootloader diese Informationen irgendwo aufzeichnen, wo der Kernel sie später abrufen kann – was beim U-Boot-Bootloader trivial ist, bei x86 BIOS/UEFI jedoch nicht so sehr.

Daher glaube ich nicht, dass Sie diese Informationen aus Linux selbst erhalten können, obwohl Linux wahrscheinlich meistens von dort geladen wurde, wo sich das Root-Dateisystem befindet. Es ist zu 100 % möglich, den Kernel von einem Ort zu laden und das Root-Dateisystem von einem anderen Ort zu beziehen, was auf eingebetteten Plattformen üblich ist.

Es gibt also einige Dinge, die Sie ausprobieren können.

  • cat /proc/cmdlinewird Ihnen wahrscheinlich sagen, wo das Root-Dateisystem geladen wurde - der root=Kernel-Befehlszeilenparameter sagt Ihnen, wo der Kernel beim Laden angewiesen wurde, das Root-Dateisystem zu finden.

  • Sie können auch einen mountBefehl ausgeben, das Dateisystem suchen /und sich sein Gerät ansehen.

verwandte Informationen