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