1/14/2019

USB 시동디스크 만들기 와 이해

1. PC의 USB Booting Disk만들기 

현재 기본 OS를 Window 7 or 10가 아닌 Linux ,즉 Ubuntu로 사용해야 하기때문에 아래와 같은 작업을 실행한다.

  1. USB 저장장치기반으로 시동디스크 생성 (ISO Image기반)
  2. BIOS에서 Booting 우선순위를 USB 변경 
  3. Linux(Ubuntu) 설치 진행   

현재 내가 사용하고 있는 OS가 Ubuntu 이므로 그 기준으로 관련 프로그램 설명한다.

기존생각은 Window에서 주로 임베디드에서 많이 사용하던 Win32DiskImager or Echer으로 사용하여 만들 생각이었다
하지만, Ubuntu의 Startup Disk Program 와 Window 에서는 Rufus 이용하여 사용하겠다.

  • Linux와 Window 와 USB Grub과 함께 설치 방법
아래에서 USB Boot Disk를 Grub과 함께 만드는 방법을 소개주셔서 감사하다.
추후 시간이 있다면 이부분을 한번 따라 해보겠다.
  https://bagjunggyu.blogspot.com/2013/10/linux-booting-usb-grub.html


1.1 Ubuntu 에서 Ubuntu USB 시동디스크 만들기

우선 현재 사용 중인 OS가 Ubuntu 일 경우 하도록 하며, 아래의 Startup Disk Program을 이용하여 만들어보자 
Ubuntu에 USB 시동디스크 설치프로그램은 기본설치
(Ubuntu 16.04 이후것은 확인)

  • 사용프로그램 (Ubuntu에 기본내장)
Startup Disk Program

  • Ubuntu에서 시동디스크 만들기 
  1. Startup or 시동디스크 검색 
  2. 시동디스크 설치 실행 
  3. Ubuntu Image 를 USB에 설치 

  • Ubuntu 실행 Startup Disk Program 찾기  

https://tutorials.ubuntu.com/tutorial/tutorial-create-a-usb-stick-on-ubuntu?_ga=2.105790597.76344796.1547599988-873301564.1547599988#0


  • Make Startup Disk 
USB Ubuntu Image 만들기 

https://tutorials.ubuntu.com/tutorial/tutorial-create-a-usb-stick-on-ubuntu?_ga=2.105790597.76344796.1547599988-873301564.1547599988#0


아래문서참고
  https://tutorials.ubuntu.com/tutorial/tutorial-create-a-usb-stick-on-ubuntu?_ga=2.105790597.76344796.1547599988-873301564.1547599988#0

  • 동작방식 
상위와 같이 Ubuntu Image를 생성하면, 내부에 EFI 와 boot 가  directory 존재하며, Ubunut를 설치시에, EFI System Parition을 이용한다. 


1.2 Window에서 Ubuntu/Window USB 시동디스크 만들기

우선 현재 사용 중인 OS가 Window 일 경우 하도록 하며, Echer이외에도  Rufus는 프로그램이 존재하는데, 파티션과 UEFI 설정가능
Image만 USB에 Write하면 될 줄 알았는데, 옵션이 다양하다

  • 사용프로그램 및 Download
Rufus Download 
  https://rufus.ie/

  • Rufus 설정포인트
  1. 파티션을 MBR or GPT로 설정
  2. 대상시스템 (BIOS 또는 UEFI or UEFI)




참고자료
  http://w3devlabs.net/wp/?p=24400
  https://webnautes.tistory.com/1146


1.3 Window에서 Window 10 Image 생성 

MS사에서 제공해주는 방법으로 상위 RUFUS 대신 이용해보도록 하자. 

Window 10 Image Download 및 USB Image 생성

Window USB 시동디스크 만들기 
  https://ahyuo79.blogspot.com/2019/08/lenovo-laptop.html


1.4 Window 에서 이외 Tool 

