2014/11/25

Ubuntu VirtualBox Guest 복구


Virtual Box 4.3.18로 우분투 14.10 게스트 가상 머신을 EFI 모드 + btrfs 파일시스템으로 설치했는데 설치 후 부팅이 안되는 문제가 있었다. 우분투 14.10의 문제인지 버추얼 박스 문제인지는 확실하지 않다. 마침 어제 Virtual Box 4.3.20 update가 떠서 홈페이지 ChangeLog를 봤더니 EFI 수정사항이 있단다. 업그레이드하고 나서 그간 방치했던 우분투 14.10 게스트를 다시 돌려 봤으나 역시 안돌아 간다.

Virtual Box 4.3.20 Upgrade...

그런데, EFI 모드 + btrfs 파일시스템인 우분투 14.04 게스트 가상 머신은 호스트를 우분투 14.10으로 Clean Inastall 하고 나서도 잘 돌아가던 놈이다. Virtual Box Guest를 upgrade하려고 이놈을 부팅했더니 로그인 후 먹통이다. 콘솔 모드로는 로그인이 가능해서 Guest Additions를 설치하려고 했으나 [Device] > [Insert Guest Additions CD Image...] 메뉴를 사용하면 이미 mount 되어 있어서 mount가 안된다고 경고 창만 뜬다. 일단, 콘솔에서 강제로 아래와 같이 설치했다.

$ sudo mount /dev/cdrom /mnt
$ cd /mnt
$ sudo ./VBoxLinuxAdditions.run

$ sudo reboot

Virtual Box Guest에 발생한 문제들

재부팅하고 나니 문제가 더 심각해 져 있었다. EFI System Partition이 마운트가 안돼서 Skip하던지 Manual로 마운트 해 보란다. 놀랍게도 Skip을 하니까 부팅은 된다. 화면 크기 조정도 안되고 투명창 효과도 사라진 걸 보니 Guest Additions가 잘못 설치됐을 거란 생각이 들어 다시 설치하려고 iso 파일을 마운트하려고 했더니 황당한 오류가 발생...

$ sudo mount /dev/cdrom /media/cdrom
mount: unknown filesystem type 'iso9660'
EFI System Partiton을 마운트 하면 아래와 같은 오류 메시지가 나온다.

$ mount -t vfat /dev/sda1 /mnt
mount: wrong fs type, bad option, bad superblock on /dev/sda1,
       missing codepage or helper program, or other error
       In some cases useful info is found in syslog - try
       dmesg | tail  or so
$ dmesg | tail
[ 1605.267871] FAT-fs (sda1): IO charset iso8859-1 not found
또 다른 문제도 발생했는데 패키지 관리 시스템까지 망가진 것이다. apt-get install -f 하란다.

$ sudo apt-get install -f
....... 
E: Internal Error, No file name for libc6
W: Could not perform immediate configuration on 'multiarch-support:x86_64'. Please see man 5 apt.conf under APT::Immediate-Configure for details. (2)
E: Sub-process /usr/bin/dpkg returned an error code (1)
음... 망가져도 이렇게 우분투가 망가지는 걸 본건 처음이다. 기왕 망가진거 우분투 설치 iso 로 부팅해서 복구해 보기로 했다.

우분투 설치 iso로 우분투 게스트 부팅 후 복구

버추얼 박스 Storage에 우분투 14.04.1 iso 이미지를 CD에 지정하고 재부팅한 후 터미널을 띄워서 Grub을 우선 복구했다. 참고로 /dev/sda2가 우분투가 설치된 btrfs 파일시스템이고, /dev/sda1이 EFI System Partition이다.

$ sudo -i

$ mount -o subvol=@ /dev/sda2 /mnt
$ mount -o subvol=@home /dev/sda2 /mnt/home
$ for i in /sys /proc /run /dev; do mount --bind "$i" "/mnt$i"; done

$ chroot /mnt
$ mount /dev/sda1 /boot/efi
$ grub-install /dev/sda
$ update-grub

그 다음은 패키지 관리 시스템을 복구했다. 먼저, 시스템 전체가 망가진것인지 확인하기 위해서 아래 명령이 정상인지 확인한다.

$ /bin/date

결과가 다행히 정상이다. 즉, 패키지 데이터베이스만 깨진 것이다. 패키지 status backup 파일 중 괜찮아 보이는 놈을 사용하기로 했다.

$ mv /var/backups/dpkg/dpkg.status.2.gz /var/lib/dpkg/
$ cd /var/lib/dpkg
$ mv status org-status
$ gunzip ./dpkg.status.2.gz
$ mv dpkg.status.2 status

$ reboot

여기 까지 하고 나서 재부팅해서 apt-get update 했더니 반응이 없다. 저장소 서버를 교체해 줄 필요가 있어 보였다. 소프트웨어 저장소 서버를 KAIST FTP에서 Main 서버로 교체했다.

$ apt-get update
$ apt-get upgrade

교체 후 위 두 명령이 제대로 동작한다. 소프트웨어 upgrade가 동작하는 것을 보니 패키지 관리 시스템은 복구가 된 것이 분명하다.

문제는 앞서의 mount 오류가 여전히 발생하고 있다는 것이다. 그런데 upgrade 목록에서 새 Kernel이 마침 올라와 있어서 혹시나 하고 Kernel을 Uprade 한 후 재부팅 했더니 mount 문제도 해결됐다.

그리고 나서, Virtual Box Guest Additions도 다시 설치하고 재부팅하니 모든 것이 정상으로 돌아왔다.

복구 소감

어디서 부터 문제가 시작된 것인지는 너무 당황하고도 급하게 복구하느라 정확히 알 수 없지만 Virtual Box Upgrade를 앞으로는 좀더 신중하게 할 필요가 있겠다.

우분투 14.10이 EFI 모드에서 안돌아 가는 문제가 해결됐는지는 Virtual Box 14.10 저장소 버전이 나온 후 다시 시도해 볼 필요가 있겠다. EFI 문제인지 EFI + btrfs 파일시스템 문제인지도 확실하지 않다.

댓글 없음:

댓글 쓰기