파티션의 이해

대문 / 기초지식 / 파티션의 이해

파티션의 이해

1.1. 파티션(Partition)의 목적

  • 첫째 : 하나의 물리적 디스크를 몇개의 영역으로 나누어 관리가 용이하도록 하는 것.
  • 둘째 : 운영체제가 여러가지인 경우 그러한 각각의 고유 파일시스템을 단일 영역에 독립적으로 유지할수 있게 하기 위해서.
  • 셋째 : 한 파티션이 손실되더라도 다른 파티션 영역은 손실로부터 보호할수 있는 확률을 높이기 위한 수단.

1.2. 먼저 알아둘 필요가 있는 C/H/S, LBA mode란?

1.2.1. CHS모드

참고 그림
360px-Cylinder_Head_Sector.svg.png
[PNG image (54.93 KB)]
출처: [https]https://commons.wikimedia.org/wiki/File:Cylinder_Head_Sector.svg[]

Cylinder(0~1023), Head(0~15), Sector(1~63) 이렇게 3가지 요소를 통한 주소매핑을 하여 최대 528MByte가 주소매핑 가능합니다.

그러나 만약 BIOS가 LBA를 지원하게 되면 내부적으로 LBA로 바꾸어 헤드수를 늘려 가상적인 헤드수를 갖게 될수 있는데 이를 이용하면 Head의 범위는 0~15가 아닌 0~255 의 범위를 주소매핑 가능하게 됩니다.

그렇게 되면 최대 주소매핑 가능한 공간은 8GByte가 됩니다.

바로 이 크기가 1024실린더 제약이라는 말이 나오는 근거가 됩니다.

그리고 BIOS를 통하지 않고 PIO/DMA를 통한 접근을 시도하면 추가적으로 Cylinder는 0~65,535의 범위를 가질수 있고 반면에 Head는 0~15의 범위가 되며 Sector는 0~255의 범위를 가질수 있도록 되어 있습니다.

이는 2의 28승을 뜻하며 가능한 주소매핑 영역은 총 128GByte가 되는 비약적인 발전을 가질수 있습니다.

그리고 이는 한 블럭에 512바이트라는 것을 가정한 계산 이며 블럭당 크기가 커질수록 그 용량은 늘어납니다.

1.3. LBA모드

0 ~ 268,435,456(2의 28승)Blocks의 범위를 갖는 선형 주소방식으로 물리적 위치 주소를 나타내는 방식입니다.

그리고 1개의 Block은 통상 512/1024/2048/4096Bytes 로 구성되며 보통 대부분의 HDD는 512로 구성됩니다.

그러므로 하나의 Block이 512byte라고 가정하고 계산해보면 약 128GByte가 최대 주소매핑공간이 되는 방식입니다.

점차 HDD의 용량이 증가함에 따라서 충분할줄 알았던 LBA 주소에 사용되는 bit 가 모자르게 됨에 따라서 최근(2002년에 ATA-6 사양이 선택적 48비트 논리 블록 주소 지정을 도입) 에는 이것을 좀더 늘려 48bit address 지정할수 있도록 확장되었으며 이것은 281,474,976,710,656개의 Block을 지정할수 있는 범위로 비약적으로 증가하였습니다. 이것은 1개의 Block이 512byte라고 가정하고 계산하면 131,072TB에 해당하는 엄청난 주소공간이 된 것입니다.

1.4. 파티션은 어디에 위치한 것일까?

파티션은 주 파티션확장 파티션으로 나뉘어 지는데 주 파티션의 경우는 LBA방식으로 나타낸다면 0번 섹터이며 CHS방식으로 나타낸다면 0/0/1 에 위치한것이 됩니다.

즉, 물리적으로 가장 처음부분이 주 파티션이 위치하는 곳이며 이곳을 Master Boot Record(MBR)이라고도 불리워집니다.

도스에서 "fdisk /MBR"명령은 이곳을 초기화 하는 명령이 되는 것이고요.

또한 이곳에는 파티션정보만 있는것이 아니고 PC가 부팅되면 이곳에서 부팅코드를 읽어와서 부팅하게 됩니다.

즉, 만약 이곳이 읽어질수 없는 상태(파괴?)가 된다면 하드디스크는 무용지물이 되버리는 중요한 영역이 되는 것입니다.

1.5. MBR의 구조

MBR은 1개의 Sector로 보통 구성되어지는데 이 크기는 통상 512바이트입니다.

