만자로 리눅스에서 2021년 여름 즈음부터 sudo update-grub 명령어가 정상적으로 실행되지 않는 문제를 겪고 있었는데, 시간을 내어 수리를 시도해 봤습니다.

 

 

▼ 아래의 스크린 샷에서 하나의 SSD에 윈도우10, 우분투 리눅스, 만자로 리눅스, 페도라 리눅스까지 설치한 것을 os-prober로 확인할 수 있는데, sudo update-grub 이라고 입력해보면 "/usr/share/grub/grub-mkconfig_lib: 291 줄: printf: '\$': 유효하지 않은 서식 문자"라는 에러 메세지를 뿜으면서 중단되었습니다.

▲ cat -n /usr/share/grub/grub-mkconfig_lib | grep 291 명령어로 291번째 줄을 출력해 봤는데, 구문이 이해되지 않았습니다.ㅠㅠ

 

▼ kate /usr/bin/update-grub 이라고 입력하여 update-grub 명령어의 내용을 봤는데, 우분투 리눅스의 그것과 동일해서 특별히 문제될 것이 없어 보였습니다.

 

※ 해결 방법 1

만자로 리눅스(Manjaro Linux) GRUB2 수리(Repair) 쉬운 방법

▲ 만자로 리눅스 설치용 USB를 제작하여 부팅한 다음 GRUB2를 Repair하는 식으로 해결할 수 있었습니다. 지속적으로 이용하기에는 부담스럽습니다.

 

※ 해결 방법 2

https://bbs.archlinux.org/viewtopic.php?id=267763

https://www.technopat.net/sosyal/konu/arch-linux-grub-mkconfig-arizasi.1584960/#post-12110027

▲ 위 링크의 글들을 참고하여 아래처럼 명령어를 입력하는 방법이 있었습니다.

 

sudo LC_ALL=C /bin/bash -c "/usr/bin/grub-mkconfig -o /boot/grub/grub.cfg"

▲ 윈도우 10, 우분투 리눅스, 페도라 리눅스가 정상적으로 추가 되는 것을 확인했습니다.

 

링크의 글에서는 (앞으로 계속 이렇게 쓰기는 귀찮으니까) /usr/local/bin/ 경로에 grub-mkconfig 파일을 생성하고 내용을 sudo LC_ALL=C /bin/bash -c "/usr/bin/grub-mkconfig -o /boot/grub/grub.cfg" 명령어로 채우도록 권하는데, Arch Linux 기준의 권고사항이기 때문에 그대로 따라해야 될 지 고민이 됩니다.

 

※ 2022. 04. 13. 추가

스크린 샷의 에러 메세지에서 보였던 printf 구문의 옵션에 대하여 알고 싶어서 검색해 보았습니다.

https://man.archlinux.org/man/printf.1p

▲ Arch 리눅스 관련 문서를 보니, "LC_ALL"이라는 옵션이 보였습니다. 로케일을 설정하는 항목인 것 같습니다. 그렇다면 아래 스크린 샷처럼 입력해도 될 것 같아서 시도해 봤습니다.

 

sudo LC_ALL=C update-grub

▲ 에러 없이 진행이 됩니다.

 

▲ 임시 방편으로 /usr/bin/update-grub 파일을 에디터로 열어
exec 앞에 "LC_ALL=C "라고 추가했습니다.

 

Locale이 한국어로 설정됐을 때 string 기호의 유니코드가 바뀌는 버그가 있는 것 같습니다.

(눈으로 보기에는 똑같은 \$이지만 유니코드가 다른 경우가 있거든요.

예 : https://www.fileformat.info/info/unicode/char/search.htm?q=%24&han=Y&preview=entity )

어떻게 해야 고칠 수 있는지 모르겠습니다. -_-;;

누구든지 알려주시면 감사하겠습니다.

 

※ 참고할만한 글

 - Fedora 리눅스 update-grub 어떻게 하지?

반응형