配置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))

更新grub

例子:

...

# 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

相关内容