[Linux Storage] 리눅스 시스템 디스크 파티션 및 관련 개념 정리

blog post 

 

 

이번 포스트에서는 리눅스 시스템 관리에 있어 중요한 부분을 차지하는 디스크 파티셔닝 개념에 대해 다뤄볼까 합니다. 디스크 파티셔닝을 다루는 과정에서 필요한 용어들에 대해 알아보고, 특히 리눅스 시스템에 초점을 두고 포스팅해 보도록 하겠습니다.

 

 

1. 파티셔닝

 

 

우선 파티셔닝은 하나의 물리 저장장치를 시스템 내부에서 여러 디스크 공간으로 나누는 작업을 일컫습니다. 이때 이 공간은 물리적으로 나뉠 수도 있고, 논리적으로 나뉠 수도 있습니다. 물리적으로 나뉜 공간을 프라이머리(Primary), 논리적으로 나뉜 공간을 익스텐디드(Extended)라고 부릅니다.

 

프라이머리 공간의 경우, 리눅스에서 최대 4개의 공간으로 나눌 수 있습니다. 따라서 더 많은 파티셔닝이 필요한 경우, 익스텐디드 공간으로 논리적으로 확장하면 됩니다. 일반적으로 익스텐디드 공간으로 확장해서 많이 씁니다. 혹은 LVM이라고 부르는 파일 시스템을 통해 하나의 물리 공간을 논리적으로 쪼개어 사용하기도 합니다.

 

이렇게 나뉜 각각의 저장공간을 파티션(Partition)이라고 부릅니다.

 

 

 

2. 볼륨

 

 

리눅스 디스크 관리 체계에서 파티션과 함께 많이 쓰이는 용어가 바로 볼륨(Volume)입니다.

 

볼륨은 하드디스크나 SSD, 혹은 RAID 같은 물리적인 공간을 의미합니다. 일반적으로 하나의 하드웨어를 볼륨으로 일컫지만, RAID와 같이 여러 디스크가 복합적으로 구성된 경우에도 볼륨이라고 부르기도 합니다.

 

또한 많이들 파티션과 볼륨을 혼용하곤 합니다. 사실 엄밀하게 말하면, 파티션과 볼륨은 구분되어야 합니다. 물론 이 둘을 구분짓는 기준은 사용자들마다 조금씩 다를 수 있습니다. 일반적으로 파티션의 경우, 하나의 디스크에서 나뉜 공간을 의미하는 반면, 볼륨의 경우 앞서 언급한 바와 같이 디스크나 SSD, DVD 등의 물리 저장공간까지 포괄적으로 볼륨이라고 불립니다. 또한 각각의 파티션 자체가 곧 볼륨이기도 합니다.

 

정리하자면 파티션은 물리 공간에서 나뉜 각각의 저장공간인 반면, 볼륨의 경우 파티션을 포함한 물리 저장공간까지 모두 아우르는 개념이라고 볼 수 있습니다.

 

 

 

3. 파일시스템

 

 

파티셔닝 작업은 단순히 디스크 공간을 나누는 작업 뿐만 아니라, 그 나뉜 공간의 파일 시스템을 지정하는 것도 포함합니다. 여기에서 파일 시스템이란, 물리 혹은 논리적으로 나뉜 공간의 파일(데이터)을 어떻게 배치하고 관리할 것인가를 정의한 시스템을 의미합니다.

 

리눅스에서는 다양한 파일 시스템을 지원하고 있습니다. 앞서 포스트에서 루트 파티션(/)의 경우 xfs, /boot 디렉토리는 ext4, 그리고 swap 메모리 공간으로 리눅스 파티셔닝을 진행한 바 있습니다. 이러한 xfs, ext4, swap 등이 파일 시스템을 의미합니다. 이 밖에도 ext2,3, FAT32, LVM 등 다양한 파일 시스템들이 존재합니다. 리스트는 fdisk 명령을 사용하여 아래와 같이 확인할 수 있습니다.

 

[root@localhost ~]# fdisk /dev/sda

Welcome to fdisk (util-linux 2.32.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help): l   

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

 

 

 

 



 

 

4. 마운트

 

 

파티셔닝 된 물리 혹은 논리 공간이 실제 리눅스 시스템 상에서는 어떻게 보일까요? 특정 디렉토리에 연결되어 보입니다. 흔히 이를 마운트 되었다고 표현합니다. 즉, 특정 파일 시스템으로 마운트 된 파티션이 특정 디렉토리에 마운트 됨으로써, 사용자는 그 디렉토리를 통해 디스크의 파티션과 상호작용할 수 있게 되는 것이죠.

 

리눅스 시스템에서 가장 자주 쓰는 df 명령을 통해서 이를 확인해 볼 수 있습니다. 아래는 이전 포스트에서 설치했던 리눅스 시스템의 파티션 내역 입니다.

 

[root@localhost ~]# df -Th
Filesystem          Type      Size  Used Avail Use% Mounted on
devtmpfs            devtmpfs  382M     0  382M   0% /dev
tmpfs               tmpfs     399M     0  399M   0% /dev/shm
tmpfs               tmpfs     399M   11M  388M   3% /run
tmpfs               tmpfs     399M     0  399M   0% /sys/fs/cgroup
/dev/mapper/cl-root xfs        17G  2.0G   15G  12% /
/dev/sda1           ext4      976M  175M  734M  20% /boot
tmpfs               tmpfs      80M     0   80M   0% /run/user/0

 

보시다시피 LVM으로 파티셔닝 된 cl-root의 경우, 루트 디렉토리(/)에 마운트 된 것을 볼 수 있습니다. /dev/sda1의 경우 물리 파티션으로, /boot 디렉토리에 마운트 된 것을 볼 수 있습니다.

 

