윈7하고 우분투를 같이 쓰고있는데
부트로더라고 하나요? grub2 창이 뜨는데 그게 안보이게 하면서
원할때는 우분투로 부팅하고 싶은데 나름 검색한다고 해봤는데 해결을 못했습니다.
화면 보이는 시간을0으로 맞추고 시프트나 esc를 누르고 있으면 부트로더화면이 나온다는데
키를 아무리 누르고 있어도 그냥 디폴트인 윈도로 들어가지더라구요;;
시간을 0으로 맞추는건 성공했습니다. 덕분에 우분투로 전혀 부팅할 수 없었구요 ㅠ.ㅠ
도와주세요
윈7하고 우분투를 같이 쓰고있는데
부트로더라고 하나요? grub2 창이 뜨는데 그게 안보이게 하면서
원할때는 우분투로 부팅하고 싶은데 나름 검색한다고 해봤는데 해결을 못했습니다.
화면 보이는 시간을0으로 맞추고 시프트나 esc를 누르고 있으면 부트로더화면이 나온다는데
키를 아무리 누르고 있어도 그냥 디폴트인 윈도로 들어가지더라구요;;
시간을 0으로 맞추는건 성공했습니다. 덕분에 우분투로 전혀 부팅할 수 없었구요 ㅠ.ㅠ
도와주세요
먼저, timeout을 0으로 설정하셨다는 것이 어떻게 하셨는지가 궁금합니다.
만일 /etc/default/grub에서 GRUB_TIMEOUT을 0으로 설정하시고, sudo update-grub 명령을 사용하셨다면,
SHIFT키가 동작하게 끔 되어 있습니다.
하지만, grub-customizer등을 사용하였다면 이것이 어떻게 grub.cfg를 변경할 지는 장담할 수 없습니다.
/etc/grub.d/30_os-prober 라는 파일을 보면 다음과 같은 함수가 있습니다.
[code:6ba18x6e]make_timeout () {
if [ "x${found_other_os}" = "x" ] ; then
if [ "x${1}" != "x" ] ; then
if [ "x${GRUB_HIDDEN_TIMEOUT_QUIET}" = "xtrue" ] ; then
verbose=
else
verbose=" --verbose"
fi
if [ "x${1}" = "x0" ] ; then
cat <<EOF
if [ "x${timeout}" != "x-1" ]; then
if keystatus; then
if keystatus --shift; then
set timeout=-1
else
set timeout=0
fi
else
if sleep$verbose --interruptible 3 ; then
set timeout=0
fi
fi
fi
EOF
else
cat << EOF
if [ "x${timeout}" != "x-1" ]; then
if sleep$verbose --interruptible ${GRUB_HIDDEN_TIMEOUT} ; then
set timeout=0
fi
fi
EOF
fi
fi
fi
}
[/code:6ba18x6e]
이것을 해석해 본다면,
첫번째 매개변수(GRUB_HIDDEN_TIMEOUT)이 0일 경우
1-1. timeout이 무한대(-1)가 아닌 경우, 즉 설정되어 있는 경우,
시프트키가 눌렸는지 검사하고, 눌리면 timeout을 -1로 설정하여, 타임아웃을 제거합니다. 이것은 자동부팅을 하지 않는 것입니다.
시프트키가 아닌 다른 키를 누른 경우, timeout을 0으로 설정하여, 카운트다운을 강제로 마칩니다. 이것은 바로 부팅하게 하죠.
아무런 키 입력도 없다면, 3초간 ESC키를 기다리다가 그 사이에도 ESC키가 안눌리면, 바로 부팅합니다.
ESC를 누르면, 아무 것도, 안하기 때문에, 카운트 다운이 계속됩니다.
첫번째 매개변수(GRUB_HIDDEN_TIMEOUT)이 0이 아닌 경우
2-1. timeout이 무한대(-1)가 아닌 경우, 즉 설정되어 있는 경우,
GRUB_HIDDEN_TIMEOUT의 시간 동안, ESC키를 기다리다, 안눌리면, 바로 부팅합니다.
여기서 timeout 값은, /etc/grub.d/00_header 에 의해 GRUB_TIMEOUT 의 값으로 초기화 됩니다.
즉, SHIFT키를 검사하는 것은, GRUB_HIDDEN_TIMEOUT=0 이고, GRUB_TIMEOUT이 -1이 아닌 경우이며,
이 경우, 키입력에 대한 반응은
SHIFT키를 누른 적이 있다면 메뉴가 나타나고, 카운트다운을 하지 않습니다.
다른 키를 누른 적이 있다면, 바로 부팅합니다.
아무런 키도 누른적이 없다면, 3초간 ESC를 기다리고(메뉴가 나타나더라도 이것은 3초 후 혹은, ESC키를 눌러야 됩니다), 3초가 지나면, 바로 부팅합니다.
GRUB_HIDDEN_TIMEOUT이 설정되고, GRUB_TIMEOUT이 -1이 아니면, GRUB_HIDDEN_TIMEOUT 시간 동안 ESC키를 기다립니다.
메뉴가 나타나더라도, 이 시간 후에나 나타납니다.
종합해 본다면, GRUB_HIDDEN_TIMEOUT은 메뉴가 나타날 때 까지의 ESC를 기다리는 대기시간이고,
이 시간 만큼은 ESC키를 누르지 않는 한, 무조건 기다리게 됩니다.
SHIFT키를 이용하는 것은, 하드부팅 시작 부터, CMOS 설정을 지난 시점에서, 바로 SHIFT키를 눌러야 효과가 나타날 것으로 보입니다.
설령 GRUB_TIMEOUT=0으로 설정되었다 하더라도, GRUB_HIDDEN_TIMEOUT이 0인 이상, SHIFT키를 감지하기 때문에,
SHIFT키를 난사해야 할 것으로 봅니다.
GRUB_HIDDEN_TIMEOUT을 0도 아니고, 아무것도 설정하지 않은 경우, 3초간 무조건 기다리기 때문에,
이사이에 ESC키를 누르시면 될 것입니다.
그것에 자신이 없다면, GRUB_HIDDEN_TIMEOUT을 1-3 정도로 지정하고, GRUB_TIMEOUT=0으로 설정하고,
1-3초간 대기하는 시간 사이에, ESC키를 눌러야 할 것으로 봅니다.
그러나, GRUB_TIMEOUT과 GRUB_HIDDEN_TIMEOUT은 /etc/default/grub 파일에서 설정하는 것이기 때문에, 리눅스에서 해야 합니다.
만일 /etc/default/grub과 sudo update-grub을 사용하지 않고, grub.cfg에 set timeout=0 으로 설정되었다면,
SHIFT키가 듣지 않을 수 있고, GRUB으로 부팅이 안됩니다.
그런 상태라면, 윈도우즈에서 ext2fsd를 설치해 부트파티션을 마운트, 혹은 우분트 라이브 CD나 USB 혹은 ISO로 부팅하신 후, 부트파티션을 마운트 하셔서
grub.cfg를 편집하셔서 강제적으로 timeout을 초기화 해줘야 할 것입니다.
menuentry로 시작하는 줄을 찾으신 후,
그 윗 줄에, set timeout=-1 의 내용으로 새 줄을 추가하신 후, 저장하시고 리부팅 해보세요.
이후에는 위에 설명드린 방법과 같이, /etc/default/grub을 변경하시고 sudo update-grub을 하시면 됩니다.
------------------------------- 수정 합니다 --------------------------------------
if [ "x${found_other_os}" = "x" ] ; then
이 부분을 해석하지 않았네요 ㅠㅠ
os_prober에서 다른 운영체제를 발견하지 못한 경우에 한해 위의 코드를 삽입합니다.
즉, GRUB_HIDDEN_TIMEOUT은 다른 운영체제가 존재하지 않을 경우에만 의미를 가집니다.
또한, 그럴 경우에만, SHIFT키를 검사하고, 대기시간에 복잡한 처리를 합니다.
멀티 부팅의 경우에는 위의 코드는 완전히 무시되어, 강제적으로 timeout을 GRUB_TIMEOUT으로 설정하며,
부팅이 실패할 경우에는 -1로 설정하여 자동 부팅을 하지 않습니다.
아… 맨붕이군요.
코드가 문제가 있는 것으로 생각됩니다.
멀티 부팅이 아닌 경우에만, 타임아웃 및 SHIFT 처리를 하는 것이기 때문에, 바꾸어야 하지 싶습니다.
/etc/grub.d/30_os-prober를 다음과 같이 변경하는 것이 좋을 것 같습니다.
if [ "x${found_other_os}" = "x" ] ; then
==>
#if [ "x${found_other_os}" = "x" ] ; then
if true; then
if [ "x${timeout}" != "x-1" ]; then
==>
if [ "$recordfail" != 1 ]; then
if [ "x${timeout}" != "x-1" ]; then
fi
EOF
==>
fi
fi
EOF
이런 식으로, found_other_os인 경우에만 처리하는 것을 recordfail이 1이 아닌 경우에만 처리하도록 바꾸어야,
SHIFT 검사 및 타임아웃에 대해 복잡한 처리를 할 것입니다.
매우 상세한 답변 감사드립니다 ㅠ.ㅠ 감동
답변주신거 일찌감치 확인했는데 해볼시간이 없어서 계속 미루다가 오늘 간신히 해봤습니다.
추가로 글 써주신것까지 보고 해봤지만 왠지 잘 안되더군요. (제가 스크립트자체도 잘 몰라서 설정을 잘 못한것 같습니다.)
말씀하신데로 grub2자체의 버그인것 같습니다.
그래서 다시 검색해서 해결법을 찾았습니다.
http://befehlen.wordpress.com/2010/08/0 ... %EA%B8%B0/일단 이거대로 하니까 shift를 눌렀을때만 메뉴가 나오는건 되는 것 같습니다.
혹시 찾는 분이 있을까 해서 링크합니다.
안타까운것은 저 블로그 글이 2010글인데 여전히 같은 버그가 있다는게 ;;