Tag Archives: lvm

Linux #15 : LVM에서 Logical Volume의 Resizing

지난 시간에 LVM에서의 Logical Volume 생성에 대해서 배웠는데 LVM에서 생성된 File System은 VG의 Size 한도 안에서 확장이 가능하고, File System에 따라서 별도의 Format 작업이 없이 확장 가능하기도 하다. 필자는 IBM AIX를 다룰 때 JFS2를 사용 했었는데, 이 Volume이 Onlice상에서 확장 가능한 Volume이었고, Oracle에서 Raw Device를 사용할 경우 해당 Raw Device에 대해 LVM으로 구성하여 복잡한 작업없이 Logical Volume을 확장 했던 적이 있었다.

Logical Volume의 확장은 정상적으로 동작 했을 경우에는 문제가 되지 않지만, 문제가 발생했을 경우에는 모든 Data를 손실할 경우도 있으므로 작업 전에 반드시 Data를 Backup 할 것을 권유하고 싶다.

LVM의 Logical Volume을 확장하기 위해서 “lvextend”라는 command가 사용된다.
지난 시간에 작성한 Logical Volume인 “/dev/vg001/MyTechies”를 참조 해 보자.

$ lvdisplay /dev/vg001/MyTechies
--- Logical volume ---
LV Name /dev/vg001/MyTechies
VG Name vg001
LV UUID j7037M-1uii-KO6a-ov6t-ub6C-Pm42-DPeGEj
LV Write Access read/write
LV Status available
# open 0
LV Size 40.00 GB
Current LE 1280
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:0

아래와 같이 확장시킬 File System(/dev/vg001/MyTechies)은 Online 상태에 있으며, /home/lvm2test에 mount 되어 있다.