이처럼, 최종적으로 파티셔닝 된 디스크 공간은 특정 디렉토리에 마운트 되어야 사용자와 상호작용 할 수 있습니다.

 

 

 

5. LVM

 

 

LVM은 Logical Volume Manager의 약자로, 말 그대로 논리 볼륨 생성부터 관리까지 도와주는 파티셔닝 도구입니다. 리눅스 파티션 시스템에 있어서 빼놓을 수 없는 존재입니다. 또한 LVM은 논리 파티셔닝을 지원하는 시스템입니다. 앞서 파일 시스템 리스트를 확인해보면 "8e Linux LVM"을 통해 이를 알 수 있습니다. 

 

LVM을 사용하는 이유는 리눅스 시스템에서 파티션을 물리적으로 분할할 경우, 최대 4개까지 밖에 지원되지 않는다는 문제와 관련이 있습니다. 이러한 문제를 LVM을 통해 해결할 수 있습니다. 즉, 파티션을 논리적으로 구성함으로써, 물리적 한계에 제약받지 않고 디스크를 효율적으로 분할하여 사용할 수 있다는 점에서 LVM이 유용하게 사용됩니다.

 

물론 "Linux Extended" 방식으로 물리 파티션을 말 그대로 확장하여 사용할 수 있습니다. 하지만 LVM 파일 시스템은 이보다 더 강력한 논리 파티셔닝 기능을 제공하고 있습니다. 여러 파티션 구성 상황에서 유연하게 동작할 수 있고 자체 명령어를 통해 좀 더 관리하기 수월하다는 장점을 지니고 있습니다.

 

LVM은 크게 세 가지 영역으로 구분됩니다.

  • Physical Volume (PV): 리눅스 시스템에 존재하는 물리 파티션 공간입니다. LVM의 PV로 귀속되면 해당 공간에 여유 공간이 충분해도 물리적으로 파티셔닝할 수 없습니다.
  • Volume Group (VG): PV로 등록된 파티션을 다시 하나의 그룹으로 묶을 수 있습니다. 이 그룹이 바로 VG입니다. VG로 묶인 PV 파티션은 동일 VG 내에서 모든 용량이 통합됩니다. 또 다시 논리 파티션으로 나눌 때에는 VG에서 전체 가용 공간을 판단하여 할당하게 됩니다.
  • Logical Volume (LG): VG는 다시 자신이 관리중인 PV에서 논리적으로 공간을 분할할 수 있습니다. 이렇게 분할된 파티션을 LV라고 합니다.

 

이렇게 LV로 나뉜 파티션은 최종적으로 파일 시스템을 할당받고 특정 디렉토리에 마운트 될 수 있습니다. 이러한 전체 볼륨 구조를 구성해보면 아래 그림과 같습니다.

 

 

물리 & LVM 파티션 구조 예시

 

위 그림은 실제 리눅스 시스템에서 구성된 전체 볼륨 구조를 이미지로 재구성해 본 것입니다. 보시는 것과 같이 실제 물리 디스크 (/dev/sda, sdb)가 파티셔닝 된 볼륨(/dev/sda2, sdb1, sdb2)이 볼륨 그룹 (cl)에 묶인 것을 확인할 수 있습니다. 따라서 /dev/sda2, sdb1, sdb2의 타입은 이제 Linux LVM입니다.

 

[root@localhost ~]# fdisk /dev/sdb

Welcome to fdisk (util-linux 2.32.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help): p
Disk /dev/sdb: 20 GiB, 21474836480 bytes, 41943040 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x8cb24ec7

Device     Boot    Start      End  Sectors Size Id Type
/dev/sdb1           2048 20973567 20971520  10G 8e Linux LVM
/dev/sdb2       20973568 41943039 20969472  10G 8e Linux LVM

 

하지만 VG로 묶인 sda2, sdb1, sdb2는 다시 논리 볼륨 (/dev/cl/root, user1, user2, user3)으로 나뉘었고 이 논리 파티션들은 각각 리눅스 시스템의 디렉토리 (/, /boot, /home/user1,2,3)로 마운트 되기 위해 다시 ext4와 xfs 파일 시스템으로 포맷된 것을 볼 수 있습니다.

 

[root@localhost ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
devtmpfs              383M     0  383M   0% /dev
tmpfs                 399M     0  399M   0% /dev/shm
tmpfs                 399M  5.8M  393M   2% /run
tmpfs                 399M     0  399M   0% /sys/fs/cgroup
/dev/mapper/cl-root    17G  2.0G   16G  12% /
/dev/mapper/cl-user3  4.0G   61M  4.0G   2% /home/user3
/dev/mapper/cl-user1  9.8G   37M  9.3G   1% /home/user1
/dev/sda1             976M  194M  716M  22% /boot
/dev/mapper/cl-user2  3.9G   16M  3.7G   1% /home/user2
tmpfs                  80M     0   80M   0% /run/user/0

 

 

또한 2GB는 Swap 메모리 할당을 위해 파티셔닝 된 것을 볼 수 있습니다. 물론 LV로 swap 메모리에 할당할 수도 있죠.

 

파티셔닝 내용은 여기까지 입니다. 이 정도 선에서 파티션에 대한 이해를 하실 수 있다면, 실제 리눅스 시스템에서 파티셔닝 작업 진행에는 무리가 없을 것으로 예상됩니다.

 

실제 파티션을 구성하는 과정은 별도 포스트에서 또 다루도록 하겠습니다.

 

 

 

 

 

TAGS.

Comments