GRUB2環境ブロックの位置設定

GRUB2環境ブロックの位置設定

BTRFSファイルシステムにArch、Ubuntu、およびGRUB2がインストールされています。 GRUBはいくつかの良い理由でBTRFSに書き込むことができないので、環境変数を/boot/grub/grubenv

ディスクの始めと終わりに未使用の領域があり(並べ替えのため)、BTRFSファイルシステムにもある種の「任意の保存」領域があると思います。

ファイルを使用しようとしたり失敗したりする代わりに、これらの領域を使用して永続環境変数を保存するようにGRUBを設定する方法はありますか/boot/grub/grubenv

答え1

save_env と load_env はオプションで --file 引数を使用します。

/etc/grub.dで00_headerを検索すると、上部に次のように変数を設定できます。

GRUBENV="(hd0,msdos1)/grubenv"

次の最初のエコスタンザ:

grubenv="$GRUBENV"

その後、load_envを見つけて作成できます。

load_env --ファイル "\${grubenv}"

すべてのsave_envを検索して次のように変更します。

save_env -- ファイル "\${grubenv}"

... grubenvを/boot/grub/grubenvから/mnt/myfatpartにコピーします(上記の例では、マウントされた場所(hd0,0))。

グラップアップデート

例:

...

# You should have received a copy of the GNU General Public License
# along with GRUB.  If not, see <http://www.gnu.org/licenses/>.

# Akua - grubenv doesn't survive on ZFS
GRUBENV="(hd0,msdos1)/grubenv"

...

if [ "x${GRUB_TIMEOUT_BUTTON}" = "x" ] ; then 
GRUB_TIMEOUT_BUTTON="$GRUB_TIMEOUT" ; fi

cat << EOF
# Akua - grubenv doesn't survive on ZFS
grubenv="$GRUBENV"

# Akua
if [ -s "\${grubenv}" ]; then
  set have_grubenv=true
  # Akua
  load_env --file "\${grubenv}"
fi

...

 akua@blackbird:~ 09:08 / 
 $ grep grubenv /etc/grub.d/00_header
# Akua - grubenv doesn't survive on ZFS
GRUBENV="(hd0,msdos1)/grubenv"
# Akua - grubenv doesn't survive on ZFS
grubenv="$GRUBENV"
if [ -s "\${grubenv}" ]; then
  set have_grubenv=true
  load_env --file "\${grubenv}"
   save_env --file "\${grubenv}" prev_entry
   save_env --file "\${grubenv}" next_entry
   save_env --file "\${grubenv}" next_entry
  save_env --file "\${grubenv}" saved_entry
  save_env --file "\${grubenv}" prev_saved_entry
save_env --file "\${grubenv}" saved_entry
    if [ -n "${have_grubenv}" ]; then if [ -n "${partuuid}" ]; then
      save_env --file "${grubenv}" prev_entry
  save_env --file "${grubenv}" initrdfail
  if [ -n "\${have_grubenv}" ]; then if [ -z "\${boot_once}" ]; then save_env --file "\${grubenv}" recordfail; fi; fi

関連情報