시작 하기 전..
VM웨어의 우분투 서버 용량이 꽉차서 더이상 작업이 불가능한 상황이 왔다.
디스크 용량 확장하려면 스냅샷을 지워야하므로, 원본을 백업하고 복사한다음 스냅샷 삭제 이후 디스크 크기 확장 진행한다.
vm머신 우클릭 - 설정 - harddisk - expand 선택, 기존 50 -> 64로 키웠다.
VM웨어에서 LVM 파티션 크기를 키워주려면 물리 파티션에 크기를 바로 추가해주는 방식이 아니라,
- 다른 물리 파티션 생성 ->
- 파티션 종류 LVM으로 전환 ->
- 물리 볼륨 생성 ->
- 기존 VLM과 새로 만든 LVM 병합
순으로 진행해야한다.
이후 설정 진행하기 전에 스냅샷 떠두고 부팅한다.
디스크 구조 확인
df -h로 전체 볼륨 용량 확인 -> 볼륨 추가 안된것 확인됨
└────╼ df -h
Filesystem Size Used Avail Use% Mounted on
udev 468M 0 468M 0% /dev
tmpfs 98M 4.6M 93M 5% /run
/dev/mapper/catpwn--vg-root 19G 18G 0 100% /
tmpfs 488M 0 488M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 488M 0 488M 0% /sys/fs/cgroup
/dev/sda1 472M 462M 0 100% /boot
tmpfs 98M 0 98M 0% /run/user/0
tmpfs 98M 0 98M 0% /run/user/1058
lsblk로 파티션/논리볼륨/lvm 구조 확인
└────╼ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 64G 0 disk
├─sda1 8:1 0 487M 0 part /boot
├─sda2 8:2 0 1K 0 part
└─sda5 8:5 0 19.5G 0 part
├─catpwn--vg-root 252:0 0 18.5G 0 lvm /
└─catpwn--vg-swap_1 252:1 0 1G 0 lvm [SWAP]
sr0 11:0 1 1024M 0 rom
용량을 확장해주려는 --vg-root 볼륨은 lvm으로, sda5 논리 파티션 하위에 존재한다.
sda5 논리 파티션은 sda2 물리 파티션에서 만들어진 상황.
fdisk 로 전체용량 / 현재 파티션에 할당된 용량 확인
└────╼ fdisk /dev/sda
Welcome to fdisk (util-linux 2.27.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/sda: 64 GiB, 68719476736 bytes, 134217728 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: 0x5ada5a32
Device Boot Start End Sectors Size Id Type
/dev/sda1 * 2048 999423 997376 487M 83 Linux
/dev/sda2 1001470 41940991 40939522 19.5G 5 Extended
/dev/sda5 1001472 41940991 40939520 19.5G 8e Linux LVM
전체용량 64GB 주에 LVM을 통해 19.5GB 만 할당되어있는 상황임.
vgs 명령어로 볼륨 그룹 목록을 볼 수있고,
vgdisplay 명령어로 볼륨 그룹의 특정 볼륨 정보를 볼 수 있음.
└────╼ vgs
VG #PV #LV #SN Attr VSize VFree
catpwn-vg 1 2 0 wz--n- 19.52g 0
┌─╼[~]
└────╼ vgdisplay
--- Volume group ---
VG Name catpwn-vg
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 3
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 2
Max PV 0
Cur PV 1
Act PV 1
VG Size 19.52 GiB
PE Size 4.00 MiB
Total PE 4997
Alloc PE / Size 4997 / 19.52 GiB
Free PE / Size 0 / 0
VG UUID etRRwR-c7JD-a0qS-z56f-p4Ij-mNNP-ESqBs7
pvs 명령어로 물리 볼륨 목록 조회 / pvdisplay로 특정 볼륨의 정보 조회
└────╼ pvs
PV VG Fmt Attr PSize PFree
/dev/sda5 catpwn-vg lvm2 a-- 19.52g 0
┌─╼[~]
└────╼ pvdisplay
--- Physical volume ---
PV Name /dev/sda5
VG Name catpwn-vg
PV Size 19.52 GiB / not usable 2.00 MiB
Allocatable yes (but full)
PE Size 4.00 MiB
Total PE 4997
Free PE 0
Allocated PE 4997
PV UUID cUiXEB-CkVi-3lE3-eI4s-1bKT-nETk-fqKywY
lvs로 논리 볼륨 목록 조회 / lvdisplayh로 논리 볼륨 정보 보회
└╼ lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root catpwn-vg -wi-ao---- 18.52g
swap_1 catpwn-vg -wi-ao---- 1.00g
┌─╼[~]
└────╼ lvdisplay
--- Logical volume ---
LV Path /dev/catpwn-vg/root
LV Name root
VG Name catpwn-vg
LV UUID lo2HEt-avPl-bgXP-Yb9I-UKxS-tGMv-SgaEiG
LV Write Access read/write
LV Creation host, time catpwn, 2017-01-24 19:57:46 +0900
LV Status available
# open 1
LV Size 18.52 GiB
Current LE 4741
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 252:0
--- Logical volume ---
LV Path /dev/catpwn-vg/swap_1
LV Name swap_1
VG Name catpwn-vg
LV UUID Lz6JKz-GnrT-BNuB-m9YI-9OSi-trFX-XqhIV3
LV Write Access read/write
LV Creation host, time catpwn, 2017-01-24 19:57:46 +0900
LV Status available
# open 2
LV Size 1.00 GiB
Current LE 256
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 252:1
볼륨 그룹 - 물리볼륨 - 논리 볼륨 순으로 정렬된다고 생각하자.
파티션 및 볼륨 생성 , LVM 전환
일단 볼륨을 만들기 위해 물리 파티션을 생성한다.
fdisk /dev/sda -> n (신규 파티션) -> p(물리 파티션)
-> 파티션 번호 지정 -> 섹터지정 순으로 진행한다.
└╼ fdisk /dev/sda
Command (m for help): p
Disk /dev/sda: 64 GiB, 68719476736 bytes, 134217728 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: 0x5ada5a32
Device Boot Start End Sectors Size Id Type
/dev/sda1 * 2048 999423 997376 487M 83 Linux
/dev/sda2 1001470 41940991 40939522 19.5G 5 Extended
/dev/sda5 1001472 41940991 40939520 19.5G 8e Linux LVM
Command (m for help): n
Partition type
p primary (1 primary, 1 extended, 2 free)
l logical (numbered from 5)
Select (default p): p
Partition number (3,4, default 3): 3
First sector (41940992-134217727, default 41940992): 41940992
Last sector, +sectors or +size{K,M,G,T,P} (41940992-134217727, default 134217727):
Created a new partition 3 of type 'Linux' and of size 44 GiB.
신규 파티션의 시작 섹터는 현재 만들어진 파티션의 섹터 바로 다음 섹터부터 시작한다.
종료 섹터는 용량을 지정하거나, 섹터 번호를 지정하면 된다.
기본값으로 두고 엔터를 입력하면 최대 범위까지 지정된다. 이후 p로 할당된 파티션 정보를 확인하자.
Command (m for help): p
Disk /dev/sda: 64 GiB, 68719476736 bytes, 134217728 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: 0x5ada5a32
Device Boot Start End Sectors Size Id Type
/dev/sda1 * 2048 999423 997376 487M 83 Linux
/dev/sda2 1001470 41940991 40939522 19.5G 5 Extended
/dev/sda3 41940992 134217727 92276736 44G 83 Linux
/dev/sda5 1001472 41940991 40939520 19.5G 8e Linux LVM
Partition table entries are not in disk order.
그 다음, 생성된 물리 파티션을 LVM으로 전환한다.
t(파티션 관리) -> 3(파티션 선택) -> L (전환 타입 설정) -> 8e(LVM 형식 선택) -> w(변경사항 저장
Command (m for help): t
Partition number (1-3,5, default 5): 3
Partition type (type L to list all types): 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 <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 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 <3 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
Partition type (type L to list all types): 8e
Changed type of partition 'Linux' to 'Linux LVM'.
Command (m for help): p
Disk /dev/sda: 64 GiB, 68719476736 bytes, 134217728 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: 0x5ada5a32
Device Boot Start End Sectors Size Id Type
/dev/sda1 * 2048 999423 997376 487M 83 Linux
/dev/sda2 1001470 41940991 40939522 19.5G 5 Extended
/dev/sda3 41940992 134217727 92276736 44G 8e Linux LVM
/dev/sda5 1001472 41940991 40939520 19.5G 8e Linux LVM
Partition table entries are not in disk order.
Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Re-reading the partition table failed.: 장치나 자원이 동작 중
The kernel still uses the old table. The new table will be used at the next reboot or after you run partprobe(8) or kpartx(8).
정보 변경까지 확인했으면 w로 저장하고 리부트를 진행한다.
lsblk로 변경사항 적용되었는지 확인
└╼ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 64G 0 disk
├─sda1 8:1 0 487M 0 part /boot
├─sda2 8:2 0 1K 0 part
├─sda3 8:3 0 44G 0 part
└─sda5 8:5 0 19.5G 0 part
├─catpwn--vg-root 252:0 0 18.5G 0 lvm /
└─catpwn--vg-swap_1 252:1 0 1G 0 lvm [SWAP]
sr0 11:0 1 1024M 0 rom
pvcreate로 해당 파티션에 물리 볼륨을 생성하고, 정보를 확인해보자.
└────╼ pvcreate /dev/sda3
Physical volume "/dev/sda3" successfully created
┌─╼[/home/synod2]
└────╼ pvs
PV VG Fmt Attr PSize PFree
/dev/sda3 lvm2 --- 44.00g 44.00g
/dev/sda5 catpwn-vg lvm2 a-- 19.52g 0
└────╼ pvdisplay
--- Physical volume ---
PV Name /dev/sda5
VG Name catpwn-vg
PV Size 19.52 GiB / not usable 2.00 MiB
Allocatable yes (but full)
PE Size 4.00 MiB
Total PE 4997
Free PE 0
Allocated PE 4997
PV UUID cUiXEB-CkVi-3lE3-eI4s-1bKT-nETk-fqKywY
"/dev/sda3" is a new physical volume of "44.00 GiB"
--- NEW Physical volume ---
PV Name /dev/sda3
VG Name
PV Size 44.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID JG6bWo-h4r1-HjUN-Pqdj-vwrd-m3Js-NjAACh
볼륨 병합
이제 기존 LVM 볼륨 그룹에 새로 만들어진 물리 볼륨을 포함시킬거다.
이 작업을 하기 위해 아까전에 물리 파티션을 LVM 파티션으로 전환시켰다.
gextend "볼륨 그룹 이름" "포함시킬 볼륨이름"
으로 진행한다. 볼륨 그룹 이름은 위에서 VG Name이라고 되어있는 항목을 참조하자.
└────╼ vgextend catpwn-vg /dev/sda3
Volume group "catpwn-vg" successfully extended
└╼ pvdisplay
--- Physical volume ---
PV Name /dev/sda5
VG Name catpwn-vg
PV Size 19.52 GiB / not usable 2.00 MiB
Allocatable yes (but full)
PE Size 4.00 MiB
Total PE 4997
Free PE 0
Allocated PE 4997
PV UUID cUiXEB-CkVi-3lE3-eI4s-1bKT-nETk-fqKywY
--- Physical volume ---
PV Name /dev/sda3
VG Name catpwn-vg
PV Size 44.00 GiB / not usable 0
Allocatable yes
PE Size 4.00 MiB
Total PE 11264
Free PE 11264
Allocated PE 0
PV UUID JG6bWo-h4r1-HjUN-Pqdj-vwrd-m3Js-NjAACh
볼륨 그룹에 포함된것 확인된다.
└────╼ vgdisplay
--- Volume group ---
VG Name catpwn-vg
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 4
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 2
Max PV 0
Cur PV 2
Act PV 2
VG Size 63.52 GiB
PE Size 4.00 MiB
Total PE 16261
Alloc PE / Size 4997 / 19.52 GiB
Free PE / Size 11264 / 44.00 GiB
VG UUID etRRwR-c7JD-a0qS-z56f-p4Ij-mNNP-ESqBs7
볼륨 그룹에 포함되면서 해당 볼륨의 크기도 늘어난게 확인된다.
이제 같은 볼륨 그룹에 포함시켰으니, 기존 LVM 볼륨의 크기를 확장시켜주면 된다.
같은 볼륨그룹 내에 있는 볼륨들만 병합을 시켜줄 수 있기 때문에 이전 작업을 진행했다.
lvextend -L+"확장용량" "기존 논리 볼륨 이름" "병합할 볼륨 이름"
같은 볼륨 그룹 내에서 44GB 만큼 용량 여유가 생겼기에, 해당 볼륨 내의 다른 볼륨을 기존 논리 볼륨에 병합시켜주는 작업이다.
Free PE/Size 라고 되어있는게 해당 볼륨 내의 여유 용량이다. 해당 용량만큼 확장 용량을 지정해주고,
lvdisplay로 기존 논리 볼륨의 이름을 찾아오면 된다.
└────╼ lvextend -L+44GB /dev/catpwn-vg/root /dev/sda3
Size of logical volume catpwn-vg/root changed from 18.52 GiB (4741 extents) to 62.52 GiB (16005 extents).
Logical volume root successfully resized.
이후 해당 내용이 반영되었는지 확인해보자.
└────╼ lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root catpwn-vg -wi-ao---- 62.52g
swap_1 catpwn-vg -wi-ao---- 1.00g
└────╼ lvdisplay
--- Logical volume ---
LV Path /dev/catpwn-vg/root
LV Name root
VG Name catpwn-vg
LV UUID lo2HEt-avPl-bgXP-Yb9I-UKxS-tGMv-SgaEiG
LV Write Access read/write
LV Creation host, time catpwn, 2017-01-24 19:57:46 +0900
LV Status available
# open 1
LV Size 62.52 GiB
Current LE 16005
Segments 2
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 252:0
└────╼ df -h
Filesystem Size Used Avail Use% Mounted on
udev 468M 0 468M 0% /dev
tmpfs 98M 4.5M 93M 5% /run
/dev/mapper/catpwn--vg-root 19G 18G 0 100% /
tmpfs 488M 0 488M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 488M 0 488M 0% /sys/fs/cgroup
/dev/sda1 472M 462M 0 100% /boot
tmpfs 98M 0 98M 0% /run/user/1058
병합한 볼륨 마운트
디스크상 논리 볼륨은 병합되었으나, 아직 마운트랑 리사이징은 이뤄지지 않아 실제 용량에는 반영되지 않았다.
resize2fs "볼륨명"
으로 변경사항을 반영해준다.
└────╼ resize2fs /dev/mapper/catpwn--vg-root
resize2fs 1.42.13 (17-May-2015)
Filesystem at /dev/mapper/catpwn--vg-root is mounted on /; on-line resizing required
old_desc_blocks = 2, new_desc_blocks = 4
The filesystem on /dev/mapper/catpwn--vg-root is now 16389120 (4k) blocks long.
다시 디스크 정보를 확인하면 볼륨이 제대로 마운트되는것을 확인할 수 있다.
└────╼ df -h
Filesystem Size Used Avail Use% Mounted on
udev 468M 0 468M 0% /dev
tmpfs 98M 4.5M 93M 5% /run
/dev/mapper/catpwn--vg-root 62G 18G 42G 30% /
tmpfs 488M 0 488M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 488M 0 488M 0% /sys/fs/cgroup
/dev/sda1 472M 462M 0 100% /boot
tmpfs 98M 0 98M 0% /run/user/1058
└╼ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 64G 0 disk
├─sda1 8:1 0 487M 0 part /boot
├─sda2 8:2 0 1K 0 part
├─sda3 8:3 0 44G 0 part
│ └─catpwn--vg-root 252:0 0 62.5G 0 lvm /
└─sda5 8:5 0 19.5G 0 part
├─catpwn--vg-root 252:0 0 62.5G 0 lvm /
└─catpwn--vg-swap_1 252:1 0 1G 0 lvm [SWAP]
sr0 11:0 1 1024M 0 rom
즉,
- 추가한 용량만큼 새로운 물리 파티션을 추가하고 (PC에서 하드디스크 추가하듯이)
- 논리 디스크로 사용하기 위해 LVM 형식으로 전환 후,
- 해당 파티션의 하위 볼륨을 만들어 준 다음,
- 기존 볼륨 그룹에 신규 볼륨을 추가해주고
- 논리적으로 두 볼륨을 묶어서 사용하게 되는거다.
이러면 물리구조 상으로는 (어차피 가상환경이라 전부 논리구조지만) 두 하드가 따로 있어 데이터들이 별도로 위치하지만 논리적으로는 같은 디스크를 쓰는것 처럼 활용이 가능해진다.