오늘은 리눅스와 윈도우의 부팅과 복구 비교해보고자 합니다. 

부팅 과정에 대한 이론적인 내용과 발생할 수 있는 문제를 모두 다루는 것은 너무 어려운 일이기 때문에 간략하게 줄여서 글을 써보고자 합니다.

리눅스와 윈도우 모두 x86 기반의 시스템이기 때문에 BIOS와 UEFI 에 대한 부분은 동일 합니다. 하지만 부트 로드 이후의 커널을 올리고 서비스를 시작하는 과정은 각자의 특성에 맞게 동작 합니다.

BIOS를 기준으로 설명해보면 BIOS에서 Boot 디스크의 MBR 영역에서 부트 로더를 실행 시킵니다.


-------------------------------------------------------- Linux -----------------------------------------------------------

과거에는 LILO 라는 프로그램이 사용되었으나 일반 리눅스 서버에는 GRUB 라는 프로그램이 부트 로더로 사용됩니다. 

stage 1이라고 불리는 GRUB의 일부가 MBR에서 로드 되면 stage 1.5 또는 stage 2 부트 로더를 로드 합니다. 부트 로더를 메모리에 모두 올리면 부팅 가능한 커널의 목록이 화면에 출력 되고 5초 정도 기다린 후 가장 위에 있는 커널이 실행됩니다. 커널 선택 화면이 나오지 않는 경우 ESC나 Shift 키를 누르면 GRUB 메뉴로 들어갈 수 있습니다. (GRUB 1 에서는 ESC 이고 GRUB 2에서는 Shift가 사용됩니다.) 커널 선택 화면에서 "e" 버튼을 누르면 /boot/gurb/grub.cfg 파일의 내용이 출력되고 설정 값을 변경해서 커널을 실행할 수 있습니다. 이부분은 윈도우 보다 리눅스가 훨씬 강력한것 같습니다. 윈도우는 부팅을 한 후 레지스트리를 변경하거나 bcdedit을 통해서 부트 옵션을 변경하고 다시 부팅을 해야 하는데 리눅스는 부팅 과정에서 바로 커널 파라미터를 변경할 수 있습니다.


일반적인 설정 내용은 /etc/default.grub 파일에 들어 있고 실제 설정 파일은 /boot/grub/grub.cfg에 들어 있습니다. (Grub2의 경우 /boot/grub2/grub.cfg 파일입니다.) 이 파일을 사용해서 crashkernel을 설정하는 등 다양한 커널 파라미터를 수정할 수 있습니다.



GRUB 문제 해결

부팅이 안되는 이슈가 있을때 Ubuntu의 경우 ESC나 Shift 키를 이용해서 Grub 메뉴에 들어갈 수 있다면 Advanced - Recovery mode 를 통해서 복구를 진행할 수 있습니다. (LiveCD를 통해서 부팅을 할 수 있다고 하는데 테스트 안해봤습니다.)


ESC 키나 Shift를 사용해서 GRUB 프롬프트로 진입을 하려고 하였으나 디스크 오류 등의 이슈로 인해서 MBR에서 GRUB이 사라졌을 수 있습니다. 이 경우 RHEL의 경우 CD로 부팅을 한 후 rescue 키워드를 통해서 복구 모드로 들어갈 수 있다고 합니다.

https://access.redhat.com/documentation/ko-kr/red_hat_enterprise_linux/5/html/installation_guide/s1-rescuemode-boot


chroot /mnt/sysimage를 사용해서 루트 파티션을 마운트 하고 /sbin/grub-install /dev/sda를 통해서 MBR에 GRUB를 재설치 할 수 있습니다. (grub2-install을 사용할 수도 있습니다.)

https://access.redhat.com/documentation/ko-kr/red_hat_enterprise_linux/5/html/installation_guide/s1-grub-installing

Red hat의 설치 프로그램 복구 모두에 대한 자세한 내용은 아래 링크에 있습니다.

https://access.redhat.com/documentation/ko-kr/red_hat_enterprise_linux/7/html/installation_guide/sect-rescue-mode


