안녕하세요. ManVSCloud 김수현입니다.
오늘은 네이버 클라우드 Linux 환경에서 2TB 용량을 초과하는 파티션 사용법에 대해 포스팅하였습니다.
원래 Windows 부터 자료 다 준비해놨는데 포스팅 이미지들을 전부 회사에 두고온 관계로…
Linux편을 먼저 포스팅해보겠습니다.?
우선 테스트 환경와 어떻게 2TB를 초과하는 용량의 파티션을 생성할 것인가에 대해 알아보도록 합시다.
Environment and Description

? 사용된 OS : centos-7.8-64
네이버 클라우드에서 스토리지를 추가하여 생성할 때 최대 볼륨 크기는 2000GB로 제한되어 있습니다.

그렇다면 어떻게 2000GB가 넘는 파티션을 생성할 것이냐?
우선 결론부터 말하자면 LVM(Logical Volume Manager)을 사용하여 파티션을 생성할 것입니다.
LVM에 대해 깊게 설명하는 포스팅은 아니니 간단하게 설명하자면 LVM을 이용한다면 여러 개의 물리적인 디스크 파티션을 논리적인 그룹으로 묶은 뒤 개별적인 논리 디스크로 할당하여 유연성있게 사용할 수 있습니다.
LVM에 대해 더 자세히 알고 싶으시다면 LVM에 대한 개념과 명령어에 대해 검색하여 확인 해보시기 바랍니다.
Create partitions using LVM


