Configure onde o bloco de ambiente do GRUB2 está localizado

4

Tenho Arch, Ubuntu e GRUB2 instalados em um sistema de arquivos BTRFS. Estou ciente de que o GRUB não pode gravar no BTRFS por vários motivos e, portanto, não pode salvar variáveis de ambiente em /boot/grub/grubenv .

Eu tenho espaço não utilizado no início e no final do meu disco (devido ao alinhamento), e sou levado a acreditar que o sistema de arquivos BTRFS também tem algum tipo de área de "armazenamento arbitrário".

Existe alguma maneira de configurar o GRUB para usar qualquer uma dessas áreas para armazenar variáveis de ambiente persistentes, em vez de tentar (e falhar) usar o arquivo /boot/grub/grubenv ?

    
por Mark K Cowan 14.02.2015 / 19:01

1 resposta

0

save_env e load_env aceitam um parâmetro --file opcionalmente.

Se você pesquisar 00_header em /etc/grub.d, poderá definir uma variável no topo como:

GRUBENV="(hd0, msdos1) / grubenv"

e abaixo na primeira estrofe de eco:

grubenv="$ GRUBENV"

Então você pode encontrar o load_env e torná-lo

load_env --file "\ $ {grubenv}"

E pesquise todos os save_env's e altere-os para

save_env --file "\ $ {grubenv}"

Copiar grubenv de / boot / grub / grubenv para / mnt / myfatpart (onde quer que você monte (hd0,0) no exemplo acima)

update-grub

Exemplo:

...

# 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
    
por 20.11.2018 / 13:29