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

관련 정보