우선 위 이미지와 같이 서버에 추가할 스토리지 2개를 생성합니다.
2000GB 용량으로 2개의 스토리지를 생성해주었습니다.
[root@s17ab8051000 ~]# fdisk -l Disk /dev/xvda: 53.7 GB, 53687091200 bytes, 104857600 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 Disk label type: dos Disk identifier: 0x000ac8f2 Device Boot Start End Blocks Id System /dev/xvda1 * 2048 2099199 1048576 83 Linux /dev/xvda2 2099200 104857599 51379200 83 Linux Disk /dev/xvdb: 2147.5 GB, 2147483648000 bytes, 4194304000 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 Disk /dev/xvdc: 2147.5 GB, 2147483648000 bytes, 4194304000 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
서버 내에서 fdisk -l 명령어로 확인해보면 추가된 두개의 스토리지를 확인할 수 있습니다.
[root@s17ab8051000 ~]# fdisk /dev/xvdb Command (m for help): n Partition type: p primary (0 primary, 0 extended, 4 free) e extended Select (default p): p Partition number (1-4, default 1): 1 First sector (2048-4194303999, default 2048): Using default value 2048 Last sector, +sectors or +size{K,M,G} (2048-4194303999, default 4194303999): Using default value 4194303999 Partition 1 of type Linux and of size 2 TiB is set
fdisk /dev/xvdb 를 이용하여 파티션을 생성해줍시다.
1. n을 눌러 새로 생성해줍니다.
2. p를 눌러 주 파티션을 생성해줍니다.
3. 파티션 넘버를 정해주는데 default가 1로 되어있어 그냥 엔터만 쳐도 됩니다.
4. First sector는 섹터 시작점 Last sector는 섹터가 끝나는 부분을 지정해주는 건데 그냥 엔터를 눌러주어 전체 용량 지정해줍시다.
Command (m for help): t Selected partition 1 Hex code (type L to list all codes): 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 C: c6 DRDOS/sec (FAT- 4 FAT16 <32M 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 eb BeOS fs e W95 FAT16 (LBA) 53 OnTrack DM6 Aux a5 FreeBSD ee GPT f W95 Ext'd (LBA) 54 OnTrackDM6 a6 OpenBSD ef EFI (FAT-12/16/ 10 OPUS 55 EZ-Drive a7 NeXTSTEP f0 Linux/PA-RISC b 11 Hidden FAT12 56 Golden Bow a8 Darwin UFS f1 SpeedStor 12 Compaq diagnost 5c Priam Edisk a9 NetBSD f4 SpeedStor 14 Hidden FAT16 <3 61 SpeedStor ab Darwin boot f2 DOS secondary 16 Hidden FAT16 63 GNU HURD or Sys af HFS / HFS+ fb VMware VMFS 17 Hidden HPFS/NTF 64 Novell Netware b7 BSDI fs fc VMware VMKCORE 18 AST SmartSleep 65 Novell Netware b8 BSDI swap fd Linux raid auto 1b Hidden W95 FAT3 70 DiskSecure Mult bb Boot Wizard hid fe LANstep 1c Hidden W95 FAT3 75 PC/IX be Solaris boot ff BBT 1e Hidden W95 FAT1 80 Old Minix Hex code (type L to list all codes): 8e Changed type of partition 'Linux' to 'Linux LVM' Command (m for help): w
이어서 해당 파티션의 타입을 지정해주어야하는데 타입의 종류는 l(L)을 입력하여 타입에 대한 모든 Hex code를 볼 수 있습니다.
우리는 Linux LVM을 사용해야하니 8e를 사용 해줄 것입니다.
5. t를 입력하여 파티션 타입 지정
6. 8e 입력하여 Linux LVM로 지정해줍니다.
7. w (저장)
위 과정을 추가한 두 디스크 /dev/xvdb, /dev/xvdc 모두 설정해주어야 합니다.
[root@s17ab8051000 ~]# fdisk -l Disk /dev/xvda: 53.7 GB, 53687091200 bytes, 104857600 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 Disk label type: dos Disk identifier: 0x000ac8f2 Device Boot Start End Blocks Id System /dev/xvda1 * 2048 2099199 1048576 83 Linux /dev/xvda2 2099200 104857599 51379200 83 Linux Disk /dev/xvdb: 2147.5 GB, 2147483648000 bytes, 4194304000 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 Disk label type: dos Disk identifier: 0x09ecabef Device Boot Start End Blocks Id System /dev/xvdb1 2048 4194303999 2097150976 8e Linux LVM Disk /dev/xvdc: 2147.5 GB, 2147483648000 bytes, 4194304000 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 Disk label type: dos Disk identifier: 0x0a3c26f7 Device Boot Start End Blocks Id System /dev/xvdc1 2048 4194303999 2097150976 8e Linux LVM
두 스토리지 전부 정상적으로 생성했다면 /dev/xvdb1, /dev/xvdc1가 Linux LVM으로 잘 생성된 것을 확인할 수 있습니다.
[root@s17ab8051000 ~]# rpm -qa | grep lvm2 lvm2-libs-2.02.186-7.el7_8.2.x86_64 lvm2-2.02.186-7.el7_8.2.x86_64
이제 논리적 볼륨으로 관리해줄 것입니다.
lvm2가 설치되어 있어야하지만 네이버 클라우드에서는 이미 설치가 되어 있었습니다.
[root@s17ab8051000 ~]# pvcreate /dev/xvdb1 Physical volume "/dev/xvdb1" successfully created. [root@s17ab8051000 ~]# pvcreate /dev/xvdc1 Physical volume "/dev/xvdc1" successfully created.
pvcreate 명령어를 이용하여 fdisk로 만든 파티션을 물리적 볼륨(PV)으로 생성해줍니다.
[root@s17ab8051000 ~]# pvdisplay "/dev/xvdb1" is a new physical volume of "1.95 TiB" --- NEW Physical volume --- PV Name /dev/xvdb1 VG Name PV Size 1.95 TiB Allocatable NO PE Size 0 Total PE 0 Free PE 0 Allocated PE 0 PV UUID gcpy02-Fe7l-4Klb-pQed-z726-sgmY-JQXe6R "/dev/xvdc1" is a new physical volume of "1.95 TiB" --- NEW Physical volume --- PV Name /dev/xvdc1 VG Name PV Size 1.95 TiB Allocatable NO PE Size 0 Total PE 0 Free PE 0 Allocated PE 0 PV UUID I6W7l7-Rxce-QllJ-n6nl-nULX-PZ3j-PQGJe3
pvdisplay 명령어를 이용하여 생성된 PV를 자세히 볼 수 있습니다. (pvs, pvscan 명령어를 사용해도 좋습니다.)
[root@s17ab8051000 ~]# vgcreate vg_data /dev/xvdb1 /dev/xvdc1 Volume group "vg_data" successfully created [root@s17ab8051000 ~]# vgdisplay --- Volume group --- VG Name vg_data System ID Format lvm2 Metadata Areas 2 Metadata Sequence No 1 VG Access read/write VG Status resizable MAX LV 0 Cur LV 0 Open LV 0 Max PV 0 Cur PV 2 Act PV 2 VG Size <3.91 TiB PE Size 4.00 MiB Total PE 1023998 Alloc PE / Size 0 / 0 Free PE / Size 1023998 / <3.91 TiB VG UUID Kl29bl-HIIm-NXxt-RPRI-1mfr-VMtO-0qOO7I
PV 생성 후에 VG, 즉 볼륨 그룹을 생성해주어야합니다.
vgcreate 명령어로 위와 같이 볼륨 그룹을 생성해줍시다.
vgcreate VG 이름 디바이스명1 디바이스명2 과같이 사용할 수 있습니다.
[root@s17ab8051000 ~]# lvcreate -l 100%FREE -n lv_data vg_data Logical volume "lv_data" created. [root@s17ab8051000 ~]# lvdisplay --- Logical volume --- LV Path /dev/vg_data/lv_data LV Name lv_data VG Name vg_data LV UUID 66UDwi-kBvC-lJFc-Nc0g-QcSA-dxJL-0eYTUG LV Write Access read/write LV Creation host, time s17ab8051000, 2021-07-18 15:30:36 +0900 LV Status available # open 0 LV Size <3.91 TiB Current LE 1023998 Segments 2 Allocation inherit Read ahead sectors auto - currently set to 8192 Block device 253:0
VG으로 물리적 볼륨을 하나로 묶어주었습니다.
생성된 VG에서 여러개의 LV로 또는 하나의 LV로 생성하실 수 있습니다.
lvcreate로 논리적 볼륨(LV)를 생성해줄 것입니다.
-l 옵션은 PE 단위이며 -L 옵션은 MB, GB, TB 단위입니다.
(사용할 수 있는 PE와 용량은 vgdisplay 명령어에서 Free PE / Size 를 확인하면 볼 수 있습니다.)
lvcreate -l 100%FREE 를 주고 -n 옵션으로 lv의 이름을 지정해줬습니다 이후 위에서 생성했던 vg의 이름을 써줍니다.
[root@s17ab8051000 ~]# mkfs.xfs /dev/vg_data/lv_data meta-data=/dev/vg_data/lv_data isize=512 agcount=4, agsize=262143488 blks = sectsz=512 attr=2, projid32bit=1 = crc=1 finobt=0, sparse=0 data = bsize=4096 blocks=1048573952, imaxpct=5 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 ftype=1 log =internal log bsize=4096 blocks=511999, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0
이제 마지막으로 파일시스템 작업과 마운트 작업만 해주면 끝입니다.
저는 xfs 파일시스템으로 포맷해줬는데 이 부분은 원하시는 파일시스템으로 포맷해주시면 됩니다.
[root@s17ab8051000 ~]# mkdir /data [root@s17ab8051000 ~]# mount /dev/vg_data/lv_data /data [root@s17ab8051000 ~]# df -h /data Filesystem Size Used Avail Use% Mounted on /dev/mapper/vg_data-lv_data 4.0T 33M 4.0T 1% /data
위와 같이 생성한 디렉토리에 마운트까지 정상적으로 완료되었습니다.
하지만 최종적으로 부팅 후에도 정상적으로 마운트되려면 /etc/fstab 파일을 수정해주어야합니다.
[root@s17ab8051000 ~]# blkid /dev/vg_data/lv_data /dev/vg_data/lv_data: UUID="4240c1b1-ac89-477c-933b-eff8db839adf" TYPE="xfs"
blkid 명령어로 UUID를 확인하고 /etc/fstab 파일에 아래와 같이 추가해주었습니다.
# # /etc/fstab # Created by anaconda on Mon Aug 31 14:44:01 2020 # # Accessible filesystems, by reference, are maintained under '/dev/disk' # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info # UUID=0692fdb8-bb3c-4094-83f0-fe95a339b8c1 / xfs defaults 0 0 UUID=f95bed0a-11af-4b2c-bfcc-4afb91a68fc1 /boot xfs defaults 0 0 UUID=4240c1b1-ac89-477c-933b-eff8db839adf /data xfs defaults 0 0
네이버 클라우드에서 2TB가 초과되는 파티션을 사용하는 것 생각보다 쉽지 않나요?
그럼 이제 이렇게 논리적으로 생성한 볼륨을 확장하는 방법도 알아봅시다.
4TB의 용량도 다 써버려서 확장이 필요할 때 이미 생성된 LV는 추가적인 확장이 가능할까요?
Volume Expansion
LV 확장은 충분히 가능합니다. 아래 예시로 준비하였습니다.

먼저 2000GB 크기의 스토리지를 하나 더 추가 생성하였습니다.
[root@s17ab8051000 ~]# fdisk /dev/xvdd Welcome to fdisk (util-linux 2.23.2). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Device does not contain a recognized partition table Building a new DOS disklabel with disk identifier 0x5840d763. Command (m for help): n Partition type: p primary (0 primary, 0 extended, 4 free) e extended Select (default p): p Partition number (1-4, default 1): First sector (2048-4194303999, default 2048): Using default value 2048 Last sector, +sectors or +size{K,M,G} (2048-4194303999, default 4194303999): Using default value 4194303999 Partition 1 of type Linux and of size 2 TiB is set Command (m for help): t Selected partition 1 Hex code (type L to list all codes): 8e Changed type of partition 'Linux' to 'Linux LVM' Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks.
위에서 배운 그대로 fdisk를 이용하여 파티션을 생성해줍니다.
[root@s17ab8051000 ~]# pvcreate /dev/xvdd1 Physical volume "/dev/xvdd1" successfully created. [root@s17ab8051000 ~]# vgdisplay --- Volume group --- VG Name vg_data System ID Format lvm2 Metadata Areas 2 Metadata Sequence No 2 VG Access read/write VG Status resizable MAX LV 0 Cur LV 1 Open LV 1 Max PV 0 Cur PV 2 Act PV 2 VG Size <3.91 TiB PE Size 4.00 MiB Total PE 1023998 Alloc PE / Size 1023998 / <3.91 TiB Free PE / Size 0 / 0 VG UUID Kl29bl-HIIm-NXxt-RPRI-1mfr-VMtO-0qOO7I [root@s17ab8051000 ~]# [root@s17ab8051000 ~]# vgextend vg_data /dev/xvdd1 Volume group "vg_data" successfully extended
자 여기서부터가 중요한데 pvcreate를 이용하여 PV를 생성해주는 것까지는 동일합니다.
하지만 이번엔 볼륨 그룹을 따로 생성해주지 않았습니다.
볼륨 그룹을 따로 생성할 수도 있겠지만 vgextend를 이용하여 기존 볼륨 그룹을 확장하는 방식으로 해보았습니다.
[root@s17ab8051000 ~]# vgdisplay --- Volume group --- VG Name vg_data System ID Format lvm2 Metadata Areas 3 Metadata Sequence No 3 VG Access read/write VG Status resizable MAX LV 0 Cur LV 1 Open LV 1 Max PV 0 Cur PV 3 Act PV 3 VG Size <5.86 TiB PE Size 4.00 MiB Total PE 1535997 Alloc PE / Size 1023998 / <3.91 TiB Free PE / Size 511999 / 1.95 TiB VG UUID Kl29bl-HIIm-NXxt-RPRI-1mfr-VMtO-0qOO7I [root@s17ab8051000 ~]# lvextend -l +511999 /dev/vg_data/lv_data Size of logical volume vg_data/lv_data changed from <3.91 TiB (1023998 extents) to <5.86 TiB (1535997 extents). Logical volume vg_data/lv_data successfully resized.
vgdisplay를 이용해서 보면 정상적으로 VG가 확장되어 Free PE / Size가 추가적으로 여유가 생긴 것을 확인할 수 있습니다.
여기서 lvextend 명령어를 이용해줍시다!
lvextend를 이용하면 논리적 볼륨을 확장할 수 있습니다.
이번엔 -l 명령어로 PE를 지정해서 줘봅시다. (1PE 당 4MB의 용량이라고 합니다.)
[root@s17ab8051000 ~]# lvscan ACTIVE '/dev/vg_data/lv_data' [<5.86 TiB] inherit [root@s17ab8051000 ~]# df -h /data Filesystem Size Used Avail Use% Mounted on /dev/mapper/vg_data-lv_data 4.0T 33M 4.0T 1% /data
끝이 아닙니다.
LV는 확장되었지만 df 명령어로 보면 그대로 전체 크기가 4T로 머물러 있을 것입니다.
왜냐? 파일시스템을 확장해주지 않았으니까…
[root@s17ab8051000 ~]# xfs_growfs -d /data meta-data=/dev/mapper/vg_data-lv_data isize=512 agcount=4, agsize=262143488 blks = sectsz=512 attr=2, projid32bit=1 = crc=1 finobt=0 spinodes=0 data = bsize=4096 blocks=1048573952, imaxpct=5 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 ftype=1 log =internal bsize=4096 blocks=511999, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 data blocks changed from 1048573952 to 1572860928 [root@s17ab8051000 ~]# [root@s17ab8051000 ~]# df -h /data Filesystem Size Used Avail Use% Mounted on /dev/mapper/vg_data-lv_data 5.9T 33M 5.9T 1% /data
xfs_growfs 명령어로 위와 같이 파일시스템을 확장해줄 수 있습니다.
※ 파일시스템이 EXT4일 경우 resize2fs 명령어를 사용할 수 있습니다.
파일시스템 확장 후 df 명령어로 다시 확인 해보면 정상적으로 6T까지 용량이 늘어난 것을 볼 수 있습니다.
Note

이렇게 스토리지 LVM을 이용하여 파티션을 구성했을 경우 백업을 스냅샷 백업이 아닌 이미지 백업으로 해야합니다.

이후 서버에 문제가 생겼을 때 생성된 이미지로 서버를 재생성하면 구성된 LVM까지 전부 다 그대로 올라오는데 스냅샷은 그렇게 할 수 없습니다.
스토리지 여러개를 하나로 묶어 놓았는데 스냅샷으로 백업해버리면 스냅샷으로 볼륨 생성 후 이걸 다시 묶어주고 파일시스템을 포맷하면 데이터가 살아있지 못하죠..
단 이미지 백업으로 서버를 생성하면 서버 생성 시 스토리지 종류를 SSD로 선택할 경우 나머지 볼륨들도 전부 SSD로 생성된다는 점이죠…
나머지 볼륨들을 다시 HDD로 변경하려면 스토리지를 HDD로 생성 하고 LVM으로 PV,VG, LV전부 구성 해준 뒤 데이터를 복사해줘야합니다…?
Personal Comments
지금까지 네이버 클라우드 리눅스 환경에서 2000GB를 초과하는 파티션을 만들어보았습니다.
오늘 설명드린 LVM을 이용한 파티션 생성 및 확장 뿐만이 아니라 축소, 스냅샷 등 다양하게 사용할 수 있으니 관심있으시면 다양하게 써보시면 좋을 것같습니다.
Windows편도 금방 포스팅하도록 하겠습니다.
긴 글 읽어주셔서 감사합니다.

No Comments