grub0.97, disk-cache-flush-Bug und wol mit Power-Off-Kernel

  • Moin Moin,


    hier mal kurz meine Leidensgeschichte...


    Nachdem meine root-HD nen abgang gemacht hatte, musste ich wohl oder übel den VDR neu aufsetzem. Naja, zumindest konnte man so mal sauber von vorn mit etch beginnen ...


    Nun zu meinem kleinen Problemchen. Auf meinem alten vdr hab ich (nicht ohne Grund) noch grub0.95 verwendet. Naja, inzwischen hab ich aber nen schön funktionierendes XEN auf dem VDR-Rechner am laufen, welches scheinbar mit Grub0.95 nicht mehr geht. Also hänge ich jetzt bei grub0.97.


    grub0.97 hab scheinbar leider einen serh lästigen BUG im Zusammenhang mit meiner HD-Mainboard-Kombination und dem Halt-Befehl.


    Wenn mein Poweroff-Eintrag wie folgt aussieht:


    Code
    title PowerOff
    root (hd0,0)
    savedefault 1
    cat /grub/default   #halt verzögern, damit Daten aus Cache auf Festplatte geschrieben werden können
    halt


    Dann schreibt er die "default"-Datei scheinbar nicht schnell genug aus dem cache auf die HD, bevor der halt ausgeführt wird. Das "cat /grub/default" soll das "halt" zwar verzögeren, aber das klappt nicht zuverlässig. Ich hab keinen Unterschied mit oder ohne bemerkt. Auch mehrfache Einträge (3 und 5) von "cat /grub/default" brachten da keine merkliche Besserung. In ca. 1 von 3-5 Versuchen ist die /grub/default-Datei schnell genug geschrieben, in den anderen Fällen nicht (und der Rechner wacht beim nächsten Timer dann natürlich nicht auf, weil er wieder den Halt-eintrag startet).


    Die einfachste Lösung ist dann natürlich, diesen leidigen halt-Befehl nicht zu nutzen, sondern stattdessen einen Power-Off-kernel (aus dem CVS des NVRAm-Projektes) zu nehmen.


    Code
    title PowerOff
    root (hd0,0)
    savedefault 1
    kernel /bzImage.2.6.9.poweroff


    Das klappt auch sehr zuverlässig. Allerdings führt dies zu neuen Problemen. Der Power-Off-Kernel schaltet das WOL wieder aus! (was vorher beim normalen booten extra mit "ethtool -s peth0 wol g" eingeschaltet wurde)
    Somit funktioniert das WOL nicht mehr.


    Und scheinbar ist es egal, ob ich den kernel bzImage.2.4.24.poweroff oder bzImage.2.6.9.poweroff nutze. WOL ist nacht dem PowerOff weg...


    Nun ja, so langsam gehen mir die Lösungswege aus. Ich hätte da zwar noch Ideen, aber da hapert es momentan an der Umsetzung:


    1. Eigenen Power-Off-Kernel kompilieren, der WOL in Ruhe läst bzw. einschalten. Nur wie erzeuge ich einen PowerOff-Kernel und wo könnte man da einstellen, da er WOL nicht verändern soll (müsste man vermutlich irgendwo in den Sourcen anpassen).


    2. Schleife in "grub" einfügen, die halt ers ausführt wenn /grub/default richtig auf HD geschireben ist. So in der Art:


    Code
    savedefault 1
    until "cat /grub/default" eq 1 
      do 
        sleep 1
      done
    halt


    leider kann grub keine schleifen. Und auch kein sleep... (http://www.gnu.org/software/gr…e-and-menu-entry-commands)


    3. Eine Version ohne diesen Bug installieren (nur woher bekommen) bzw. jemanden finden, der diesen Bug fixed.


    Wenn noch jemand ne alternative Idee hat, bin ich natürlich sehr intressiert.

    Server: Hardware: Intel DH77KC, Celeron G1610, 8GB RAM, 2x 5TB HDD, 2x WD 1,9TB HDD; 1x 64 GB SSD (root), System Ubuntu 18.4 / YaVDR ansible headless
    Client: Hardware: Lenovo Q150 (nur Netzwerk, 1GB RAM, ohne DVB-Karte, Igor-USB-Empfänger) System: Ubuntu 18.4 / YaVDR ansible

  • Juhu, Problem gelöst...


    Mit dem 2.4er PowerOff-Kernel geht WOL definitiv nicht, mit dem 2.6.9 schon.


    Allerdings hat sich der VDR auch mal mit "halt" ausgeschaltet, wenn sich der NVRAM-Eintrag nicht geändert hat. Und danach ging WOL nicht mehr, weil in der "/etc/init.t/halt" stand NETDOWN=yes. Nun gehts...


    Steht nun auch im Wiki...


    Nachtrag. Auch mit NETDOWN=no in der"/etc/init.t/halt" wird trozdem die Netzwerkkarte abgeschaltet und WOL geht nicht mehr.
    Aber da es nach einem Reboot mit dem 2.6.9-PowerOff-Kernel klappt, hab ich einfach in der "/etc/vdr/vdr-nvram-wakup.conf" "FORCE-REBOOT=yes" aktiviert, damit er immer über den PowerOff-Kernel ausschaltet und nun gehts auch mit WOL.

    Server: Hardware: Intel DH77KC, Celeron G1610, 8GB RAM, 2x 5TB HDD, 2x WD 1,9TB HDD; 1x 64 GB SSD (root), System Ubuntu 18.4 / YaVDR ansible headless
    Client: Hardware: Lenovo Q150 (nur Netzwerk, 1GB RAM, ohne DVB-Karte, Igor-USB-Empfänger) System: Ubuntu 18.4 / YaVDR ansible

    2 Mal editiert, zuletzt von Negge ()

  • ist ja wirklich eine sehr nette Geschiche! Ich moechte bloss wissen, was da im grub seit Version 0.95 mal wieder versiebt wurde...


    Das gleiche Problem hatte ich naemlich auch: d.h. ein 'halt' Eintrag in der 'menu.lst' bewirkt, dass der 'default' Eintrag nicht korrekt zurueckgesetzt wird. Es ist aber nicht so, dass hier die disks etwa nicht geflushed werden, sondern grub weigert sich in diesem Fall grundsaetzlich, den 'default' Entry richtig zu setzen.

    Code
    title           nvram-wakeup PowerOff
    root            (hd0,6)
    halt
    savedefault

    funktioniert also nicht.


    Ich wollte aber als Workaround nicht extra einen power-off Kernel zusammenschrauben, deswegen uebergebe ich einfach '/sbin/poweroff' als init arg:


    Code
    title           nvram-wakeup PowerOff
    root            (hd0,6)
    kernel          /boot/vmlinuz-2.6.22-3-686 root=/dev/hda7 ro init=/sbin/poweroff
    initrd          /boot/initrd.img-2.6.22-3-686
    savedefault

    so funktioniert es mit dem sonst im System verwendeten Kernel auch. Die WOL Probleme entstehen also erst gar nicht.

  • Zitat

    Original von sparkie
    ist ja wirklich eine sehr nette Geschiche! Ich moechte bloss wissen, was da im grub seit Version 0.95 mal wieder versiebt wurde...


    Das gleiche Problem hatte ich naemlich auch: d.h. ein 'halt' Eintrag in der 'menu.lst' bewirkt, dass der 'default' Eintrag nicht korrekt zurueckgesetzt wird. Es ist aber nicht so, dass hier die disks etwa nicht geflushed werden, sondern grub weigert sich in diesem Fall grundsaetzlich, den 'default' Entry richtig zu setzen.

    Code
    title           nvram-wakeup PowerOff
    root            (hd0,6)
    halt
    savedefault

    funktioniert also nicht.


    Also in diesem Code-Schnippsel fehlt erstens die Nummer, die er speichern soll (savedefault 1 oder 2 oder was auch immer). So mit nur "svaedefault" speichert er ja die aktuelle Auswahl, also den Poweroff.
    Und zweites gehört das savedefault vor den halt-Befehl. Er führt den Halt-befehl aus und damit ist dann eigentlich Ende.


    Zitat


    Ich wollte aber als Workaround nicht extra einen power-off Kernel zusammenschrauben, deswegen uebergebe ich einfach '/sbin/poweroff' als init arg:


    Code
    title           nvram-wakeup PowerOff
    root            (hd0,6)
    kernel          /boot/vmlinuz-2.6.22-3-686 root=/dev/hda7 ro init=/sbin/poweroff
    initrd          /boot/initrd.img-2.6.22-3-686
    savedefault

    so funktioniert es mit dem sonst im System verwendeten Kernel auch. Die WOL Probleme entstehen also erst gar nicht.


    Schöne Lösung mit dem PowerOff-Parameter. Ist ne nette Alternativmöglichkeit. Aber auch hier müsste das savedefault doch eigentlich vor dem booten des kernels ausgeführt werden.

    Server: Hardware: Intel DH77KC, Celeron G1610, 8GB RAM, 2x 5TB HDD, 2x WD 1,9TB HDD; 1x 64 GB SSD (root), System Ubuntu 18.4 / YaVDR ansible headless
    Client: Hardware: Lenovo Q150 (nur Netzwerk, 1GB RAM, ohne DVB-Karte, Igor-USB-Empfänger) System: Ubuntu 18.4 / YaVDR ansible

  • Zitat

    Originally posted by Negge
    Also in diesem Code-Schnippsel fehlt erstens die Nummer, die er speichern soll (savedefault 1 oder 2 oder was auch immer). So mit nur "svaedefault" speichert er ja die aktuelle Auswahl, also den Poweroff.


    eben nicht! Ich setze bewusst keine Nummer dahinter, da ich folgendermassen den (temporaeren) Poweroff- Kernel aktiviere:


    Code
    echo -e 'root (hd0,6)\nsavedefault --default=0 --once\nquit' | /usr/sbin/grub --batch


    das bewirkt, dass nur *einmal* der in diesem Beispiel 'nullte' Eintrag ausgewaehlt wird. Der naechste 'savedefault' der von 'grub' jetzt durchlaufen wird, naemlich der im 'poweroff' EIntrag bewirkt, dass der vorherige Eintrag als default zurueckgesetzt wird. Das hat den grossen Vorteil, dass ich gar nicht zu wissen brauche, was der vorherige Eintrag war. Das heisst der 'savedefault' Mechanismus, wenn mal jemand von Hand was anderes auswaehlt, bleibt auch beim Poweroff- Einsatz erhalten. Das wuerde sonst, bei expliziter Nummernangabe nach 'savedefault', ja nicht funktionieren.


    Zitat

    Und zweites gehört das savedefault vor den halt-Befehl. Er führt den Halt-befehl aus und damit ist dann eigentlich Ende.


    sorry aber das stimmt nicht. Zumindest macht das bei mir in keinem Fall einen Unterschied. Ich hatte die 'halt' Version tatsaechlich auch in gedrehter Reihenfolge getestet. Ohne Verbesserung.


    Zitat

    Aber auch hier müsste das savedefault doch eigentlich vor dem booten des kernels ausgeführt werden.


    also macht bei mir wie gesagt keinen Unterschied. Aber danke fuer den Tipp! Vielleicht macht es in manchen Faellen schon was aus. Bei mir funktioniert jetzt auf jeden Fall alles.


    [EDIT] so, habe noch mal nachgesehen, Reihenfolge 'savedefault' ist offenbar egal:
    http://www.gnu.org/software/gr…edefault.html#savedefault
    [/EDIT]

  • Zitat

    Original von sparkie

    Code
    echo -e 'root (hd0,6)\nsavedefault --default=0 --once\nquit' | /usr/sbin/grub --batch


    was genau bewirkt dieser befehl bzw. wann führst du diesen aus?

  • Zitat

    was genau bewirkt dieser befehl bzw. wann führst du diesen aus?


    er setzt im Beispiel den naechsten 'default' entry auf '0'. Er merkt sich aber in '/grub/default' was der aktuelle 'default' ist. Somit ist es sozusagen nur eine 'one-shot' Aenderung. Der naechste 'savedefault' der von grub durchlaufen wird, stellt den 'default' wieder auf den alten Wert zurueck.


    Ich fuehre diesen Befehl kurz vor dem '/sbin/shutdown -r now' aus. Also kurz bevor der 'power-off' angefahren wird.

  • Zitat

    Original von sparkie


    er setzt im Beispiel den naechsten 'default' entry auf '0'.


    nur zum Verständnis des Parameter 0, steht der hier für den 1. Booteintrag in der menu.lst?

  • Zitat

    nur zum Verständnis des Parameter 0, steht der hier für den 1. Booteintrag in der menu.lst?


    genau, es entspricht der Nummerierung im 'grub':

    Code
    ## default num
    # Set the default entry to the entry number NUM. Numbering starts from 0, and
    # the entry number 0 is the default if the command is not used.


    du kannst den aktuellen default-Wert, also den der als naechstes per default gebootet wird jederzeit mit

    Code
    echo -n '#';cat -v /boot/grub/default;echo '#'

    anschauen

  • Ich hab dazu noch mal eine Verständnisfrage:


    Zitat

    Original von Scogit
    [quote]Original von sparkie

    Code
    echo -e 'root (hd0,6)\nsavedefault --default=0 --once\nquit' | /usr/sbin/grub --batch


    Ist das nicht praktisch doppelt gemoppelt sagt diese Zeile nicht bereits aus das (hd0,6) savedefault ist ... wozu dann noch mal --default=0?

  • Zitat

    Ist das nicht praktisch doppelt gemoppelt sagt diese Zeile nicht bereits aus das (hd0,6) savedefault ist ... wozu dann noch mal --default=0?


    - also 'root (hd0,6)' legt Platte und Partition fest, auf die sich folgende Aenderungen beziehen. D.h. es wird das grub- 'default'=File genau dort geaendert.
    - 'savedefault' sagt der grub shell, dass sich folgende Aenderungen auf die Menu defaults beziehen
    - '--default=0' besagt dass als naechstes der Menueintrag 0 default sein soll.
    - '--once' besagt, dass sich die Aenderung nur auf den naechsten Boot bezieht. Wenn der durch ist (also nach dem naechsten savedefault), wird automatisch der vorherige default-Eintrag restauriert. Was ja im Fall nvram-wakeup genau das Richtige ist.


    weiteres hier:
    http://www.gnu.org/software/grub/manual/

  • Zitat


    - also 'root (hd0,6)' legt Platte und Partition fest, auf die sich folgende Aenderungen beziehen. D.h. es wird das grub- 'default'=File genau dort geaendert.


    das leuchtet mir noch nicht so ganz ein, also praktisch die Partition auf der Grub installiert ist?

  • Zitat

    das leuchtet mir noch nicht so ganz ein, also praktisch die Partition auf der Grub installiert ist?


    die Partition, von der grub booten wird, muss die neuen 'defaults' erhalten. Diese Partition wird damit eingestellt.

  • Servus,


    ich hab damit noch ein kleines Problem...


    Was mache ich da falsch?


    menu.ls




    S20.grubsavedefault

    Bash
    #!/bin/sh
    echo -e 'root (hd0,1)\nsavedefault --default=0 --once\nquit' | /usr/sbin/grub --batch
  • Doch das ist root Partition. Hatte aber grad ohne Root-Rechten ausgeführt ... habs grad grad mal mit Root-Rechten ausgeführt dauert aber ewig lang bis es durch ist ...



    ps: ist noch nicht durchgelaufen dauert das immer so lang?

  • Hallo,


    hatte genau das gleiche Problem wie Negge ganz oben beschreibt (savedefaut geht nicht zusammen mit halt). Mir hat "cat /boot/grub/bigfile" geholfen, wobei bigfile einfach eine ca. 100k große ASCII-Datei ist. Das verzögert das Ausschalten um ca. 15 sec, seither läufts gut.
    Der Grub-Fehler ist übrigens auch unter http://savannah.gnu.org/bugs/?11823 beschrieben.


    Helmar.

  • Seit Lenny ist das alles viel einfacher geworden ... ich hab aber dafür ein neues Problem mit Lenny was ich mir nicht erklären kann.


    Wenn ich den VDR ausschalte setzt mein Ruby Script meine Systemzeit in Abhängigkeit zur Dauer in Sec bis zu nächsten Aufnahme. Meine feste Aufwachzeit ist immer der 1. jeden Monats 23:59:59 ... also setze ich meine Systemzeit wenn eine Aufnahme in einer Stunde ansteht auf den 1. des Monats und 22:59:59 Uhr. Dann wird der VDR über ein spezielles Shutdown-Script neu gestartet welches den Savedefault von Grub setzt.
    Das funktioniert auch alles wunderbar ... Rechner startet durch ... Grub Default für PowerOff wird geboot Rechner schaltet sich aus ... wacht aber nicht mehr auf.


    Starte ich den Rechner manuell um die Systemzeit zu überprüfen ist alles genauso wie es sein sollte ... Systemzeit auf den 1. des Monats 23:10:23 Uhr (als Beispiel ... Runterfahren etc., Aufwachen abwarten etc dauert ja alles ) aber der Rechner wacht einfach nicht auf ...

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!