그리고 이 512바이트중에서 처음 446바이트는 운영체제를 읽어들이기 위한 준비단계 코드가 들어 있으며 나머지 64바이트가 파티션에 대한 정보를 담아두는 테이블입니다.

그리고 마지막 2바이트는 MBR이 맞는지 확인하기 위한 예약값으로 기록되어 있습니다.

즉, 446 + 64 + 2 의 구조를 가지고 있습니다.

파티션 1개를 명시하는데는 16바이트의 영역이 소요되는데 64바이트뿐이 없으니까 64 / 16 = 4 개의 파티션이 나뉘어 질수 있는 계산이 나옵니다.

여기서 의문을 가지시는 분이 계실텐데 "나는 파티션 5개 나눠서 쓰는데?" 라고 생각하시는 분이 계실겁니다. 맞습니다. 5개건 100개건 용량 남는데로 파티션을 나누는 것이 가능하지만 이것은 주파티션에서 나뉘어진 부파티션에서 그러한 파티션의 증설이 됩니다. 어디까지는 주파티션이건 부파티션이건 하나의 섹터에 4개의 파티션만이 기록되는것을 반드시 알고 계셔야 합니다.

부 파티션은 이 4개의 파티션중에 1개의 파티션에 부파티션의 위치를 명시하여 확장되는 개념이라고 보시면 이해가 되실겁니다.

즉, 다음과 같은 모양새가 될수 있습니다.
#1 Linux 
#2 Windows 98 
#3 DataBackup 
#4 Extension --->>>> #1 WindowsXP 
                     #2 No used 
                     #3 Extension ->>> ... 
                     #4 No used 
이런식으로 파티션의 확장개념이 적용됩니다.

1.6. MBR 파티션정보 테이블

위에서 16바이트당 1개의 파티션을 명시할수 있다고 설명하였습니다. 그러면 16바이트에는 어떤것이 기술될까요? 다음과 같습니다.
OFFSET 내용
00H byte boot indicator
00H non-bootable partition
80H bootable partition (one partition only but minzkn is first 80H)
01H byte beginning sector head number
02H byte beginning sector (2 high bits of cylinder)
03H byte beginning cylinder (low order bits of cylinder)
04H byte system indicator
00H unknown operating system (Empty partition)
01H FAT12
02H XENIX
04H FAT16
05H Extended partition (DOS)
06H FAT16 (32bit sector number)
0BH FAT32
0CH FAT32 (64bit sector number)
05H byte ending sector head number
06H byte ending sector (2 high bits of cylinder)
1st byte (sector) Sector offset within cylinder High order bits of cylinder
07H byte ending cylinder (low order bits of cylinder)
2nd byte (cylinder) Low order bits of cylinder
08H dword number of sectors preceding the partition
0BH dword number of sectors in the partition

이러한 정보를 통해서 운영체제위치를 찾아 부팅하게 됩니다.

여기서 맨처음 "boot indicator"이 부분이 80h 인가 그냥 0인가에 따라서 부팅가능한 파티션인가를 결정짓게 됩니다.

fdisk에서 보면 Active와 같은 개념이겠죠. 아무리 운영체제가 설치되어 있더라도 이 부분이 80h가 아니라면 부팅을 시도하지 않습니다.

보통 부트매니저는 이를 이용한 방식을 사용하는 경우가 많습니다. 여기서 또 문제가 되는것이 1024실린더를 넘는 영역을 어떻게 부팅할것인가라는 논재의 시점이 발생하는데 이 부분에 대한 설명은 너무 세부적인 부분이라서 접도록 하겠습니다.

