USB auf / dev / sda anstelle von / dev / sdb eingestellt

7

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 sdbund 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 sdaund 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.

Skamazin
quelle
2
Es ist nicht der Kernel, der durcheinander gebracht wird, sondern derjenige, der die Kickstart-Datei geschrieben hat. Sie können dieses Problem jedoch wahrscheinlich vermeiden, indem Sie ohne angeschlossenen USB-Stick booten. Nachdem das System
hochgefahren
Übrigens, ich weiß nicht, wie Sie dazu kommen /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.
Goldlöckchen
Ich dachte darüber nach, war mir aber über das Timing nicht sicher. Ich denke, ich sollte einfach immer wieder andere Zeitintervalle ausprobieren, bis ich einen erfolgreichen Installationsstart mit USB als SDB erhalte.
Skamazin
Ich bin mir ziemlich sicher, dass /dev/sdXder 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.
Skamazin
1
@goldilocks hat hier die einzig gültige Lösung, wenn Sie sich wirklich auf die Verwendung der /devReferenz konzentrieren. Sie sollten jedoch in Betracht ziehen, konsistente Gerätenamen (z. B. Beschriftungen oder UUIDs) zu verwenden.
HalosGhost

Antworten:

5

Ok, so funktioniert der Startvorgang:

  • Firmware> Bootloader vielleicht > Kernel ${parameters}> Initramfs> Userspace vielleicht

Auf einer Redhat-Installationsdiskette erstellt und bildet das dracut- System von Skripten initramfs, und das Anaconda- Installationssystem bildet den endgültigen Benutzerbereich.

Es ist udevdas 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 Innere initsein Ziel-Root-Gerät gefunden hat und bereit ist, ein devfsdarauf 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/cmdlineund 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 busyboxdie Kernelmodule enthalten, die zum Mounten Ihres Ziel-Root-Geräts erforderlich sind.

    • Wahrscheinlich muss udeves das tun, also udevist 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/shund ein /etc/fstab.

    • Die meisten inits analysieren /proc/cmdlinenach Kernel-Parametern, die sie möglicherweise interpretieren. Eine sehr häufige ist root=/dev/somediskoder root=UUID=somediskUUIDoder root=LABEL=somedisklabel. Es sind die initramfs init, die diese root=...Parameter interpretieren - nicht der Kernel oder das initspä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 wird switchroot) . Wenn udeves 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 initerfolgreich findet und montiert das /new_rootGerät sieht es in der Regel etwas zu execsich zu - in der Regel /new_root/bin/init- was auch immer so , dass Programm wird pid 1. Es normalerweise tut dies mit dem switch_rootProgramm mit zur Verfügung gestellt busybox- die eine tut , execwährend gleichzeitig Montage /new_root über / . Sein Prozess wird in den Kernel-Dokumenten folgendermaßen beschrieben :

    Aber initramfs ist rootfs: Sie können weder pivot_rootrootfs noch umountes. Löschen Sie stattdessen alles aus rootfs, um den Speicherplatz freizugeben ( find -xdev / -exec rm '{}' ';') , überlagern Sie rootfs mit dem neuen root ( cd /newmount; mount --move . /; chroot .) , hängen Sie es stdin/stdout/stderran das neue /dev/consoleund execdas neue an init.

  • Das initgerade ausgeführte Root-Gerät muss jetzt sein eigenes Root-Dateisystem füllen. Er ruft seine udevund Halterungen seine eigene devfsauf , /devbasierend 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:

  • Jeder Kernel-Parameter, den Sie vom Bootloader aus eingeben, root=/dev/sda muss nicht derselbe sein /dev/sda, auf den Sie eventuell zugreifen, /dev/sdanachdem das initramfs abgeschlossen /initist.

Ich denke, eine Möglichkeit, dies zu tun, besteht darin, eine udevRegel 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:

KERNEL=="sd*", SUBSYSTEMS=="scsi", ATTRS{model}=="USB 2.0 Storage Device", SYMLINK+="usbhd%n"

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/sdafür initramfs vorgesehen ist - Sie müssen also keine Bootloader-Konfigurationen ändern -, aber später einen Knoten für dieselbe Festplatte wie /dev/usbafür das Anaconda-Installationssystem erstellen.

mikeserv
quelle
3

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.

Michael Martinez
quelle
Startreihenfolge neu ordnen? Oder gibt es eine andere Option im BIOS, um die Reihenfolge zu ändern, in der die Laufwerke gefunden werden.
Skamazin
Unterschiedliche BIOS sind unterschiedlich. Sie müssen damit herumspielen.
Michael Martinez
Die einzigen Optionen, die ich finden konnte, betrafen die Startreihenfolge. Die Standardeinstellung ist "All USB HD" als erstes Laufwerk, von dem aus gebootet wird. Wenn Sie die native Festplatte nach oben verschieben, wird der Computer mit dem aktuellen Betriebssystem gestartet und das RHEL-Installationsprogramm wird überhaupt nicht ausgeführt. = [
Skamazin
Ja, einige BIOS sind eingeschränkter als andere.
Michael Martinez
1

Auf meinem glänzenden neuen, aber alten 45-Dollar-HP-G60-Laptop hatte ich das gleiche Problem. Ich habe USB von /dev/sdazu verschoben , /dev/sdbindem 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.

charlyRoot
quelle
0

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.

Derek Schrock
quelle