Ich habe versucht, eine Kickstart-Datei zu verwenden, um das Red Hat-Installationsprogramm (RHEL6.5) ohne Benutzereingriff zu führen. Es sucht korrekt nach der Kickstart-Datei in /dev/sdb/fs.cfg
, aber da der USB als erkannt wird /dev/sda
, befindet er sich tatsächlich unter /dev/sda/fs.cfg
. Ich kann das Installationsprogramm manuell auf dieses Ziel verweisen, aber der Rest der Kickstart-Datei hängt davon ab, dass die native Festplatte vorhanden ist sda
. Ich würde dies gerne tun, ohne die Kickstart-Dateien zu bearbeiten, aber das ist notwendig, ich bin bereit, es zu tun.
Gibt es eine Möglichkeit, den Kernel zu zwingen, USB als sdb
und HD als zu erkennen sda
(ich gehe davon aus, dass der Kernel für die Verwechslung verantwortlich ist, bin mir aber nicht sicher)? Es scheint sehr seltsam, dass es ein externes Laufwerk (den USB) als wählt sda
und das interne (HD) dazu zwingtsdb.
Hinweis: Mein Problem ist sehr ähnlich zu diesem , mit der Ausnahme , dass meine Kickstart - Datei auf den HD Wesen absolut abhängigsda
Dieses Problem tritt nur beim RHEL6.5-Installationsprogramm und nicht beim RHEL5.X-Installationsprogramm auf (ich habe noch keine frühere Version von RHEL6.X ausprobiert). Was ich wirklich wissen möchte, ist, warum es Änderungen zwischen den Versionen gibt.
quelle
/dev/sd[anything]/whatever
- es sei denn, ich werde etwas Neues lernen, sollte dies kein wirklicher Weg sein. Dateien befinden sich in Dateisystemen, nicht in Geräteknoten./dev/sdX
der Kernel (oder eine andere Software) automatisch einen Einhängepunkt zum Laden der Dateien auswählt , wenn ein Pfad wie manuell (oder durch eine Kickstart-Datei) während der Installation angegeben wird./dev
Referenz konzentrieren. Sie sollten jedoch in Betracht ziehen, konsistente Gerätenamen (z. B. Beschriftungen oder UUIDs) zu verwenden.Antworten:
Ok, so funktioniert der Startvorgang:
${parameters}
> Initramfs> Userspace vielleichtAuf einer Redhat-Installationsdiskette erstellt und bildet das dracut- System von Skripten initramfs, und das Anaconda- Installationssystem bildet den endgültigen Benutzerbereich.
Es ist
udev
das Gerät-Setup - wie in, benennt es die Geräte in/dev
. Dies geschieht jedoch fast immer zweimal - einmal in initramfs und erneut, wenn das Innereinit
sein Ziel-Root-Gerät gefunden hat und bereit ist, eindevfs
darauf zu mounten .So funktioniert es also:
Der Bootloader (oder die Firmware) ruft den Kernel mit einem optionalen Parametersatz und einem optionalen initramfs-Image auf. Dieser Parametersatz wird gespeichert
/proc/cmdline
und der Kernel ignoriert alle Parameter, die er nicht versteht.Das initramfs ist ein funktionierender Linux-Benutzerbereich. Ob der
/
Inhalt von einem Image entpackt wird, das ihm beim Aufruf übergeben wurde, oder ob er kompiliert wurde, spielt keine Rolle - da Kernel 2.6 immer das erste funktionierende Root-Dateisystem ist, das der Linux-Kernel bereitstellt. Ab diesem Zeitpunkt überlässt der Linux-Kernel alles dem Userspace.Normalerweise enthält das initramfs (wie es für redhats dracut gilt) nur das, was unbedingt erforderlich ist, um ein Root-Gerät zu finden und es über sich selbst zu mounten. Im Allgemeinen sind nur
busybox
die Kernelmodule enthalten, die zum Mounten Ihres Ziel-Root-Geräts erforderlich sind.Wahrscheinlich muss
udev
es das tun, alsoudev
ist es meistens enthalten - mit seinen eigenen kleinen Regeln.Wie bereits erwähnt, ist initramfs ein eigenes kleines vollständiges Linux-Root-Dateisystem. Eine vollständige könnte aussehen wie :
/bin /etc /dev /new_root /proc /sys init
. Der Inhalt dieser Verzeichnisse ist im Allgemeinen nicht sehr ungewöhnlich - es gibt fast immer ein/bin/sh
und ein/etc/fstab
.Die meisten
init
s analysieren/proc/cmdline
nach Kernel-Parametern, die sie möglicherweise interpretieren. Eine sehr häufige istroot=/dev/somedisk
oderroot=UUID=somediskUUID
oderroot=LABEL=somedisklabel
. Es sind die initramfsinit
, die dieseroot=...
Parameter interpretieren - nicht der Kernel oder dasinit
später ausgeführte Finale (obwohl das letzte andere sehr gut interpretieren kann) . Dieser Parameter wird akzeptiert und gemountet/new_root
(oder welcher Name auch immer für den Staging-Mount verwendet wird, bevor er verwendet wirdswitchroot
) . Wennudev
es in initramfs enthalten ist, entscheidet der initramfs-Regelsatz, wie der/dev/...
Eintrag dieser Zielfestplatte jetzt benannt wird - dies kann sich jedoch ändern.Wenn die initramfs
init
erfolgreich findet und montiert das/new_root
Gerät sieht es in der Regel etwas zuexec
sich zu - in der Regel/new_root/bin/init
- was auch immer so , dass Programm wird pid 1. Es normalerweise tut dies mit demswitch_root
Programm mit zur Verfügung gestelltbusybox
- die eine tut ,exec
während gleichzeitig Montage/new_root
über/
. Sein Prozess wird in den Kernel-Dokumenten folgendermaßen beschrieben :Das
init
gerade ausgeführte Root-Gerät muss jetzt sein eigenes Root-Dateisystem füllen. Er ruft seineudev
und Halterungen seine eigenedevfs
auf ,/dev
basierend auf seinen eigenen ruleset und tut den Rest. Wenn es vorbei ist, können Sie Ihren Computer verwenden.Entschuldigen Sie den Detaillierungsgrad, aber ich wollte klarstellen, warum Folgendes zutrifft:
root=/dev/sda
muss nicht derselbe sein/dev/sda
, auf den Sie eventuell zugreifen,/dev/sda
nachdem das initramfs abgeschlossen/init
ist.Ich denke, eine Möglichkeit, dies zu tun, besteht darin, eine
udev
Regel auf Ihrer Anaconda- Festplatte festzulegen - die wahrscheinlich tatsächlich ein Squashfs-Archiv ist -, die sie anweist, alle USB-Festplatten an einer anderen Stelle einzurichten. Hier gibt es ein hervorragendes Beispiel:Und es wäre sehr gut, wenn Sie auch den Rest dieses Links lesen würden. Sie sollten in der Lage sein, dies zu tun, damit Ihr USB-Festplattengerät
/dev/sda
für initramfs vorgesehen ist - Sie müssen also keine Bootloader-Konfigurationen ändern -, aber später einen Knoten für dieselbe Festplatte wie/dev/usba
für das Anaconda-Installationssystem erstellen.quelle
Rufen Sie das BIOS des Hosts auf und ändern Sie die Reihenfolge der Festplatten und Wechseldatenträger. Dadurch wird die Reihenfolge angepasst, die dem Linux-Kernel angezeigt wird.
quelle
Auf meinem glänzenden neuen, aber alten 45-Dollar-HP-G60-Laptop hatte ich das gleiche Problem. Ich habe USB von
/dev/sda
zu verschoben ,/dev/sdb
indem ich die neue SSD zuerst in die Startreihenfolge gesetzt habe. Drücken Sie dann beim Booten ESC, als würden Sie ins BIOS gehen, aber es gibt ein PreBIOS-Menü. Anstatt F10 zu drücken, um das BIOS aufzurufen, drückte ich F9 für BOOT OPTIONS. Dort können Sie dann manuell auswählen, ob Sie unabhängig von der im BIOS festgelegten BOOT ORDER von USB booten möchten. Offensichtlich habe ich mich für USB entschieden und bei der Installation wurde meine SSD als angezeigt/dev/sda
.Ich habe gesucht und gesucht und viele Leute haben ähnliche Probleme, aber niemand hat das vorgeschlagen. Viel einfacher als alles andere, was ich gefunden habe. Ich habe das ahnungslos entdeckt.
quelle
Ab RHEL6 können Sie Beschriftungen für Ihre Installationsmedien verwenden, sodass Sie auf das Laufwerk / die Festplatte mit einem eindeutigen Namen zugreifen, nicht mit dem inkonsistenten Kernel-SDX-Namen.
Wenn Sie die Dateisysteme auf Ihrem USB-Laufwerk erstellen, stellen Sie sicher, dass Sie sie mit etwas wie e2label oder den 101 anderen Möglichkeiten zum Beschriften des Dateisystems kennzeichnen.
Einmal beschriftet, können Sie unter diesem Namen auf den USB zugreifen, z. B.: Ks = hd: LABEL = Ihr Name: /path/to/fs.ks
Beachten Sie auch, dass diese Art der Benennung auch für andere Standorte verwendet werden kann. Installieren Sie Medien, Repos usw.
quelle