20091215 :: Grub2로 업그레이드 하기

사실 이런 내용은 본 블로그의 분점(중 하나)인 ‘숩의 문제해결 레시피’에 올려야 마땅하겠지만, 문제 해결을 못하고 OS를 재설치한 관계로 -_-;; 그냥 본점에 올리게 되었습니다. 본 포스트의 주요 내용은 우분투 위키의 내용을 참고했습니다. (원문 : http://wiki.ubuntu.com/Grub2)

GRUB 란?

리눅스를 한 번도 설치해 본 경험이 없는 사람이라면 들어본 적이 없는 프로그램입니다. grub는 GRand Unified Bootloader의 줄인말로,  초기 부팅 시에 운영체제 (혹은 운영 체제의 커널)을 선택하여 부팅하게 도와주는 멀티 부트 로더입니다. 현재 grub2는 우분투 9.10 버전을 새로 설치하면 기본으로 설치됩니다. 엄밀히는 아직 2가 아니라 1.97 베타4 정도가 됩니다. (2009년 12월 현재)

Grub2 설치하기 (업그레이드)

윈도우가 설치된 머신에서 우분투를 설치하면 grub는 자동으로 설치됩니다. 제 경우에는 우분투 9.04 버전에서 9.10으로 업그레이드를 했는데, 왠지 이 경우에는 grub2로의 업그레이드는 포함이 되지 않았습니다. grub2로의 업그레이드를 위해서는 아래의 과정을 거쳐야 합니다. 초보자에게는 두렵기 그지 없는 존재인 ‘터미널’을 사용합니다. 터미널을 열고 다음의 명령을 실행합니다.

sudo apt-get install grub2

sudo를 통해 시스템의 깊은 곳(?!)을 건드리는 명령을 수행하면, ‘당신이 진짜 su가 맞냐’며 비밀 번호를 물어봅니다. 비밀 번호를 입력해 주시면 되겠습니다.그럼 뭔가 몇 가지 파일을 내려 받고 설치하게 됩니다. 설치 과정에서 몇 가지를 물어보게 됩니다.

  • grub-pc 설정과 관련하여 텍스트 기반으로 보여지는 대화상자가 보입니다. OK를 선택해주면 됩니다.
  • 체인로드가 어쩌구하는 부분을 물어봅니다. ‘Chainload from menu.lst’ –> ‘YES’
  • 다음은 커맨드 라인에서 무슨 명령어를 입력해 보라고 합니다. 그냥 엔터를 누릅니다.

이렇게 해서 설치과정이 끝난 것처럼 보입니다. 하지만 다가 아닙니다. 다시 아래 명령을 바로 입력해 줍니다.

sudo upgrade-from-grub-legacy

여기서 중요한 것이 있습니다. 설치된 하드 디스크를 보여주면서 어디에 grub를 설치할 것인지 물어봅니다. 보통은 (hd,0) /dev/sda가 부팅되는 파티션입니다. 제 경우에는 boot 플래그가 있는 하드 디스크 파티션이 이것 뿐이라 그런지 하나 밖에 표시가 안되더군요. 스페이스바를 눌러서 선택을 하고 엔터를 입력하여 계속 진행합니다. 만약, 마냥 설레기만 해서 그냥 엔터를 눌렀다면 나중에 다시 좀 귀찮게 손을 봐야 합니다.

sudo grub-install

를 입력해서 grub 설치를 완전히 완료합니다. 이제 기존의 설정 파일이나 그런 것들은 전혀 쓸모가 없으니 지워도 상관 없습니다… 라고하지만 혹시 모르니 기존 설정 파일은 잘 보관해 둡니다.

sudo mv /boot/grub/menu.lst /boot/grub/menu.lst.backup

Grub2의 설정들

grub 이전 버전과 달리 grub2는 (이제 익숙해지려고하니)  menu.lst 파일을 더 이상 사용하지 않습니다. 하지만 다른 파일들을 여전히 동일한 폴더에 보관하고 이를 사용합니다. 대표적인 파일은 /boot/grub/ 디렉터리에 있는 grub.cfg 파일입니다. 중요한 것은 이 파일은 결코 수동으로 편집해서는 안된다고 합니다. “update-grub” 명령을 통해서 변경 내용을 적용해야 하며, 이 파일은 다른 grub 설정 파일들을 변경/생성하는 근간이 된다고 하네요.
설정을 변경하기 위해서는 이제, 다른 파일을 편집해야 합니다. 이 파일은 다른 곳에 있는데, /etc/default/grub 라는 파일입니다.

# If you change this file, run 'update-grub' afterwards to update
# /boot/grub/grub.cfg.
GRUB_DEFAULT=0
GRUB_HIDDEN_TIMEOUT=0
GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT=10
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX=""
# Uncomment to disable graphical terminal (grub-pc only)
#GRUB_TERMINAL=console
# The resolution used on graphical terminal
# note that you can use only modes which your graphic card supports via VBE
# you can see them in real GRUB with the command `vbeinfo'
#GRUB_GFXMODE=640x480
# Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux
#GRUB_DISABLE_LINUX_UUID=true
# Uncomment to disable generation of recovery mode menu entrys
#GRUB_DISABLE_LINUX_RECOVERY="true"

재밌는 것은 디폴트 엔트리 값을 숫자가 아닌 엔트리 이름으로 지정할 수 있다는 것입니다. 커널을 업데이트 받거나해서 메뉴의 개수가 바뀌면 번호값이 따라 바뀌지 못해서 그 때마다 menu.lst 파일을 수정해야 했던 (혹은 몰라서 그랬을 수도 있음, 충분히.) 경험은 더 이상 없을 듯 하네요.

라이브 시디에서 Grub2 복구하기

참고로 저는 설치가 완료되기 전에 귀신에 홀린 듯이 menu.lst 파일을 삭제한 관계로 아예 부팅이 되지 못했습니다. 아래 내용을 좀 미리 알게되었더라면 그러지 않아도 됐을텐데요 엉엉. 아무튼 여기서는 /etc/default/grub 파일의 설정을 어떻게 해야하는지 안다는 전제하에 설명을 해 두었네요. 당연히 파일을 날려 먹었다는 답이 없다는 이야깁니다. 평소에 백업을 잘 해두거나  /home 디렉터리를 다른 안전한 파티션에 두고서 아예 새로 설치하는게 가장 맘편하고 깔끔할 수 있겠다는 생각이 듭니다. 저처럼 대책없이 백업도 안하고 슥슥 잘도 파일들을 지우는 습성은 안 가지시는게 좋아요 ㅠㅠ
우선 grub 복구를 위해서는 라이브 시디가 필요합니다. 미리 하나 구워두는 건 정말 중요한 듯 하네요. 라이브 시디로 부팅한 후 터미널을 엽니다.

sudo fdisk -l

위와 같이 입력하면 어떤 디스크 장치들이 있는지 파티션 목록을 뽑아줍니다. 이 때 리눅스가 설치된 파티션이 나옵니다. 잘 눈여겨봐 둡니다. 제 경우에는 /dev/sda5네요

sudo mount /dev/sda5 /mnt

혹, /boot 디렉터리를 다른 파티션에 만들어 두고 사용중이시라면 이것도 마운트해 줍니다. 이 때에는 윗 부분과 바뀌면 큰일 난다고 합니다. fdisk -l 의 결과를 확인하고 확인하고 또 확인해야 합니다.

sudo mount /dev/sda7 /mnt/boot

이제 남은 장치들을 마저 마운트합니다.

sudo mount –bind /dev /mnt/dev

이제 루트 디렉터리를 변경합니다.

sudo chroot /mnt

이제 기존 리눅스가 설치된 파티션이 루트로 마운트 되었으니, 그냥 설정을 수정한다 생각하고 작업합니다. vi 나 nano를 통해  /etc/default/grub 파일을 편집합니다.

vi /etc/default/grub 혹은 nano /etc/default/grub

설정을 복구하였으면, 이제 변경된 설정이 적용되도록 합니다. 위에서 봤던 명령으로요.

update-grub

이제 MBR에 grub를 재설치합니다.

grub-install /dev/sda

만약 에러가 난다면 굴하지 않고, –recheck 옵션을 써서 다시 시도합니다.

grub-install –recheck /dev/sda (위에서 오류가 난 경우에만)

다 되었습니다. ctrl+D를 눌러 chroot 상태를 빠져나옵니다. 이제 마운트한 장치들을 마운트 해제하고 시스템을 다시 시작합니다.

sudo umount /mnt/dev && sudo umount /mnt

오늘의 교훈 –  vi 를 쓰면 정신 건강에 정말 안 좋은지 요즘 많은 영문 매뉴얼은 nano를 공식 추천한다.

Read more

워드프레스에서 고스트로 이전

워드프레스에서 고스트로 이전

이 글을 쓰면서도 믿기 힘든 사실인데, 블로그라는 걸 처음 시작한지가 20년이 되었습니다. 이글루스에서 처음 시작했다가, SK컴즈가 인수한다고 발표함과 동시에 워드프레스로 플랫폼을 옮겼죠. 워드프레스오 옮긴 이후에는 호스팅 환경을 이리 저리 옮기긴 했지만 거의 18년 가까이 워드프레스를 사용해온 것 같습니다. 그 동안 워드프레스는 블로깅 툴에서 명실상부한 범용CMS로 발전했습니다. 사실 웬만한 홈페이지들은 이제

By sooop
띄어쓰기에 대한 생각

띄어쓰기에 대한 생각

업무 메일을 쓸 때 가장 많이 쓰는 말 중에 하나가 메일 말미에 ‘업무에 참고 부탁 드립니다.‘인데요, 어느 날부터 아웃룩에서 이 ‘부탁 드립니다’가 틀렸다고 맞춤법 지적을 하기 시작했습니다. 맞는 말은 ‘부탁드립니다’라고 붙여 쓰는 거라고. 사실 아래아한글 시절부터 이전의 MS워드까지, 워드프로세서들의 한국어 맞춤법 검사 실력은 거의 있으나 마나 한

By sooop

구글 포토에서 아이클라우드로 탈출한 후기

한 때 구글 포토가 백업 용량을 무제한으로 제공해 주겠다고해서, 구글 포토를 사용해서 사진을 백업해왔습니다. 물론 이 이야기의 결말은 저나 이 글을 읽고 있는 여러분이나 모두 알고 있습니다. 사실 AI에게 학습 시킬 이미지 데이터를 모으기 위한 것일 뿐이라거나 하는 이야기는 그 당시에도 있었습니다만, 에이 그래도 구글인데 용량은 넉넉하게 주겠지…하는 순진한

By sooop

Julia의 함수 사용팁

연산자의 함수적 표기 Julia의 연산자는 기본적으로 함수이며, 함수 호출 표기와 같은 방식으로 호출하는 것이 가능합니다. 또한 그 자체로 함수이기 때문에 filter(), map() 과 같이 함수를 인자로 받는 함수에도 연산자를 그대로 적용하는 것이 가능합니다. 특히 + 연산자는 sum() 함수와 같이 여러 인자를 받아 인자들의 합을 구할 수 있습니다. 2 + 3 # = 5 +(2,

By sooop