임베디드에서 많이 사용하는 Win32DiskImager or Echer 사용해도 상관은 없다. 
다만 BIOS에서 UEFI가 아닌 Legacy로 사용 

Download  Win32DiskImager

Download Etcher


2. PC의 BIOS와 UEFI 기본이해 

PC의 BIOS(Basic Input/Output System)는 이전처럼 간단하게 작동이 되지 않으며,
최신 UEFI(Unified Extensible Firmware Interface)을 적용하며 점점 변경되어 가고 있다고 한다

이전 BIOSLegacy BIOS라고 정의하며, 최신 BIOSUEFI이라고 명명한다고 한다. 
Laptop의 BIOS 설정에 가면 상위처럼 이름이 정해져 있다. 


2.1 Legacy BIOS 

Legacy BIOS의 경우는 
이전 부팅방식인 Boot Sector의 MBR 정보와 Bootcode를 가지고 Booting을 했으며, 기본방식으로 동작한다. 
하지만, HDD 용량제한과 BIOS의 기능제한이 문제가 되며, 결론적으로 GPT는 지원을 하지는 못한다. 

  • BIOS -> HDD의 MBR

https://en.wikipedia.org/wiki/BIOS


2.2 UEFI 지원 BIOS

UEFI(Unified Extensible Firmware Interface) 의 경우는  
기존 BIOS(Legacy BIOS)와 달리 BootSector(MBR)에만 지원하지 않고 GPT 지원하기되어 대용량 HDD를 지원가능하다.
UEFI Spec은  Boot Manager 라는 것 정의하고, Computer가 Power up이 되었을 때, 
Boot Manager는 이미 사용자가 설정된 Boot Configuration 체크하여 동작하고 Boot를 결정한다

UEFI의 경우 일반적으로 GPT(GUID Partition Table)을 이용한다고 한다.
  • UEFI -> HDD 의 EFI Partition -> EFI Bootloader
아래의 GRUB2의 GPT 부분을 보면, SDA1이 EFI Parition으로 FAT32
https://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface#Booting


결론적으로 UEFI는 BIOS에 부족한 부분을 외부저장장치에 EFI_SYSTEM_PARTITION이 별도 생성하여 BIOS를 확장하는 구조이다. 
기존의 BIOS에서 할 수 없었던 기능들을 이곳에 추가 확장을 하는 것이다. 

  • EFI system partition (약어, ESD)
외부저장장치 즉 Storage에 다양한 FAT Filesystem(FAT32, FAT16 , FAT12)으로 제공하여 구성되며, 
MBR과 GPT Partition을 기존과 동일하게 설정하기 때문에 이 부분을 이해한다. 
CD Disk는 보니 다르게 동작하니, 착각하지 말자.

ESD Wiki 자료
  https://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface#EFI_system_partition


  • EFI 관련파일의 구성과 PARTITION 
EFI_SYSTEM_PARTITION -- /EFI/BOOT/BOOT machine_type_short_name.EFI // 이런식으로 이름을 구성  
EFI_SYSTEM_PARTITION -- /efi/BOOT/BOOTX64.EFI   // x86-64 일 경우 (상위와 같이 적용)
EFI_SYSTEM_PARTITION -- /efi\boot\bootaa64.efi  // ARM64 일 경우  (상위와 같이 적용)

UEFI Interface
  https://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface


  • EFI의 시스템의 이해 
인텔은 EFI(Extensible Firmware Interface)라는 스펙을 개발했지만, 이는 UEFI에 주요 기능이 포함되었다고 한다.
Hardware는 PC의 Mainboard와 CPU 및 기타 Device를 말할 것이며, Firmware와 EFI는 BIOS기능을 말한다.




  https://en.wikipedia.org/wiki/EFI_system_partition


  • Interaction between the EFI Boot manager and EFI drivers