$ mount
/dev/sda2 on / type ext3 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
/dev/sda6 on /home type ext3 (rw,nodev)
/dev/sda1 on /boot type ext3 (rw,noexec,nosuid,nodev)
tmpfs on /dev/shm type tmpfs (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
/dev/mapper/vg001-MyTechies on /home/lvm2test type ext3 (rw)

$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 31G 3.4G 26G 12% /
/dev/sda6 43G 889M 40G 3% /home
/dev/sda1 99M 17M 77M 18% /boot
tmpfs 1006M 0 1006M 0% /dev/shm
/dev/mapper/vg001-MyTechies
40G 177M 38G 1% /home/lvm2test

lvextend를 통해서 10G를 확장 시켜 보면


$ lvextend -L +10G /dev/vg001/MyTechies
Extending logical volume MyTechies to 50.00 GB
Logical volume MyTechies successfully resized

정상적으로 확장이 되었다는 Message를 확인 할 수 있고, “lvdisplay”로 확인을 하면,


$ lvdisplay /dev/vg001/MyTechies
--- Logical volume ---
LV Name /dev/vg001/MyTechies
VG Name vg001
LV UUID j7037M-1uii-KO6a-ov6t-ub6C-Pm42-DPeGEj
LV Write Access read/write
LV Status available
# open 1
LV Size 50.00 GB
Current LE 1600
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:0

LV Size가 40.00 GB에서 50.00 GB로 확장 된 것을 확인 할 수 있다. 그리고, “resize2fs”를 통해서 File System을 확장 해 주면 된다.
여기서 File System을 축소 할 경우에는 해당 File System의 Unmount가 반드시 필요하지만, 확장시에는 Online상태에서 Resize가 가능하다.

$ resize2fs /dev/vg001/MyTechies
resize2fs 1.39 (29-May-2006)
Filesystem at /dev/vg001/MyTechies is mounted on /home/lvm2test; on-line resizing required
Performing an on-line resize of /dev/vg001/MyTechies to 13107200 (4k) blocks.
The filesystem on /dev/vg001/MyTechies is now 13107200 blocks long.

$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 31G 3.4G 26G 12% /
/dev/sda6 43G 889M 40G 3% /home
/dev/sda1 99M 17M 77M 18% /boot
tmpfs 1006M 0 1006M 0% /dev/shm
/dev/mapper/vg001-MyTechies
50G 180M 47G 1% /home/lvm2test

또한 정상적으로 확장 된 것을 확인 할 수 있다.
그럼, 이제 축소를 시켜보자. File System의 축소는 위에서 이야기 했던 것 처럼 먼저 Umount가 선행 되어야 한다.

$ umount /home/lvm2test/

또한, 축소를 할 경우에는 File System의 Size를 변경 시킨 후 행할 필요가 있다. 이는 Defragment와 동일한 개념으로 생각하면 된다.
먼저 “e2fsck”를 이용하여 File System의 정합성을 체크하고, “resize2fs”로 Size를 축소하면 된다.

$ e2fsck -f /dev/vg001/MyTechies
e2fsck 1.39 (29-May-2006)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/vg001/MyTechies: 12/6553600 files (8.3% non-contiguous), 251734/13107200 blocks

$ resize2fs /dev/vg001/MyTechies 40G => Size를 40G로 축소
resize2fs 1.39 (29-May-2006)
Resizing the filesystem on /dev/vg001/MyTechies to 10485760 (4k) blocks.
The filesystem on /dev/vg001/MyTechies is now 10485760 blocks long.

그런 다음 resize2fs를 통해 축소된 Size와 동일하게 Logical Volume Size도 축소를 시켜주면 된다.
이때 “lvreduce” command가 사용된다.

$ lvreduce -L 40G /dev/vg001/MyTechies
WARNING: Reducing active logical volume to 40.00 GB
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce MyTechies? [y/n]: y => Y를 입력
Reducing logical volume MyTechies to 40.00 GB
Logical volume MyTechies successfully resized

$ lvdisplay /dev/vg001/MyTechies
--- Logical volume ---
LV Name /dev/vg001/MyTechies
VG Name vg001
LV UUID 4i5MxQ-qxNA-JzR1-HC3V-I041-hwvz-Q31rva
LV Write Access read/write
LV Status available
# open 0
LV Size 40.00 GB
Current LE 1280
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:0

축소 작업에서는 확장할 때 보다 문제가 발생할 가능성이 많으므로, 중요한 Data는 반드시 Backup 먼저 한 후 작업을 하길 바랍니다.

Advertisement

Linux #14 : LVM에서 Logical Volume 생성하기

지난 시간에 LVM의 구성확인을 위한 Command에 대해서 확인을 했고, 이번엔 Logical Volume을 생성하기위한 방법에 대해서 설명하도록 하겠습니다.

LVM은 지난시간에 설명 한 것과 같이 PV(Physical Volume), VG(Volume Group), LV(Logical Volume) 순으로 구성된다고 했는데, LV를 생성하기 위해선 먼저 PV를 만들고 VG를 구성한 뒤 VG 위에 LV를 생성하면 됩니다.

일단 PV를 구성하기 위해서는 PV를 구성하기 위한 Device를 확인해야 하는데 이때는 Linux File System에 대한 지식이 좀 필요하겠네요. SCSI Device를 LVM 용도로 추가 하였고, /dev/sdb Device라면 “fdisk”와 같은 명령어로 확인이 가능하겠죠.

$ fdisk -l /dev/sdb
Disk /dev/sdb: 85.8 GB, 85899345920 bytes
255 heads, 63 sectors/track, 10443 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk /dev/sdb doesn't contain a valid partition table

PV를 생성하기 위해서는 “pvcreate” 명령어를 사용하면 된다.

$ pvcreate -v /dev/sdb
Set up physical volume for "/dev/sdb" with 167772160 available sectors
Zeroing start of device /dev/sdb
Physical volume "/dev/sdb" successfully created

위와 같이 PV 생성하였고, 생성 된 PV는 “pvscan”으로 확인 가능합니다.

$ pvscan
PV /dev/sdb lvm2 [80.00 GB]
Total: 1 [80.00 GB] / in use: 0 [0 ] / in no VG: 1 [80.00 GB]

그럼 이제 VG 생성이 가능하게 되는데 “vgcreate”를 사용하여 생성하면 됩니다.

vgcreate [VGNAME] [DEVICE]
$ vgcreate -v vg001 /dev/sdb
Wiping cache of LVM-capable devices
Adding physical volume '/dev/sdb' to volume group 'vg001'
Archiving volume group "vg001" metadata (seqno 0).
Creating volume group backup "/etc/lvm/backup/vg001" (seqno 1).
Volume group "vg001" successfully created

또, 생성 된 VG에 대해서 “vgdisplay”로 확인 하면,

$ vgdisplay
--- Volume group ---
VG Name vg001
System ID
Format lvm2
Metadata Areas 1
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 1
Act PV 1
VG Size 80.00 GB
PE Size 4.00 MB
Total PE 20479
Alloc PE / Size 0 / 0
Free PE / Size 20479 / 80.00 GB
VG UUID C8n1rc-3p2U-0TD2-NS0N-XtOJ-zgKs-clDWPy

여기서 확인 해 볼 필요가 있는 건 지난 시간에 설명을 했던 PE (Physical Extent)에 관한 것인데, LV를 생성할 때 할당되는 Block에 관한 것으로 VG에서 PE Size를 설정하는 것이 가능하기 때문이다. 1개의 LV에 할당 가능한 최대의 PE수는 65535 Block이기 때문에 PE Size의 크기에 따라 LV의 최대 Size가 변하게 된다. 그러나, 너무 크다면 LV의 Size의 조절범위가 커지기 때문에 불필요한 용량이 늘어날 수도 있기 때문에 주의가 필요하다. Default PE Size는 4MB(4096KB)로 아래와 같은 Option을 추가하는 것으로 PE Size의 변경이 가능하다. 일단 VG를 만든 이후에는 변경을 못하게 됨으로 VG 생성 전에 적절한 Sizing을 통해 PE Size를 결정 해 줄 필요가 있다.

$ vgcreate -v -s32m vg001 /dev/sdb
Wiping cache of LVM-capable devices
Adding physical volume '/dev/sdb' to volume group 'vg001'
Archiving volume group "vg001" metadata (seqno 0).
Creating volume group backup "/etc/lvm/backup/vg001" (seqno 1).
Volume group "vg001" successfully created

$ vgdisplay
--- Volume group ---
VG Name vg001
System ID
Format lvm2
Metadata Areas 1
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 1
Act PV 1
VG Size 79.97 GB
PE Size 32.00 MB
Total PE 2559
Alloc PE / Size 0 / 0
Free PE / Size 2559 / 79.97 GB
VG UUID ZVQ1xJ-8vdF-5C2C-fBgS-fX3h-8yZG-r5dcjM

4MB 일 때와 32MB 일때의 PE 갯수가 변한 건 확일 할 수 있죠, 32MB일때는 VG Size가 79.97 GB인것도 다르죠.
VG까지 생성 했다면 이제 드디어 LV의 생성이 가능하게 됩니다. LV의 생성은 “lvcreate”를 이용하면 되고

lvcreate -n[LV NAME] -L[LV SIze] [VG]
$ lvcreate -v -nMyTechies -L40G vg001
Setting logging type to disk
Finding volume group "vg001"
Archiving volume group "vg001" metadata (seqno 3).
Creating logical volume MyTechies
Creating volume group backup "/etc/lvm/backup/vg001" (seqno 4).
Found volume group "vg001"
Creating vg001-MyTechies
Loading vg001-MyTechies table
Resuming vg001-MyTechies (253:0)
Clearing start of logical volume "MyTechies"
Creating volume group backup "/etc/lvm/backup/vg001" (seqno 4).
Logical volume "MyTechies" created

그리고, “lvdisplay”로 확인 가능합니다.

$ lvdisplay
--- Logical volume ---
LV Name /dev/vg001/MyTechies
VG Name vg001
LV UUID j7037M-1uii-KO6a-ov6t-ub6C-Pm42-DPeGEj
LV Write Access read/write
LV Status available
# open 0
LV Size 40.00 GB
Current LE 1280
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:0

LV를 생성하게 되면 LV에 대한 Device명은 /dev/[VG Name]/[LV Name]이 됩니다. 위에서 보면 /dev/vg001/MyTechies를 확인 할 수 있습니다. 그리고, “vgdisplay” 통해 확인 하면,

$ vgdisplay
--- Volume group ---
VG Name vg001
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 4
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 0
Max PV 0
Cur PV 1
Act PV 1
VG Size 79.97 GB
PE Size 32.00 MB
Total PE 2559
Alloc PE / Size 1280 / 40.00 GB
Free PE / Size 1279 / 39.97 GB
VG UUID ZVQ1xJ-8vdF-5C2C-fBgS-fX3h-8yZG-r5dcjM

생성 된 LV 만큼, LV에 대한 정보면 Allocated 된 Size 정보, 남은 용량등을 확인 할 수 있습니다. 이 이후에는 LV를 format하고 mount를 하여 사용하면 되겠죠. Format은 mkfs, mkfs.ext3 Filesystem에 따라 해 주시면 되고,

$ mkfs.ext3 /dev/vg001/MyTechies
mke2fs 1.39 (29-May-2006)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
5242880 inodes, 10485760 blocks
524288 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4294967296
320 block groups
32768 blocks per group, 32768 fragments per group
16384 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624

Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 28 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.

Mount를 작업을 거치면 사용가능하게 됩니다.

다음 시간에는 LVM에서 생성된 LV의 ReSizing에 대해서 설명을 하도록 하겠습니다.

Linux #13 : LVM (Logical Volume Manager)의 구성 확인

Logical Volume Manager인 LVM을 통해서 Volume을 생성하고, 확인 하는 방법에 대해서 정리 해 보려고 한다.
LVM은 여러개의 Partition을 한 개의 Disk(File system)으로 사용하기 위한 Disk 관리 기능이다. LVM을 사용하면 아래와 같은 장점이 있다.

1. 여러개의 Disk를 1개의 File System로 구성 가능
2. Partition Size의 변경이 용이
3. Snapshot과 같은 기능의 사용이 가능

우선 Physical Volume(PV) 정보를 확인 할 필요가 있고, 아래와 같이 “pvdisplay”로 확인 가능하다.

$ pvdisplay
--- Physical volume ---
PV Name /dev/sda2
VG Name VolGroup00
PV Size 111.69 GB / not usable 1018.00 KB
Allocatable yes (but full)
PE Size (KByte) 32768
Total PE 3574
Free PE 0
Allocated PE 3574
PV UUID dz7rf6-xEaU-WPEY-RRbg-7Gd5-CbJA-L2NFQy

Physical Volume은 Physical Device를 의미하며 LVM의 관리정보가 추가 된 Partition을 표시 해 주고 있다.
PE Size, Total PE, Free PE, Allocated PE, PE라는 용어가 있는데, 이는 Physical Extent로 저장영역의 최소단위이다.
이후에 만들어지게 될 Logical Volume은 이 PE를 필요한 만큼 배분하여 가상적인 Partition을 작성하는 걸 의미하고, 위 정보에 의하며 PE Size는 32MBytes로, 총수는 3574개이고, Free는 없으며, 모든 PE가 사용되고 있다고 볼 수 있다.

Physical Volume의 다음 단계는 VG(Volume Group)가 되는데, VG는 Physical Volume을 구성하는 가상의 저장장치를 의미한다. Volume Group을 생성하는 것으로 여러개의 Physical Volume을 한개의 큰 File system(Disk)로 System 에서 인식하는게 가능하게 된다. Volume Group에 대한 정보는 “vgdisplay”를 통해서 확인 가능하다.

$ vgdisplay
--- Volume group ---
VG Name VolGroup00
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 4
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 3
Open LV 3
Max PV 0
Cur PV 1
Act PV 1
VG Size 111.69 GB
PE Size 32.00 MB
Total PE 3574
Alloc PE / Size 3574 / 111.69 GB
Free PE / Size 0 / 0
VG UUID qKtkYK-FaRH-zUfi-0ECP-A5J7-f1W4-7ffYSa

Volume Group이 구성된 이후엔 마지막 단계인 Logical Volume(LV)이 구성되는데, Logical Volume은 Volume Group상에서 생성된 가상 Partition이고, 이는 “lvdisplay”로 확인 가능하다.

$ lvdisplay
--- Logical volume ---
LV Name /dev/VolGroup00/LogVol02
VG Name VolGroup00
LV UUID S6gx2z-GcWu-9hmx-kHK3-YcpT-RsSy-a9yzcJ
LV Write Access read/write
LV Status available
# open 1
LV Size 107.69 GB
Current LE 3446
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:3

--- Logical volume ---
LV Name /dev/VolGroup00/LogVol01
VG Name VolGroup00
LV UUID fPqNNh-hJTA-N6cU-Ndzh-CRMP-rylz-hK56ay
LV Write Access read/write
LV Status available
# open 1
LV Size 2.00 GB
Current LE 64
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:4

--- Logical volume ---
LV Name /dev/VolGroup00/LogVol00
VG Name VolGroup00
LV UUID W00Fr8-AaxC-nloz-nXmO-j1Ma-qaRY-yOmuQJ
LV Write Access read/write
LV Status available
# open 1
LV Size 2.00 GB
Current LE 64
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:5

따라서, 정리를 해 보면 어떤 Device가 추가 되면 Physical Device에서 Physical Volume을 생성하고, PV에서 Volume Group을 할당하고, Volume Group상에서 Logical Volume이 존재하게 된다는 것이고, 이는 Physical Device -> PV Create -> VG Create -> LV Create를 통해서 순차적으로 생성가능하게 된다.

LVM에서의 File System 생성은 Linux #14 : LVM에서 Logical Volume 생성하기에서 설명하도록 하겠다.