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