UEFI変数を削除できません。残りのスペースはありません/作業は許可されていません。

UEFI変数を削除できません。残りのスペースはありません/作業は許可されていません。

新しいコンピュータにArch Linuxをインストールし、ブートローダを設定する必要があるポイントに達しましたが失敗します。

# bootctl install
Failed to create EFI Boot variable entry: No space left on device

変数を見ると問題があることがわかります。

# ls -la /sys/firmware/efi/efivars --sort=size --reverse
...
-rw-r--r-- 1 root root    6 May 17 17:50 BootCurrent-8be4df61-93ca-11d2-aa0d-00e098032b8c
-rw-r--r-- 1 root root   12 May 17 17:50 334-71db7b7e-4165-48fa-ac9d-f9af4cefc534
-rw-r--r-- 1 root root   36 May 17 17:50 2151678337-417acee0-6fa9-4a82-99d7-f9b1dd271e48
-rw-r--r-- 1 root root  124 May 17 17:50 Boot0000-8be4df61-93ca-11d2-aa0d-00e098032b8c
-rw-r--r-- 1 root root 2.3K May 17 17:50 2151678336-417acee0-6fa9-4a82-99d7-f9b1dd271e48

すべてのスペースを占める非常に大きなファイルがあります。/boot数分前に日付が同じ名前のフォルダがあり、失敗したbootctl試みの1つが何とかすべてのスペースを占める巨大なUEFI変数を生成したようです。これを削除すると、開始変数を正しく設定するのに十分なスペースが確保されているように見えましたが、残念ながらこれは不可能でした。

# rm 2151678336-417acee0-6fa9-4a82-99d7-f9b1dd271e48 
rm: cannot remove '2151678336-417acee0-6fa9-4a82-99d7-f9b1dd271e48': Operation not permitted

ルートとしてもファイルを削除できません。削除できるようになりました一部他の変数はありますが、目的の変数を削除することはできず、すべての可能な変数を削除した後でも変数を追加することはできません。

NVRAMスペースを解放するためにこの偽のUEFI変数を削除する方法は?

答え1

しかし、UEFI変数が誤って削除されるのを防ぐために、デフォルトではホワイトリスト内の変数のみを削除できるようになっていることがわかりました。他のものは、誤って削除されるのを防ぐために不変としてマークされています。

# lsattr
-------------------- ./BootCurrent-8be4df61-93ca-11d2-aa0d-00e098032b8c
----i--------------- ./334-71db7b7e-4165-48fa-ac9d-f9af4cefc534
----i--------------- ./2151678337-417acee0-6fa9-4a82-99d7-f9b1dd271e48
-------------------- ./Boot0000-8be4df61-93ca-11d2-aa0d-00e098032b8c
----i--------------- ./2151678336-417acee0-6fa9-4a82-99d7-f9b1dd271e48

rm -rf /これは、いくつかのバグがあるファームウェア実装の起動失敗を引き起こすことが判明した未知のUEFI変数を実行時に消去しないようにするためです。 (仕様では、すべてのUEFI変数を削除した状態でシステムが正常に起動する必要があると述べていますが、一部のシステムは互換性がなく、このようにレンガが積み重ねられる可能性があります。)

変更できない属性を最初に削除する必要があります。

# chattr -i 2151678336-417acee0-6fa9-4a82-99d7-f9b1dd271e48

それでも変数を削除または上書きすることはできませんが、他の変数を削除することはできます。それでも新しい変数を追加することはできませんでしたが、再起動後、Linuxは余分なスペースを解放し、bootctl install最終的に成功しました。

他の同じマシンと比較すると、この巨大なUEFI変数が実際に必要な場所にあることがわかりました!したがって、Linuxを使用するこれらのシステムでは、ブート変数のための空き容量が非常に少なくなります(Linuxは、利用可能なスペースが50%未満の場合、UEFI変数の書き込みを明らかに拒否するためです)。

efi_no_storage_paranoia編集:アイドルEFI可変スペースが50未満になった後に起動に失敗した以前のファームウェアの1つがファームウェアでないことを確認する限り、パラメータを使用してカーネルを起動してこの制限を無効にし、EFIストレージ全体にアクセスすることもできます。 %.

関連情報