Moin,

ich habe gestern das neue GRUB update installiert.
Beim Aufruf des Befehls:
grub-mkconfig -o /efi/grub/grub.cfg
erhalte ich in der ersten Zeile folgende Fehlermeldung:

/usr/bin/grub-editenv: error: cannot open '//boot/grub/grubenv.new': No such file or directory.

Ansonsten wird alles ohne Fehler weiter durchgeführt.

Ich nutze BTRFS und meine /boot liegt mit auf der verschlüsselten Partition und wird per Keyfile entschlüsselt.

Der Fehler war sonst nicht da, ein grub-install hat leider auch nichts gebracht den Fehler zu beheben.
Kann mir jemand sagen, für was es speziell wichtig ist und wie ich es eventuell reparieren könnte???
Kann man der grub-editenv sagen er soll nicht bei /boot schauen sondern bei /efi ???

Vielen Dank und viele Grüße Snorre

    Snorre Kann mir jemand sagen, für was es speziell wichtig ist und wie ich es eventuell reparieren könnte???

    Diese (Fehler-)Meldung kommt bei grub-mkconfig wenn in den Default-Grubeinstellungen festgelegt ist, den zuletzt verwendeten Booteintrag als markierten(aktiven) Eintrag im Menu zu merken, verwenden.
    Konkret muß dazu in der /etc/default/grub aktiv sein:

    GRUB_DEFAULT=saved
    
    # Uncomment to make GRUB remember the last selection. This requires                                       
    # setting 'GRUB_DEFAULT=saved' above.                                                                     
    GRUB_SAVEDEFAULT=true 

    Die Voreinstellung ist eigentlich:

    GRUB_DEFAULT=0
    #GRUB_SAVEDEFAULT=true 

    Dann dürfte die Meldung oben eigentlich nicht auftauchen.

    Frage also: Verwendest du diese Option des Merkens des letzten Eintrages überhaupt bzw. ist das deine Absicht?

    Snorre Kann man der grub-editenv sagen er soll nicht bei /boot schauen sondern bei /efi ???

    Das Skript grub-editenv bietet diese Möglichkeit, ja. Allerdings wird diese in dem Skript grub-mkconfig nicht verwendet/berücksichtigt.
    Der korrekte Aufruf bei dir wäre:
    /usr/bin/grub-editenv /efi/grub/grubenv list
    im Skript grub-mkconfig wird es aber so verwendet:
    ... GRUB_ACTUAL_DEFAULT=""${grub_editenv}" - list ...`

    Durch "-" als FILENAME greift die Voreinstellung von grub-editenv:
    If FILENAME is-', the default value //boot/grub/grubenv is used.`

    Dadurch kommt es zur obigen Fehlermeldung.

    Also eigentlich ein Fehler in grub-mkconfig, da speziell für Benutzer, die als GRUB_DEFAULT saved benutzen wollen und ihre Grub-Installation/Config nicht in /boot/grub/* haben eben keine Vorsorge getroffen ist.

    Ein "dirty hack" wäre z.B. beim ursächlichen Code in grub-mkconfig (Zeile 202) für den Aufruf für grub-editenv den "falschen" Dateiparameter "-" zu ersetzen durch:
    "$(dirname ${grub_cfg})/grubenv"
    Die Variable grub_cfg entspricht dem, was der User bei -o/--output als Ziel für die gewünschte grub.cfg mitgibt (Default: /boot/grub/grub.cfg, bei dir /efi/grub/grub.cfg).
    Hier wird nun explizit das Basisverzeichnis von --output verwendet, um grub-editenv den abweichenden Ort für seine Datei grubenv mitzugeben.
    Statt:
    grub-editenv - list (was bei dir den Fehler produziert, da "-" bedeutet /boot/grub/grubenv)
    wird das also bei dir nun zu:
    prub-editenv /efi/grub/printenv list
    "Dirty" ist dieser Hack weil:
    a) Der Dateiname "grubenv" für den letzten verwendeten Booteintrag nun statisch ist
    b) Ich auf die Schnelle keine definierte Variable in/um grub-mkconfig gefunden habe, über die sich das aktuell verwendete Installations-Verzeichnis (default /boot/grub, bei dir /efi/grub) abfragen ließe, ohne die "Krücke" mittels "dirname /wo_der_user_die_grub.cfg_hinhaben_will.

    Also IMHO eigentlich ein Fall für einen Bugreport zu grub bei gnu.org.

    Kurz: Was heißt das für dich?
    a) Wenn du die Möglichkeit der Verwendung des letzten Booteintrags wirklich verwenden willst, dann funktioniert das ohne Codeänderung nicht. Die Fehlermeldung selbst ist für die Erstellung der grub.cfg nicht hinderlich.
    b) Wenn du das nicht verwenden willst, dann ändere die Konfiguration in /etc/default/grub
    Eine Frage ist, warum das in der aktuellen Version ggf. anders voreingestellt ist wenn du selbst da nichts verändert hast.

    //Edit: Falsche Bezeichner grub-printenv zu grub-editenv korrigiert.

    Snorre Beim Aufruf des Befehls:
    grub-mkconfig -o /efi/grub/grub.cfg

    Wie kommst du auf diese Idee?

    • Snorre hat auf diesen Beitrag geantwortet.

      @GerBra
      Vielen Dank für die wahnsinnig ausführliche Beantwortung.

      Ja, ich verwende den

      `GRUB_DEFAULT=saved
      # Uncomment to make GRUB remember the last selection. This requires                                       
      # setting 'GRUB_DEFAULT=saved' above.                                                                     
      GRUB_SAVEDEFAULT=true `

      weil ich den aktuellen Linux Kernel und den LTS verwende. Mir war aber tatsächlich nicht bewusst, dass durch diese Einstellung die grub-editenv dann Probleme macht. Sonst bliebe natürlich noch einen anderen GRUB_DEFAULT Parameter zu nutzen statt saved...

      Ich danke dir sehr für die Antwort, dass hat mir schon wieder reichlich wissen gebracht 😃

      Gerry_Ghetto

      Ich nutze meinen Laptop sehr viel unterwegs, oft mit vielen Leuten aus der IT und um den Sicherheitsstandard noch ein wenig zu erhöhen, liegen die Dateien von /boot ebenfalls verschlüsselt auf der Platte.

        Snorre Gerry_Ghetto

        Ich nutze meinen Laptop sehr viel unterwegs, oft mit vielen Leuten aus der IT und um den Sicherheitsstandard noch ein wenig zu erhöhen, liegen die Dateien von /boot ebenfalls verschlüsselt auf der Platte.

        Die Frage war, warum du bei einem Grub-Update die cfg erneut schreiben lässt ;-)

        • Snorre hat auf diesen Beitrag geantwortet.

          Snorre Ich nutze meinen Laptop sehr viel unterwegs, oft mit vielen Leuten aus der IT und um den Sicherheitsstandard noch ein wenig zu erhöhen, liegen die Dateien von /boot ebenfalls verschlüsselt auf der Platte.

          Bei mir liegt /boot/grub/grub.cfg auch verschlüsselt unter /boot. Die Frage ist also, weshalb du die anderen Dateien verschlüsselt unter /boot hast, aber die grub.cfg unverschlüsselt sonstwo abspeicherst?

          Ich verstehe auch nicht, inwiefern eine Festplattenverschlüsselung irgendeinen "Sicherheitsstandard" erhöht (aber ich verstehe sehr gut, weshalb man bei einem Laptop eine Festplattenverschlüsselung verwenden möchte). Eine Verschlüsselung dient dem Schutzziel der Vertraulichkeit. Also falls dein abgeschalteter Laptop abhanden kommen sollte, kannst du (abhängig von deinem Passwort) ziemlich sicher sein, dass niemand deine Daten entschlüsseln kann. Aber eine Verschlüsselung schützt dich nicht vor Malware, Phishing, Spoofing, DDoS, etc. Und gerade "viele Leute aus der IT" tendieren dazu, die grössten Schwachstellen im System zu sein ("eigentlich macht man das nicht so, aber jetzt geht es schon", "das ist ja nur temporär", "ich probiere es sofort mit dem Admin-Konto", "Zertifikatswarnung? Akzeptier das mal", usw).

          • Snorre hat auf diesen Beitrag geantwortet.
            5 Tage später

            Josephus Miller
            Deshalb:

            `(10/14)` upgrading grub                                                                                             
            :: To use the new features provided in this GRUB update, it is recommended
               to install it to the MBR or UEFI. Due to potential configuration
               incompatibilities, it is advised to run both, installation and generation
               of configuration:
                 # grub-install ...
                 # grub-mkconfig -o /boot/grub/grub.cfg`

            Gerry_Ghetto
            Hm, wenn ich mich recht entsinne muss ja bei grub der Loader unverschlüsselt liegen damit er geladen werden kann, also liegt er in der efi-Partition. In der verschlüsselten boot-Partition liegen den initram und Kernel.
            Das ist mir alles sehr bewusst, dementsprechend schrieb ich auch "um ihn zu erhöhen" - mir ist bewusst, dass eine entschlüsselte Festplatte - entschlüsselt ist.

              Snorre Hm, wenn ich mich recht entsinne muss ja bei grub der Loader unverschlüsselt liegen damit er geladen werden kann, also liegt er in der efi-Partition. In der verschlüsselten boot-Partition liegen den initram und Kernel.

              Nein, lediglich der Teil, der von der Firmware geladen wird, muss unverschlüsselt auf der ESP liegen. Das ist normalerweise grubx64.efi. Aber Grub besteht aus mehreren Teilen. Und viele Teilen liegen normalerweise unter /boot/grub, so wie zum Beispiel die Konfiguration.