Kernel-Option "root=LABEL=meinepartition"

  • Hallo!

    Diese Option fehlt leider in Raspbian bisher. Gibt es eigentlich etwas Neues in dieser Angelegenheit? Vor einigen Wochen habe ich etwas darüber gelesen, daß das in Arbeit sei. (Ich weiß aber nicht mehr wo.) Wäre schön, wenn diese Option benutzt werden könnte, das würde einiges vereinfachen.

  • Ich versteh zwar nicht wofür das gut sein soll, aber soweit ich weiß kann man das auch in /etc/fstab festlegen :huh:

    Man sollte vielleicht noch anmerken, dass man ein LABEL über e2label /dev/sdXY new_label erst vergeben muss, um sie nutzen zu können.
    Für die /boot/ Partition ist bereits ein LABEL="boot" vergeben, aber nicht für die root-Partition / . Erst wenn man zB e2label /dev/mmcblk0p2 system ausführt hat die Partition auch LABEL="system" (zu prüfen über den Befehl blkid)

    Anschließend kann man root=LABEL=system in /boot/cmdline.txt eintragen bzw ersetzen und dann funktioniert das auch :)

  • Ich versteh zwar nicht wofür das gut sein soll,

    Ganz einfach: wenn die Platte/Partition kaputt ist oder wenn sie wegen Platzmangels umgetopft werden muss, nimmst Du eine neue, versiehst sie mit demselben Label, und musst Dich nicht im UUID oder Devices kümmern.

    Zitat

    aber soweit ich weiß kann man das auch in /etc/fstab festlegen :huh:

    Ja, aber ich rede jetzt von der Option, die man bei Linux dem Kernel direkt beim Booten mitgeben kann, z.B. in GRUB.

    • Offizieller Beitrag
    Zitat

    in /boot/cmdline.txt eintragen bzw ersetzen und dann funktioniert das auch


    auch das hat meigrafd bereits gesagt ;)

    Der Unterschied zwischen Genie und Wahnsinn definiert sich im Erfolg.

    Einmal editiert, zuletzt von dbv (6. August 2014 um 12:19)

  • Ne: in /boot/cmdline.txt funktioniert dieser Parameter eben nicht! Da funktionieren nur Devices. Habe es extra soeben noch getestet.

    Und ja: die Labels sind richtig gesetzt, da ich sie in fstab auch benutze. :)

  • Doch das funktioniert - habs selber getestet:

  • Da könntest Du einem Trugschluss erliegen: Du hast das Root-Verzeichnis auf der SD-Karte liegen, auf derselben Partition, der zweiten, auf der es standardmäßig sowieso eingerichtet und vom Kernel erwartet wird.

    Probiere mal, das Root-VZ auf einen USB-Stick zu packen, den zu labeln und dann diesen Parameter zu benutzen. Und lösche die Partition auf der Karte, damit der Kernel sie wirklich nicht findet!

    Einmal editiert, zuletzt von PInguin (6. August 2014 um 13:11)

  • Wir reden hier ein wenig aneinander vorbei.

    Die Boot-Partition ist die, die Du später auch unter /boot im Verzeichnisbaum eingehangen findest. Das ist die Partition, auf der der Bootloader installiert ist, der Kernel und die cmdline.txt zu finden ist.

    Das Root-VZ ist die oberste Ebene im Verzeichnisbaum, zu erreichen mit "cd /". Diese VZ kann auf einem beliebigen Medium liegen, auf die der Kernel zugreifen kann, also dessen Treiber er zum Zeitpunkt des Startens kennt, entweder durch festes Einkompilieren, oder durch Bereitstellung der Module in einer Init-RAM-Disk.

    Nachdem der Bootloader von der Startpartition den Kernel geladen hat, übernimmt der Kernel den weiteren Startvorgang und hängt die Partitionen in den VZ-Baum ein. Als erstes natürlich das Root-VZ, und dann sucht er in /etc/fstab nach weiteren Medien/Partitionen, die er einhängen muss. Ab diesem Zeitpunkt wird die Startpartition eigentlich gar nicht mehr benötigt, sie wird nur der Bequemlichkeit unter /boot/ eingehangen, um Änderungen einfacher durchführen zu können.

    Heutzutage macht man vielfach keine extra /boot-Partition mehr, sondern benutzt ein einfaches Verzeichnis im Root-VZ. Diese Unterteilung war früher nötig, als das BIOS der Rechner Probleme mit zu großen Festplatten hatte. Da war es wichtig, daß der Kernel von einer Partition geladen werden konnte, die das BIOS erreichen konnte. Das ist heute im allgemeinen nicht mehr nötig.

    Alle Klarheiten beseitig? :)

  • Das ist mir alles klar ... da erzählst Du mir nichts Neues - das war vor 30 Jahren auch schon so.
    Ich verstehe jetzt Dein Anliegen nicht. Du kannst doch eine andere Gerätedatei als root-fs angeben.
    Dass Du den Slice und das Blockdevice (also /dev/mmcblk0p2) angeben musst, ist afaik so, weil der Kernel zu diesem Zeitpunkt ja noch kein root-fs hat und demzufolge mithilfe von fstype und partition über den Treiber das rootfs direkt lädt und einhängt. Das war zumindest unter SysVR4 so.
    Demzufolge bringt ein label in einer /etc/fstab nix, weil die zu o.g. Zeitpunkt noch gar nicht existiert.

    Mal ganz abgesehen davon: imho ist es simpler, ein Filesystem auf einer Platte zu erzeugen und über den Eintrag /dev/sda1 in der cmdline.txt dem System bekannt zu geben als vorher die Partition noch ( i.d.R dann auch noch möglichst falsch :fies: ) zu labeln.

    cheers,
    -ds-

  • dreamshader: Der PI ist speziell.. Er benötigt beim starten nur die Dateien in /boot/ und die sind ja auch weiterhin da. Aber nachdem er dann Firmware und Kernel geladen hat soll er nicht auf die SD zugreifen sondern auf den USB-Stick

    Warum man nicht einfach nur root=/dev/sda1 in die cmdline.txt einträgt hat den einfachen Grund dass das selbe Device nicht immer mit dem selben Devicename (/dev/sda1) eingehängt wird, sondern manchmal auch als /dev/sdb1 , wenn zum Beispiel beim booten noch ein anderes Blockdevice angeschlossen ist also in diesem Fall ein 2.USB-Stick ... dann kommt es eben leider mal vor das der root-Stick nicht mehr /dev/sda1 ist sondern /dev/sdb1 und somit würde das booten fehlschlagen..

    Ich gehe jetzt gerade die Schritte > dieser Anleitung von framp < durch um das genauer zu testen, leider ist mein einzig verfügbarer USB-Stick nicht der schnellste...
    Leider hagelt es da auch eine Menge Fehlermeldungen weil die Anleitung nicht /proc , /dev und /sys ignoriert, aber erstmal egal, keine Lust noch mal von Vorne zu starten :D
    (auch wird nicht beachtet den Partitionstyp auf dem USB Stick zu ändern bzw die vorherige zu löschen...)

    Nach dem kopieren darf man halt nur nicht vergessen die 2. Partition auf der SD zu löschen - wie PInguin oben auch schon angemerkt hat


    Heutzutage macht man vielfach keine extra /boot-Partition mehr, sondern benutzt ein einfaches Verzeichnis im Root-VZ. Diese Unterteilung war früher nötig, als das BIOS der Rechner Probleme mit zu großen Festplatten hatte. Da war es wichtig, daß der Kernel von einer Partition geladen werden konnte, die das BIOS erreichen konnte. Das ist heute im allgemeinen nicht mehr nötig.

    Diese Unterteilung ist beim PI nötig da die GPU nur FAT Partitionen lesen kann, und da der PI kein BIOS hat übernimmt die GPU den Bootvorgang


  • dreamshader: Der PI ist speziell.. Er benötigt beim starten nur die Dateien in /boot/ und die sind ja auch weiterhin da. Aber nachdem er dann Firmware und Kernel geladen hat soll er nicht auf die SD zugreifen sondern auf den USB-Stick


    Ich weiss nicht ... liegts am Wetter oder steh ich heute neben mir :s
    Warum erzählt ihr mir dauernd Sachen, die ich mittlerweile gefühlte 10 mal schon geschrieben habe?


    ...
    Warum man nicht einfach nur root=/dev/sda1 in die cmdline.txt einträgt hat den einfachen Grund ...
    ...

    sondern was?
    rootfs=/dev/sdb1 oder wie?


    ...
    root-Stick nicht mehr /dev/sda1 ist sondern /dev/sdb1 und somit würde das booten fehlschlagen..


    aha ... und wenn Du rootfs=/dev/sdb1 einträgst, dann bootet er auch von /dev/sda1
    Hmm ... sorry, aber was erzählst Du denn da ???



    ...
    Diese Unterteilung war früher nötig, als das BIOS der Rechner Probleme mit zu großen Festplatten hatte. Da war es wichtig, daß der Kernel von einer Partition geladen werden konnte, die das BIOS erreichen konnte....


    Und das ist afaik auch Humbug, weil weder Linux noch Xenix noch Unix irgendwas mit dem BIOS eines PC machen.

    Also irgendwie steh' ich heute wohl daneben.
    Aber was solls ;) ....

    cheers,
    -ds-


  • Ich verstehe jetzt Dein Anliegen nicht. Du kannst doch eine andere Gerätedatei als root-fs angeben.

    Richtig. Aber eben nur in der Form /dev/sdxy. Den Parameter "root=LABEL=xxx" kennt der Kernel des Pi nicht. Normalerweise gibt es auch die Möglichkeit, den Parameter "root=UUID=...." zu benutzen. Ob der Pi-Kernel den kennt, habe ich noch nicht ausprobiert. Ich vermute, daß diese Optionen beim Komilieren nicht aktiviert wurden.

    Zitat


    Dass Du den Slice und das Blockdevice (also /dev/mmcblk0p2) angeben musst, ist afaik so, weil der Kernel zu diesem Zeitpunkt ja noch kein root-fs hat und demzufolge mithilfe von fstype und partition über den Treiber das rootfs direkt lädt und einhängt. Das war zumindest unter SysVR4 so.
    Demzufolge bringt ein label in einer /etc/fstab nix, weil die zu o.g. Zeitpunkt noch gar nicht existiert.

    Das ist unter Linux mittlerweile etwas anders. Wie ich schon sagte: soll der Kernel beim Starten auf ein Dateisystem zugreifen, müssen die entsprechenden Treiber (ext2, xfs,...) beim Übersetzen des Quellcodes entweder fest eingebunden werden, oder als Modul in eine spezielle Datei gepackt werden, die beim Starten als RAM-Disk benutzt wird. Aber auch diese Init-RAM-Disk muss natürlich auf einem Dateisystem stehen, auf die der Kernel OHNE weitere Module laden zu müssen, zugreifen kann.

    Zitat

    Mal ganz abgesehen davon: imho ist es simpler, ein Filesystem auf einer Platte zu erzeugen und über den Eintrag /dev/sda1 in der cmdline.txt dem System bekannt zu geben als vorher die Partition noch ( i.d.R dann auch noch möglichst falsch :fies: ) zu labeln.

    Gerade die Möglichkeit, ein Label zu benutzen, macht das Umstecken von Platten sehr einfach, wie auch meigrafd beschrieben hat:

    Warum man nicht einfach nur root=/dev/sda1 in die cmdline.txt einträgt hat den einfachen Grund dass das selbe Device nicht immer mit dem selben Devicename (/dev/sda1) eingehängt wird, sondern manchmal auch als /dev/sdb1 , wenn zum Beispiel beim booten noch ein anderes Blockdevice angeschlossen ist also in diesem Fall ein 2.USB-Stick ... dann kommt es eben leider mal vor das der root-Stick nicht mehr /dev/sda1 ist sondern /dev/sdb1 und somit würde das booten fehlschlagen..

    Eben darum geht es. Nicht nur USB-Geräte werden nicht immer in derselben Reihenfolge erkannt, auch SATA-Controller können angeschlossene Festplatten u.U. durcheinander würfeln, wenn eine Platte mal einen langsamen Tag hat und sich nicht schnell genug meldet. Und dann ist das, was vorher sda war, plötzlich sbd, und der Spaß geht los! ;)

    Zitat

    Diese Unterteilung ist beim PI nötig da die GPU nur FAT Partitionen lesen kann, und da der PI kein BIOS hat übernimmt die GPU den Bootvorgang

    Richtig, so ist es beim Pi. Aber Früher™ hatte man das Problem, daß ohne Frack und Zylinder nichts ging. :D Wenn eine Festplatte eine bestimmte Anzahl von Zylindern überschritt, konnte der Bootloader nicht auf Partitionen zugreifen, die hinter dieser Grenze lagen. Daher musste der Linux-Kernel auf einer Partition stehen, die unterhalb dieser Grenze lag. Daher die getrennte Boot-Partition.

    Noch ein Tipp: Du kannst Dir die Sache mit dem Umkopieren mit "dd" etwas einfacher gestalten: einfach die komplette Root-Partition auf das neue Medium kopieren. Das solltest Du aber an einem anderen Rechner machen, nicht auf dem Pi im laufenden Betrieb. ;)


    Und das ist afaik auch Humbug, weil weder Linux noch Xenix noch Unix irgendwas mit dem BIOS eines PC machen.

    Also irgendwie steh' ich heute wohl daneben.
    Aber was solls ;) ....

    Dann hast Du noch nie das Problem gehabt, daß ein angeschlossener USB-Speicher mal sda und ein anderes mal sdb war? Darum geht es. USB-Geräte werden nicht immer als das gleiche Gerät angesprochen. Und bei vielen USB-Hubs ist auch die Reihenfolge der Belegung der Ports ausschlaggebend, welcher Stick sda und welcher zu sdb wird.

    Einmal editiert, zuletzt von PInguin (6. August 2014 um 15:51)

  • Ja es liegt am Wetter :lol:

    Dein letzter Quote stammt nicht von mir sondern PInguin

    Wenn man zusätzlich zum system-Stick einen anderen einsteckt, kann es vorkommen dass der system-Stick nicht mehr /dev/sda1 ist sondern /dev/sdb1 aber dann bootet er nicht mehr weiter da der cmdline.txt Eintrag nicht mehr passt

  • Eben. Und ich finde es schon erstaunlich, daß der Pi zwischen /dev/mmcblk0p1 und /dev/sda1 unterscheidet. Da beide Speicher über USB angeschlossen sind, denn auch der SD-Kartenleser geht, so weit ich weiß über den USB-Controller, müsste die Karte eigentlich sda und das erste Speicher-Zäpfchen dann sdb sein. :s

    Mir fällt gerade etwas ein: kann es sein, daß der verwendete Boot-Loader einfach keine Parameter verarbeiten kann, in denen zwei mal ein Gleichheitszeichen vorkommen? Das könnte es erklären, wieso das Label nicht funktioniert.

    Einmal editiert, zuletzt von PInguin (6. August 2014 um 16:07)


  • Mir fällt gerade etwas ein: kann es sein, daß der verwendete Boot-Loader einfach keine Parameter verarbeiten kann, in denen zwei mal ein Gleichheitszeichen vorkommen? Das könnte es erklären, wieso das Label nicht funktioniert.

    root=UUID=xxx versteht er aber ja auch, oder nicht :huh:


  • ...
    ... Aber Früher™ hatte man das Problem, daß ohne Frack und Zylinder nichts ging. :D Wenn eine Festplatte eine bestimmte Anzahl von Zylindern überschritt, konnte ...


    Unix hatte noch nie ein Problem mit Plattengrössen und soweit ich mich erinnere trat das Problem unter Linux (0.9x von Ygdrassil war meine erste) nur deshalb auf, weil es eben nur PCs mit 8 Bit CPUs gab und dadurch eine Adressierung gar nicht möglich war (ein Relikt aus dieser Zeit ist auch der timestamp seit ' The Epoch').
    Unsere Waschmaschinen damals mit Pyramid CPU hatten da überhaupt kein Problem.


    Dann hast Du noch nie das Problem gehabt, daß ein angeschlossener USB-Speicher mal sda und ein anderes mal sdb war? Darum geht es. USB-Geräte werden nicht immer als das gleiche Gerät angesprochen. Und bei vielen USB-Hubs ist auch die Reihenfolge der Belegung der Ports ausschlaggebend, welcher Stick sda und welcher zu sdb wird.

    Und was hat das jetzt mit dem BIOS zu tun :s

    Und nein, das Problem hatte ich noch nie, weil sich das rootfs meiner Rechner auf der ersten Festplatte befindet und nicht auf einem USB Gerät. Lediglich der RPi macht da eine Ausnahme.

    Aber wie gesagt, ich streich hier mal die Segel ... ich kann der Konversaton scheinbar nicht mehr folgen :s

    cu,
    -ds-

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!