2015/03/13
우연과 과학
우연
무념무상이었는데 뜬금없이 빌 브라이슨의 "거의 모든 것의 역사"에서 태양계 모든 행성 들의 궤도를 책 한 페이지에 그림으로 표현하기 어렵다는 대목이 떠올랐다. 행성간 거리가 엄청나게 멀리 떨어져 있기 때문에 당연한 것이다.
그런데, 뜬금없다는 것은 공돌이의 직감으로 행성 들의 거리 간에 일정한 관계가 있을지도 모른다는 생각이 들었기 때문이다. 태양으로부터 각 행성까지의 거리를 log 함수로 표현하면 직선이 되지 않을까하는 생각이 들었다.
Wikipedia를 뒤져서 수성에서 해왕성까지 행성들의 거리를 찾아서 LibreOffice Calc에 기록하고 line chart로 ln(거리)를 그려 보았다. 앗, 정말 거의 직선이다. 그런데, 수성 ~ 화성, 목성 ~ 해왕성, 두 개의 기울기가 다른 직선이 그려졌다. 가만히 생각해 보니 화성과 목성 사이에 소행성대(asteroid belt)가 있지 않은가? 그걸 집어 넣으면 수성 ~ 해왕성까지 거의 하나의 직선이 될 수 있었다. Linear regression까지는 귀찮아서 눈 대중으로 chart에서 소행성대 거리의 ln 값을 대충 넣어서 거리를 역산한 후 소행성까지의 거리를 대략 구해 보았다. 또, 직선을 연장해서 명왕성(Kuiper belt)까지의 거리도 대충 계산하였다. 혹시 발견되지 않은 Nibiru 행성 X가 있다면 그 위치도 대략 알 수 있을 것이다. 아래 화면에서 녹색 부분은 눈대중으로 계산한 거리이다.
이제 위에서 얻은 거리 값들을 Wikipedia에서 찾은 값들과 비교해 보기로 하였다. 소행성대와 명왕성까지의 거리가 대충 잘 들어 맞는다. 소행성대는 2.2~3.3AU(1AU는 지구와 태양간 거리)이고 명왕성은 50AU 정도란다.
티티우스-보데의 법칙
헐~! Wikipidia에서 소행성대 거리를 찾아 보다가 위의 발견이 티티우스-보데의 법칙을 재발견한 것이라는 것을 알았다. 소행성대의 세레스도 조물주가 우주를 건축했다면 화성과 목성 사이에 무엇인가가 있어야 한다는 티티우스-보데의 법칙으로부터 발견한 것이었다는...!!!
이제 100AU 근처에서 Nibiru가 발견되길~!!!
과학이라는 것
사실 호기심과 끈기만 있으면 누구나 과학자가 될 수 있다. 다만, 옛날과는 달리 새롭게 발견할 꺼리가 많이 줄어 든 것도 사실이다. 그래도 인간은 모르는게 많기 때문에 새로운 세대들이 실망할 필요는 없을 것이다.
내가 천문학자였다면 왜 행성들이 저렇게 질서 정연한 거리를 두고 태양계에 배치될 수 밖에 없는지에 대해 파고들었겠으나 지금은 언젠가 뜬끔없이 영감이 떠오르기를 바랄 뿐이다.
Labels:
science,
solar system
2015/03/01
Ubuntu 14.10 fdisk와 gdisk
Ubuntu 14.10의 fdisk에서 GPT 파티션 지원 시작
우분투 14.10부터 fdisk에서 GPT 파티션도 지원하기 시작했다는 것을 우연히 발견했다. 당연히 fdisk는 DOS(MBR) 파티션에 사용하고 GPT 파티션 작업에는 gdisk(GPT fdisk라고도 함)를 사용해 왔기 때문이다. 아래에 새로운 fdisk와 gdisk 메뉴 스크린 샷을 첨부한다.
gdisk가 fdisk로 완전히 통합될지는 모르겠지만 아직은 gdisk에 너무 익숙해서 fdisk를 쓰고 싶은 마음이 생기지는 않는다. 여기서는 gdisk의 몇가지 팁들을 남겨두고자 한다.
gdisk를 이용한 파티션 테이블 정보 관리
아래 화면과 같이 GPT 파티션 Table 정보와 Protected MBR 파티션 정보를 gdisk로 관리할 수 있다. Multi-OS 환경에서 이 정보들은 잘 Backup 해둘 필요가 있다. Linux는 Gparted/parted, Windows는 Disk Manager/diskpart, Mac OS X는 Disk Utility와 같이 OS 별로 저마다의 Disk 관리 Tool 들이 있는데, 이 들이 디스크 파티션 변경시 저마다의 방법으로 파티션 Table 정보를 변경해 버리기 때문이다.
가령, Mac OS X의 Disk Utility로 Disk의 마지막 파티션을 미할당 상태로 남겨 두고 리눅스에서 Gparted로 fat32 파티션을 새로 할당하면 Protected MBR 파티션 정보가 Hybrid-MBR 파티션 정보로 바뀐다. 이 상태에서 Windows로 부팅하면 자동 복구 모드로 넘어 가는데 복구하면 파티션이 완전히 망가지는 경험을 하게된다. 한가지 경험담을 더 예로 들면, Windows에서 fat32 파티션을 지웠다가 다시 생성했더니 Mac OS X로 부팅할 수 없는 문제가 발생했다. 이런 일이 어느 날 갑자기 생기면 Mac OS X의 문제라고 생각하고 OS 재설치를 시도하게 된다. 그러나 재설치를 해도 재부팅 후 Mac OS X로 부팅할 수 없게 된다. Mac OS X의 Disk Utility로 verify 해 보면 파티션 오류가 발생하고 복구할 수는 없다. 나중에 알고보니 Mac OS X 파티션 Type 정보가 "Apple HFS/HFS+"였는데 "Microsoft basic data" Type으로 바뀌어서 발생한 문제였다.
gdisk는 파티션 테이블 원본을 Binary 파일로 Backup했다가 문제가 생겼을 때 복구하거나, 아니면 파티션 정보를 텍스트 파일로 저장했다가 나중에 수작업으로 파티션 정보를 일일이 복구할 수 있도록 해준다. 위의 경험담은 어쩌면 지극히 일부의 문제 사례일 것으로 추정된다. 즉, Multi-OS 환경에서 특정 OS의 디스크 관리 툴을 가지고 파티션 추가/삭제/변경 작업시 파티션 테이블의 어떤 정보가 동시에 변경될지 예측하기 어렵다. 특정 OS로 갑자기 부팅이 안되는 문제가 발생하면 gdisk로 파티션 테이블 변경 사항이 있는지를 가장 먼저 확인하는 것이 좋다. 파티션 테이블만 복구하면 대부분의 문제가 해결된다.
gdisk 활용 팁
파티션 Type이 변경된 경우, gdisk의 l(list known partition types) 명령으로 파티션 Type code를 알아낸 후 t(change a partition's type code) 명령으로 해당 파티션의 code를 변경해 주면 된다.
리눅스 GPT 파티션들은 Gparted로 파티션을 새로 만들면 파티션 Type code가 0700(Basic data partition)이 된다. 이 파티션은 Windows로 부팅시 탐색기에서 새로운 드라이브로 보이는데 마우스로 클릭하면 포맷할지 물어본다. 이 자체가 사용자의 실수를 유발할 수 있기 때문에 Windows에서 리눅스 파티션이 아예 보이지 않도록 해 줄 필요가 있다. gdisk에서 Type code를 8300(Linux filesystem)으로 바꿔주면 Windows 탐색기에 더이상 리눅스 파티션이 보이지 않게 된다.
순수 UEFI-GPT Multi-OS 환경에서는 Protected MBR 파티션은 디스크 전체가 하나의 파티션으로 잡혀야 하는데 Hybrid-MBR 파티션 정보로 바뀌면 여러 개의 파티션이 나타나게 된다. 이 때는 gdisk의 x(Expert command), n(create new protective MBR) 명령으로 새로 파티션을 생성해 주면 문제가 해결된다.
참고 사항
Hybrid-MBR 파티션은 Mac OS X의 Boot Camp를 사용해서 Windows를 설치할 때 BIOS 모드를 emulation 해 주기 위해서 사용하는 파티션 방식이다. 즉, Mac OS X 자체는 GPT 파티션을 사용하는데 Windows의 DOS(MBR) 파티션을 지원하기 위해서 짬뽕 파티션을 사용하는 것이다. 그런데, 리눅스의 Gparted도 이 방식을 지원하듯하다. 문제는 이것을 모르고 사용하면 Multi-OS 환경에서 파티션 정보가 엉켜서 특정 OS로 부팅이 안되는 사태가 발생한다는 것이다.
2015/02/28
디스크 두개 사용시 Grub UEFI Booting 설정
두 개 이상의 물리적 디스크와 Multi-OS 환경
하드디스크 용량이 늘어나면서 HDD(Hard Disk Drive)가 하나인 PC들이 주가 되었었는데, SSD(Solid-State Drive)가 범용화 되면서 SSD와 HDD가 동시에 탑재된 PC 사용자들도 늘어나고 있다. 자연스럽게 디스크 성능과 용량이 증가하니까 Multi-OS를 사용하려는 시도가 생기기 마련이다. 대표적으로, UEFI 모드로 Windows 8+이 SSD에 설치된 PC를 구매했는데 우분투를 같이 설치해서 사용하고자 하는 시도가 있을 수 있겠다.
여기서는 SSD와 HDD이든, 또는 HDD가 두 개이든, 물리적으로 분리된 두개의 디스크를 장착한 최근의 UEFI 모드를 사용하는 PC 환경에서 다중 OS를 사용하기 위한 Grub 설정 방법에 대해서 정리한다.
UEFI 환경에서 우분투 설치시 고려할 점
Windows 8+가 첫번째 디스크에 설치되어 있다고 가정할 때 우분투를 두 번째 디스크에 설치하는 것은 그리 어려운 일이 아니다. 우분투 설치 iso를 USB에 굽던지 USB에 저장해서 일반적인 설치 과정을 따라가면 된다. 디스크만 두번째 디스크로 지정하면 된다.
다만, 파티션은 첫번째는 EFI System 파티션(ESP; 200~300MB), 그 다음은 우분투 OS root(/) 파티션(30~50GB), Swap 파티션(RAM과 동일 용량), 사용자 데이터(/home) 파티션(나머지 용량 - 용량이 클 경우 파티션을 몇개로 더 쪼개는 것도 괜찮음) 등의 최소한 4개의 파티션을 사용하는 것이 좋다.
UEFI 모드에서는 GPT 파티션을 사용하는데 기본적으로 128개까지 파티션을 사용할 수 있는 장점이 있기 때문에 파티션을 여러 개로 쪼개서 사용하는 것이 디스크 활용 측면에서 바람직할 수 있다.
여기서, 강조하고 싶은 점은 물리적으로 분리된 디스크 마다 첫번째 파티션은 ESP(EFI System Partition)로 설정해 두는 것이 좋겠다는 것이다. 사실은 ESP는 여러 OS가 공유해서 사용하는 파티션이기 때문에 디스크가 여러 개라고 하더라도 Boot Disk의 ESP 파티션 하나 만을 사용해도 된다. 다만, 디스크마다 ESP 파티션을 두라는 것은 혹시라도 디스크를 다른 PC에 장착할 가능성이 있고 파티션 용량도 얼마 안되기에 나중을 위해서 만들어 두라는 얘기다.
Boot Disk
예전의 IDE Controller 사용시에는 HDD를 두 개이상 사용하려면 Master/Slave 점퍼를 설정해야 했던 적도 있었다. SATA Controller로 넘어 오면서 부터 Master/Slave 구분은 의미가 없게 되었다. BIOS(또는 UEFI Firmware) 설정에서 Boot Disk로 설정한 디스크가 예전의 Master Disk에 해당된다.
가령, Windows가 SSD에 설치되어 있었고 나중에 우분투를 HDD에 설치했더라도 BIOS 설정에서 우분투 HDD로 먼저 부팅하도록 설정했다면 우분투 HDD가 Boot Disk가 된다. 즉, 리눅스에서는 부팅한 첫번째 디스크는 항상 /dev/sda가 되고 두번째 디스크는 /dev/sdb가 된다. Windows에서도 마찬가지로 부팅한 디스크/파티션이 C: 드라이브가 된다. 결국은 어떤 디스크로 부팅하느냐에 따라 디스크가 첫번째냐 두번째냐라는 것이 상대적으로 결정된다는 뜻이다.
Boot Partition
UEFI-GPT 방식에서는 Boot Disk의 ESP 파티션이 Boot Partition이다. 이와는 달리, BIOS-MBR 방식에서는 Boot Disk의 첫번째 sector가 MBR이 저장된 Boot Sector가 되고, 첫번째 파티션이 Boot Partiton이다(단, Linux의 Grub은 첫번째가 아닌 파티션을 Boot Partition으로 지정하여 사용할 수 있음).
참고로, 리눅스의 gparted로 GPT 파티션을 만들면 MBR과의 호환성을 유지하기 위해 디스크의 앞부분 몇 sector를 조금 남겨두고 첫번째 파티션을 만든다. Grub은 BIOS-GPT 방식으로도 동작하는데 Boot Sector 공간이 작기 때문에 이 경우에는 BIOS grub 파티션이라는 1MB 정도의 파티션을 별개로 만들어야 한다.
Windows UEFI Boot Partition
UEFI 모드로 설치된 Windows의 Boot Partition은 당연히 ESP를 사용하고 이 파티션은 나중에 설치한 우분투에서도 ESP로 사용할 수 있다. 그런데, Windows의 경우 GPT 파티션 구조가 여러가지 변형이 있을 수 있다.
즉, PC Vendor들이 제공하는 Recovery Partiton, Windows에서 자체 복구 목적으로 사용하는 Winows Reserved Partion, ESP 등의 3개 파티션이 Windows OS 파티션과는 별개로 존재할 수 있다. GPT 파티션에서 파티션들은 동등하고 GUID로 파티션 Type을 구분하기 때문에 ESP가 반드시 첫번째 파티션일 필요는 없다.
그렇지만, 나중에 Grub에서 Windows가 설치된 디스크의 ESP 파티션 정보를 사용할 것이기 때문에 ESP 파티션이 몇번째 파티션인지 조사해 보아야 한다. 우분투에서 Windows 디스크의 1~3번째 파티션 각각을 하나씩 마운트해서 폴더 구조를 살펴 보는게 가장 확실한 방법이다. 우분투로 부팅했으니 Windows 디스크는 /dev/sdb가 된다. parted를 사용하면 파티션 정보를 알 수 있다.
$ sudo parted /dev/sdb print
$ sudo mount /dev/sdb1 /mnt
$ ls /mnt/EFI/Microsoft/Boot/bootmgfw.efi
위의 ls 명령 결과 botmgfw.efi 파일이 있으면 첫번째 파티션(/dev/sdb1)이 ESP이다.
Ubuntu UEFI Boot Partition
앞서 UEFI-GPT 방식에서는 물리적으로 분리된 디스크의 첫번째 파티션을 ESP로 만들어 두는 것이 좋다고 했고 우분투 설치시에 파티셔닝을 앞서 설명한 바와 같이 했다면 우분투가 사용하는 ESP는 Windows의 ESP와 다른 디스크의 파티션임을 이해할 것이다.
만약, BIOS 설정에서 Windows 디스크로 부팅하도록 설정했다면 Grub을 Windows의 ESP 파티션에 설치해야 한다. 하지만, 여기서는 우분투의 ESP에 Grub을 설치했기 때문에 BIOS 설정에서 우분투 디스크로 부팅하도록 해야 한다.
이제, 우분투 디스크의 ESP 파티션에 설치된 Grub을 이용해서 물리적으로 분리된 Windows 디스크의 Windows boot manager를 구동할 수 있도록 Grub boot menuentry를 만들 것이다. Grub에서 우분투 부팅 설정은 우분투 설치시에 자동으로 등록되기에 신경쓸 필요도 없다.
Grub Windows UEFI Boot Menu
앞서 Winodws의 ESP 파티션 위치를 bootmgfw.efi 파일 위치로 알아낼 수 있다고 했다. 아래 두개의 명령으로 Grub 메뉴엔트리에 사용할 <hints_string>과 <fs_uuid> 정보를 얻는다.
$ sudo grub-probe --target=hints_string /mnt/EFI/Microsoft/Boot/bootmgfw.efi
--hint-bios=hd1,gpt1 --hint-efi=hd1,gpt1 --hint-baremetal=ahci1,gpt1$ sudo grub-probe --target=fs_uuid /mnt/EFI/Microsoft/Boot/bootmgfw.efi
ffff-ffff이들 두 명령 결과 값들은 Grub 메뉴엔트리에서 아래와 같이 사용된다.
search --fs-uuid --set=root <hints_string> <fs_uuid>즉, 위의 결과 값들을 사용하여 아래와 같이 Grub menuentry를 만든다.
menuentry "Microsoft Windows Vista/7/8+ UEFI-GPT" {
insmod part_gpt
insmod fat
insmod search_fs_uuid
insmod chain
search --fs-uuid --set=root --hint-bios=hd1,gpt1 --hint-efi=hd1,gpt1 --hint-baremetal=ahci1,gpt1 ffff-ffff
drivemap -s hd0 hd1
chainloader (${root})/EFI/Microsoft/Boot/bootmgfw.efi
}
위에서 drivemap은 Windows가 반드시 물리적으로 첫번째 디스크여야만 부팅할 수 있는데 두번째 디스크로 인식하여 부팅할 수 없는 경우에만 사용한다. drivemap을 사용하지 않아도 되는 경우라면 굳이 사용할 필요는 없다.위의 Grub 메뉴엔트리는 아래와 같이 편집기를 사용하여 /etc/grub.d/40_custom 파일 맨 끝에 삽입하면 된다.
$ sudo nano /etc/grub.d/40_custom
$ sudo update-grub
$ sudo reboot
재 부팅 후 위에 새로 만든 Windows Grub 메뉴를 선택해서 부팅이 잘 되는지 확인해 본다.
UEFI 환경에서 Grub을 이용한 다중 디스크의 Multi-OS Booting
UEFI 환경에서 디스크가 두개 이상인 경우 디스크 별로 서로 다른 OS를 설치해서 사용하면 관리 측면에서 편리하다. 이 경우, 각 디스크 별로 ESP 파티션을 따로 만들어 두는 게 좋고, Grub을 사용할 경우 chainloader를 이용하여 다양한 조합의 부팅 설정이 가능하다. 각각의 ESP 마다 Grub을 설치해서 Grub 자체를 Chainloading 할 수도 있다.
이 글은 두 번째 디스크의 Windows boot manager를 Grub에서 Chainloading 하는 방법에 대해 예를 들었다.
참고 사이트
https://wiki.archlinux.org/index.php/GRUB
Labels:
우분투,
boot loader,
efi,
gpt,
grub,
multi-os,
second hdd,
ubuntu,
uefi
피드 구독하기:
글 (Atom)