아래는 제 PC의 MBR sector를 예시로 나타내어 봅니다.
00000000 FA EB 21 01 B4 01 4C 49 | 4C 4F 16 08 D3 09 38 4B [..!...LILO....8K]
00000010 00 00 00 00 96 09 38 4B | F1 3F 24 25 81 00 80 60 [......8K.?$%...`]
00000020 1E 82 34 03 B8 C0 07 8E | D0 BC 00 08 FB 52 53 06 [..4..........RS.]
00000030 56 FC 8E D8 31 ED 60 B8 | 00 12 B3 36 CD 10 61 B0 [V...1.`....6..a.]
00000040 0D E8 66 01 B0 0A E8 61 | 01 B0 4C E8 5C 01 60 1E [..f....a..L.\.`.]
00000050 07 80 FA FE 75 02 88 F2 | BB 00 02 8A 76 1E 89 D0 [....u.......v...]
00000060 80 E4 80 30 E0 78 0A 3C | 10 73 06 F6 46 1C 40 75 [...0.x.<.s..F.@u]
00000070 2E 88 F2 66 8B 76 18 66 | 09 F6 74 23 52 B4 08 B2 [...f.v.f..t#R...]
00000080 80 53 CD 13 5B 72 57 0F | B6 CA BA 7F 00 42 66 31 [.S..[rW......Bf1]
00000090 C0 40 E8 60 00 66 3B B7 | B8 01 74 03 E2 EF 5A 53 [.@.`.f;...t...ZS]
000000A0 8A 76 1F BE 20 00 E8 DF | 00 B4 99 66 81 7F FC 4C [.v.. ......f...L]
000000B0 49 4C 4F 75 29 5E 68 80 | 08 07 31 DB E8 C9 00 75 [ILOu)^h...1....u]
000000C0 FB BE 06 00 89 F7 B9 0A | 00 B4 9A F3 A6 75 0F B0 [.............u..]
000000D0 02 AE 75 0A 06 55 B0 49 | E8 CF 00 CB B4 40 B0 20 [..u..U.I.....@. ]
000000E0 E8 C7 00 E8 B4 00 FE 4E | 00 74 07 BC E8 07 61 E9 [.......N.t....a.]
000000F0 5C FF F4 EB FD 60 55 55 | 66 50 06 53 6A 01 6A 10 [\....`UUfP.Sj.j.]
00000100 89 E6 53 F6 C6 60 74 70 | F6 C6 20 74 14 BB AA 55 [..S..`tp.. t...U]
00000110 B4 41 CD 13 72 0B 81 FB | 55 AA 75 05 F6 C1 01 75 [.A..r...U.u....u]
00000120 41 52 06 B4 08 CD 13 07 | 72 B4 51 C0 E9 06 86 E9 [AR......r.Q.....]
00000130 89 CF 59 C1 EA 08 92 40 | 49 83 E1 3F 41 F7 E1 93 [..Y....@I..?A...]
00000140 8B 44 08 8B 54 0A 39 DA | 73 92 F7 F3 39 F8 77 8C [.D..T.9.s...9.w.]
00000150 C0 E4 06 86 E0 92 F6 F1 | 08 E2 89 D1 41 5A 88 C6 [............AZ..]
00000160 EB 1C B4 42 5B BD 05 00 | 60 CD 13 73 16 4D 74 B8 [...B[...`..s.Mt.]
00000170 31 C0 CD 13 61 4D EB F0 | 66 50 59 58 88 E6 B8 01 [1...aM..fPYX....]
00000180 02 EB E1 8D 64 10 61 C3 | 66 AD 66 09 C0 74 0A 66 [....d.a.f.f..t.f]
00000190 03 46 10 E8 5F FF 80 C7 | 02 C3 C1 C0 04 E8 03 00 [.F.._...........]
000001A0 C1 C0 04 24 0F 27 04 F0 | 14 40 60 BB 07 00 B4 0E [...$.'...@`.....]
000001B0 CD 10 61 C3 00 00 00 00 | F1 3F 24 25 00 00 00 01 [..a......?$%....]
000001C0 01 00 83 FE FF FF 3F 00 | 00 00 93 29 00 04 00 FE [......?....)....]
000001D0 FF FF 83 FE FF FF D2 29 | 00 04 D2 29 00 04 00 FE [.......)...)....]
000001E0 FF FF 82 FE FF FF A4 53 | 00 08 4B 34 80 00 00 FE [.......S..K4....]
000001F0 FF FF 83 FE FF FF EF 87 | 80 08 D2 D1 EF 6B 55 AA [.............kU.]