상위에서 설명한 Boot Manager와 동작방식을 그림으로 표현을 해준다.
EFI BOOT Manager와 EFI Driver의 동작방법을 이해해보면, 아래의 Blue색은 EFI의 전체 시스템이며, OS Loader와 어떻게 작용하는지 이해해보자.



  1. 좌측그림 EFI Binaries 파일 
  2. 우측그림 Boot Manager
  https://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface#Applications


  • UEFI Booting 
UEFI booting은 Legacy BIOS와 다르게 boot sector에 의존하지 않으며, 상위 EFI 처럼 Boot Manager가 존재하여 이를 OS Loader를 실행을 해준다.
크게보면 아래 두가지 형태로 나누어 볼수 있을 것 같으며, 세부적인 Booting은 아래에서 참조하자.

  1. UEFI-GPT booting
  2. UEFI-MBR

  https://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface#Booting

UEFI를 보면서 Shell 제공뿐만 아니라 기존의 BIOS가 Logo 및 GUI가 지원이 되는 것을 보고 사실 많이 놀랐다.
너무 옛날버전의 BIOS만 봐서 그런지 최신 BIOS를 보니 낯설기만 해서 일단 상위처럼 이해만 하고 넘어가자.
다른 Booting 모드도 제공하는 것 같은데, 추후 사용할 일 있다면 그때 알아가자.

궁금한것은 UEFI로 확장하여, 상위 LOGO와 GUI 환경을 제공하는것인지가 궁금하다. 아직 이해가 되지 않아 이부분은 추후에 확인 


UEFI의 이해 참고자료
  https://namu.wiki/w/UEFI
  https://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface
  https://ko.wikipedia.org/wiki/%ED%86%B5%EC%9D%BC_%ED%99%95%EC%9E%A5_%ED%8E%8C%EC%9B%A8%EC%96%B4_%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4
  https://msdn.microsoft.com/ko-kr/library/windows/hardware/dn898495(v=vs.85).aspx


3. MBR 와 GPT  이해 와 차이 

  • 기존 MBR(Master Boot Record) 
MBR(Master Boot Record)은 기존부터 사용한 방식이며, HDD Disk의 Sector 0 으로 BIOS가 이 부분으로 부팅하면서 Partition 체크하는 부분이다. 
역할은 Boot CodePartition Entry , 즉 Partition 정보이다. 
하지만, 용량이 제한되어 있다보니, 기능이 제한적일 수 밖에 없다. 

MBR(Master Boot Record)
BootCode 와 Partition Entry 들어감 
  https://en.wikipedia.org/wiki/Master_boot_record

  • GPT기반 변경 
GPT(Sector 1)하드디스크 용량증가로 인하여 MBR의 용량문제 개선하기 위해서, MBR(Sector 0) Partition 기능에 확장제공하는 방식이다. 
현재는 GPT는 MBR에 기존과 다른 구조로 사용하여 확장되어지는 구조이며, 이에 사용되는 툴도 둘다 다르다.


  • Bootloader(GRUB2) 비교
둘 다 Extend Partition에 GRUB을 넣으려고 하는 것이며, 각 차이를 알아두도록 하자. 
  1. boot.img: MBR에 저장되어지는 boot image로 core.img를 접근 
  2. core.img: GRUB의 core image로 /boot/grub을 접근 


  • MBR or GPT 일 경우, GRUB2 저장 

  https://en.wikipedia.org/wiki/Boot_sector


Sector Size,LBA 512 기준
  1. Example 1: MBR사용 
    1. Sector 0: MBR
    2. Sector 1~2047 
  2. Example 2: GPT(GUID Partition Table)사용 (아래 그림참조)
    1. Sector 0: MBR
    2. Sector 1: Primary GPT Header 
    3. Sector 2~33:  Partition Entry Array 128개  (128x128/512=32 Sector)
      1. GUID Partition Entry: 128byte 
        1. Partition type GUID: 아래 다시 설명 
        2. Unique Partition GUID
        3. ... 기타 등등 (상위 링크 참조)

    4. Empty Space:
    5. SDA1: EFI System Partition(FAT32)  (각 Partition GUID 참조)
    6. SDA2: BIOS boot Partition  (각 Partition GUID 참조)
    7. SDA3: Linux /  Root File system (각 Partition GUID 참조)
    8. SDA4: Linux /boot  File system (/boot/grub) (각 Partition GUID 참조)