부팅이 된 후 GRUB 설정 파일을 열어서 문제를 수정할 수 있습니다. GRUB 1의 경우 boot/grub/menu.lst 파일이 설정 파일이고 GRUB 2의 경우 /etc/default/grub 파일을 변경한 후 /usr/sbin/update-grup를 실행해서 /boot/grub/grub.cfg 를 실행합니다.


Linux에서 GRUB 관련 더 많은 사례와 방법이 있을수 있을것 같은데 많이 시도는 해보지 못했습니다.


-------------------------------------------------------- Windows --------------------------------------------------------

Windows 2003이나 XP 까지는 ntldr이 부트 로더로 사용되었으나 Windows 2008, vista 부터는 bootmgr, winload 등으로 변경되었습니다. 부팅과 관련된 정보는 Boot Configuration Data(BCD) 라는 곳에 저장되어 있고 관리자 권한으로 CMD를 실행한 후 bcdedit.exe를 사용해서 설정을 확인/변경할 수 있습니다. 

 


부트 옵션은 bcdedit을 통해서 변경할 수 있으며 아래 명령을 통해서 현재 부트 옵션을 복사해서 DebugEntry라는 엔트리를 하나 더 만들수 있습니다. 엔트리를 하나 더 만들게 되면 부팅할 때 어떤 부트 옵션을 선택해서 부팅을 할지 물어보는 화면이 나옵니다.

bcdedit /copy {current} /d "DebugEntry"


bcdedit을 통해서 디버그 모드 설정, 메모리 관련 설정, Checked build 설정, PAE 설정 등을 설정할 수 있고 추가 설정은 registry를 변경해야 합니다.

https://docs.microsoft.com/en-us/windows-hardware/drivers/devtest/using-boot-parameters


BCD는 시스템을 설치할 때 만들어진 500MB 크기의 System Reserved 파티션에 들어 있고 그 안에는 BCD 정보, 복구 콘솔 이미지, bootmgr 등의 정보가 들어 있습니다. (디스크를 다른 시스템에 마운트 하면 system reserved 파티션의 내용을 확인할 수 있습니다)


시스템이 부팅이 안되는 경우 부팅될 때 F8을 눌러서 Advanced Boot Options가 나오게 한 후 Repair Your Computer를 선택해서 복구 모드로 들어갈 수 있습니다.


부팅이 되지 않거나 F8을 눌러서 복구 모드로 들어갈 수 없는 경우 CD로 부팅을 하여 Repair your computer 를 눌러 복구 콘솔로 들어간 후 System Recovery options에서 Command Prompt를 선택해서 부트로더를 복구 할 수 있습니다.


bootrec 명령을 사용하여 부트 로더, BCD 등을 복구 할 수 있습니다. (Raid 1 을 사용하고 있다면 복구 모드에서 Raid 드라이버가 로드 되어야 합니다. 로드 되지 않는다면 디스크 중 하나에만 변경사항이 적용됩니다.)

/FixMbr을 사용하면 시스템 파티션에 MBR을 다시 작성합니다. (파티션 정보는 변경하지 않습니다.). 

/FixBoot를 사용하면 부팅 섹터를 다시 작성 합니다. 

/RebuildBcd를 사용하면 BCD 저장소를 다시 만듭니다. 

https://support.microsoft.com/ko-kr/help/927392/use-bootrec-exe-in-the-windows-re-to-troubleshoot-startup-issues


리눅스와 윈도우에 부팅 정보와 부팅에 대한 문제 해결 방법이 너무 많아서 기본적인 것만 다루어 보았습니다.

'Windows & (Linux | vSphere)' 카테고리의 다른 글

ESXi 패치 설치 vs Windows 패치 설치  (0) 2018.12.22
디스크가 가득 차는 경우  (0) 2018.12.15
성능 모니터링 (sysstat, sar)  (0) 2018.06.16
IO 부하 (iostat, iotop)  (0) 2018.06.06
시스템 부하 (top)  (0) 2018.06.03

+ Recent posts