1.7. MBR 파티션의 용도를 나타내는 "byte system indicator"에 대한 목록 (리눅스의 fdisk에서 인용)

 0  Empty           24  NEC DOS         81  Minix / old Lin bf  Solaris        
 1  FAT12           39  Plan 9          82  Linux swap / So c1  DRDOS/sec (FAT-
 2  XENIX root      3c  PartitionMagic  83  Linux           c4  DRDOS/sec (FAT-
 3  XENIX usr       40  Venix 80286     84  OS/2 hidden C:  c6  DRDOS/sec (FAT-
 4  FAT16 <32M      41  PPC PReP Boot   85  Linux extended  c7  Syrinx         
 5  Extended        42  SFS             86  NTFS volume set da  Non-FS data    
 6  FAT16           4d  QNX4.x          87  NTFS volume set db  CP/M / CTOS / .
 7  HPFS/NTFS       4e  QNX4.x 2nd part 88  Linux plaintext de  Dell Utility   
 8  AIX             4f  QNX4.x 3rd part 8e  Linux LVM       df  BootIt         
 9  AIX bootable    50  OnTrack DM      93  Amoeba          e1  DOS access     
 a  OS/2 Boot Manag 51  OnTrack DM6 Aux 94  Amoeba BBT      e3  DOS R/O        
 b  W95 FAT32       52  CP/M            9f  BSD/OS          e4  SpeedStor      
 c  W95 FAT32 (LBA) 53  OnTrack DM6 Aux a0  IBM Thinkpad hi eb  BeOS fs        
 e  W95 FAT16 (LBA) 54  OnTrackDM6      a5  FreeBSD         ee  GPT            
 f  W95 Ext'd (LBA) 55  EZ-Drive        a6  OpenBSD         ef  EFI (FAT-12/16/
10  OPUS            56  Golden Bow      a7  NeXTSTEP        f0  Linux/PA-RISC b
11  Hidden FAT12    5c  Priam Edisk     a8  Darwin UFS      f1  SpeedStor      
12  Compaq diagnost 61  SpeedStor       a9  NetBSD          f4  SpeedStor      
14  Hidden FAT16 <3 63  GNU HURD or Sys ab  Darwin boot     f2  DOS secondary  
16  Hidden FAT16    64  Novell Netware  af  HFS / HFS+      fb  VMware VMFS    
17  Hidden HPFS/NTF 65  Novell Netware  b7  BSDI fs         fc  VMware VMKCORE 
18  AST SmartSleep  70  DiskSecure Mult b8  BSDI swap       fd  Linux raid auto
1b  Hidden W95 FAT3 75  PC/IX           bb  Boot Wizard hid fe  LANstep        
1c  Hidden W95 FAT3 80  Old Minix       be  Solaris boot    ff  BBT            
1e  Hidden W95 FAT1

1.8. MBR로 나타낼수 있는 용량의 한계

MBR의 Partition 범위지정 한계는 32bit까지이므로 4,294,967,296개의 Block까지만 지정할수 있으며 이것은 약 2TB용량까지만 다룰수 있다는 의미입니다.

오늘날 2TB이상의 HDD가 출시되고 있고 이를 활용할수 있도록 하려면 2TB보다 큰 용량을 나타낼수 있는 Partition지정방식의 정의가 필요했습니다.

이를 위해서 현재 가장 널리 사용되어지는 것이 GPT(GUID Partition Table)방식입니다.

1.9. GPT

  • Partition table header (LBA 1)
    OFFSET 크기 내용
    0 8Signature ("EFI PART", 45 46 49 20 50 41 52 54)
    8 4Revision (For version 1.0, the value is 00 00 01 00)
    12 4Header size (in bytes, usually 5C 00 00 00 meaning 92 bytes)
    16 4CRC32 of header (0 to header size), with this field zeroed during calculation
    20 4Reserved; must be zero
    24 8Current LBA (location of this header copy)
    32 8Backup LBA (location of the other header copy)
    40 8First usable LBA for partitions (primary partition table last LBA + 1)
    48 8Last usable LBA (secondary partition table first LBA - 1)
    56 16Disk GUID (also referred as UUID on UNIXes)
    72 8Partition entries starting LBA (always 2 in primary copy)
    80 4Number of partition entries
    84 4Size of a partition entry (usually 128)
    88 4CRC32 of partition array
    92 *Reserved; must be zeroes for the rest of the block (420 bytes for a 512-byte LBA)

  • GUID partition entry format (LBA 2–33)
    OFFSET 크기 내용
    0 16Partition type GUID
    16 16Unique partition GUID
    32 8First LBA (little-endian)
    40 8Last LBA (inclusive, usually odd)
    48 8 Attribute flags (e.g. bit 60 denotes read-only)
    56 72Partition name (36 UTF-16LE code units)

  • Partition attributes
    BIT 내용
    0 System partition (disk partitioning utilities must reserve the partition as is)
    60 Read-only
    62 Hidden
    63 Do not automount (i.e., do not assign drive letter)

1.10. 참고자료

Retrieved from https://www.minzkn.com:443/moniwiki/wiki.php/Partition
last modified 2021-11-16 09:56:55