Unix/Linux계열:  각 OS마다 조금씩 다르며, 링크를 참조하여 확인 
Window 32 bit :  UEFI 허용안하며, GPT도 미지원 
Window 64 bit :  Disk 당 GPT 128 Partition 까지 지원

GPT(GUID Partition Table) 사용할 경우 아래의 Globally unique identifier (GUID)는 공용으로 사용하는 ID이므로, 아래의 wiki에서 각각의 ID의 의미를 알아두고 이해하자.
  1. MBR partition scheme: 024DEE41-33E7-11D3-9D69-0008C781F39F
  2. EFI System partition: C12A7328-F81F-11D2-BA4B-00A0C93EC93B
  3. BIOS boot partition: 21686148-6449-6E6F-744E-656564454649
  4. Sony boot partition: F4019732-066E-4E12-8273-346C5641494F
  5. Lenovo boot partition: BFBFAFE7-A34F-448A-9A5B-6213EB736C22
이외 OS 관련된 GUID 와 각 제조회사 GUID 아주 다양하다

세부사항 GUID 정보
Window/Linux/macOS/Android/QNX 등 각 OS GUID는 반드시 확인
  https://en.wikipedia.org/wiki/GUID_Partition_Table#Partition_type_GUIDs



3.1 MBR 와 GPT의 Partition Tool 

기존에 MBR의 경우fdisk라는 것을 이용하여 MBR Parttion table을 설정하고 이를 진행했지만, GPTgdisk,gparted 라는 Tool을 사용한다.

아래와 같이 사용되어지는 Tool이 변경되어진다. 
  1. MBR : fdisk
  2. GPT :  gdisk gparted

3.2 MBR과 GPT의 내부구성 

위에서 설명했듯이 MBR과 GPT도 중요한것은 내부구성을 파악하고 Partition을 어떻게 구분하는지 이부분을 알아보자.
아래의 wiki를 보면 대충이해는 가지만, 세부적인것은 더 자세히 알아봐야할 것 같다.

  • MBR(Master Boot Record) 사용 
기존부터 사용하던 방식으로, 4개의 Primary Partition 4개를 제공하고 확장한다면, Logical로 분할하여 확장하는 방식인 걸로 기억한다. 
아래의 LBA0에 모든 정보를 넣는 구조이다. 

나도 너무 오래되어서 까먹으며, 추후 다시 한번 자세히 정독하자 
  https://en.wikipedia.org/wiki/Master_boot_record
  https://ko.wikipedia.org/wiki/%EB%A7%88%EC%8A%A4%ED%84%B0_%EB%B6%80%ED%8A%B8_%EB%A0%88%EC%BD%94%EB%93%9C
  https://en.wikipedia.org/wiki/Disk_partitioning
  https://en.wikipedia.org/wiki/Extended_boot_record


  • GPT(GUID Partition Table) 사용
MBR부분 즉, LBA0은 이전 호환성을 위해 그대로 사용하고, LBA1 부터 GPT를 사용하게되면 아래와 같이 Patition Entry 가 마음대로 더 확장가능하다. 
우선 Primary GPT 와 Secodary GPT 기반으로 아래와 같이 볼 수 있고, 그 안에 각 Patition Entry Point가 존재한다. 
GUID 방식은 나도 구조를 이전에도 본적이 없어 아래의 Wiki로 파악을 하고 있다.
지금 봐도 좀 혼동이 된다.
  https://en.wikipedia.org/wiki/GUID_Partition_Table
  https://ko.wikipedia.org/wiki/GUID_%ED%8C%8C%ED%8B%B0%EC%85%98_%ED%85%8C%EC%9D%B4%EB%B8%94