[Linux/Ubuntu 파일 시스템 관리] linux LVM (Logical volume manager) 관리하기
Logical volume manager(LVM)은 disk volume의 크기를 늘리거나 줄이거나 혹은 이동할 수 있게 하는 유연성을 제공한다. 또한 SAN(Storage-area networks)과 유사한 snapshot을 제공하기도 한다.
ubuntu에서는 LVM2 package를 설치($ sudo apt-get install lvm2)한뒤, 우선 volume group을 생성하고, logical volume, 그리고 physical volume을 차례로 정의해야 한다. logical volume은 logical extent로, physical volume은 physical extent로 나눠진다.
LVM을 사용하는데 있어 주요한 작업은 volume group과 logical volume을 생성하고, extent(disk 공간의 작은 조각(chunk))를 필요한 영역에 할당한다. 전통적인 파티션 방식으로 data를 백업하고 파티션을 변경한뒤 data를 다시 복사하는 전통적인 방법 대신에, LVM을 사용하면 단순히 사용하지 않는 extend를 필요한 곳에 추가만 하면 된다.
LVM volume 생성하기
우선 새로운 비어있는 disk인 /dev/sda로 부터 시작하겠다.
아래와 같이 fdisk를 이용하여 8e type, 즉, LVM 형식의 파티션을 생성한다.
~$ sudo fdisk /dev/sda
[sudo] password for greenfish:
WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
switch off the mode (command 'c') and change display units to
sectors (command 'u').
Command (m for help): p
Disk /dev/sda: 42.9 GB, 42949672960 bytes
255 heads, 63 sectors/track, 5221 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xfe80fe80
Device Boot Start End Blocks Id System
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-5221, default 1):
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-5221, default 5221):
Using default value 5221
Command (m for help): t
Selected partition 1
Hex code (type L to list codes): L
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
Hex code (type L to list codes): 8e
Changed system type of partition 1 to 8e (Linux LVM)
Command (m for help): p
Disk /dev/sda: 42.9 GB, 42949672960 bytes
255 heads, 63 sectors/track, 5221 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xfe80fe80
Device Boot Start End Blocks Id System
/dev/sda1 1 5221 41937651 8e Linux LVM
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
~$ sudo sfdisk -l /dev/sda
Disk /dev/sda: 5221 cylinders, 255 heads, 63 sectors/track
Units = cylinders of 8225280 bytes, blocks of 1024 bytes, counting from 0
Device Boot Start End #cyls #blocks Id System
/dev/sda1 0+ 5220 5221- 41937651 8e Linux LVM
/dev/sda2 0 - 0 0 0 Empty
/dev/sda3 0 - 0 0 0 Empty
/dev/sda4 0 - 0 0 0 Empty
~$
이제 /dev/sda1에 새로운 pvcreate 명령으로 LVM physical volume을 생성하고, pvs 명령으로 physical LVM volume에 대한 정보를 구해 보자.
~$ sudo pvcreate /dev/sda1
Physical volume "/dev/sda1" successfully created
~$ sudo pvs
PV VG Fmt Attr PSize PFree
/dev/sda1 lvm2 -- 39.99g 39.99g
~$
이제 vgcreate 명령으로 volume group을 생성하고 vgs로 현재 활성화된 volume group을 구해 본다.
~$ sudo vgcreate group_lvm_greenfish /dev/sda1
Volume group "group_lvm_greenfish" successfully created
~$ sudo vgs
VG #PV #LV #SN Attr VSize VFree
group_lvm_greenfish 1 0 0 wz--n- 39.99g 39.99g
~$
이제 lvcreate로 10G 크기의 새로운 LVM 파티션을 앞에서 만든 volume group으로 부터 생성한다. 그리고 lvs로 logical volume을 확인하고 vgs로 비어있는 공간의 크기를 구해보도록 한다.
~$ sudo lvcreate --size 10GB --name lv_greenfish group_lvm_greenfish
Logical volume "lv_greenfish" created
~$ sudo lvs
LV VG Attr LSize Origin Snap% Move Log Copy% Convert
lv_greenfish group_lvm_greenfish -wi-a- 10.00g
~$ sudo vgs
VG #PV #LV #SN Attr VSize VFree
group_lvm_greenfish 1 1 0 wz--n- 39.99g 29.99g
~$
마지막으로 lvm 파티션을 ext4 file system으로 포맷한다.
~$ sudo mkfs.ext4 /dev/mapper/group_lvm_greenfish-lv_greenfish
mke2fs 1.41.14 (22-Dec-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
655360 inodes, 2621440 blocks
131072 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2684354560
80 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632
Writing inode tables: done
Creating journal (32768 blocks):
done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 29 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
~$
LVM volume 사용하기
/dev/mapper로 표현되는 경로로 mount하여 사용한다.
~$ ls /dev/mapper
control group_lvm_greenfish-lv_greenfish
~$ sudo mkdir /mnt/001
~$ sudo mount -t ext4 /dev/mapper/group_lvm_greenfish-lv_greenfish /mnt/001
~$ df -m /mnt/001
Filesystem 1M-blocks Used Available Use% Mounted on
/dev/mapper/group_lvm_greenfish-lv_greenfish
10080 151 9417 2% /mnt/001
~$
이제 파일을 열거해 본다.
~$ ls /mnt/001
lost+found
~$
파일을 추가한다. 중간에 permission 오류 발생시 chown을 호출하여 소유자를 변경한다.
~$ cp examples.desktop /mnt/001
cp: cannot create regular file `/mnt/001/examples.desktop': Permission denied
~$ sudo chown greenfish /mnt/001
~$ cp examples.desktop /mnt/001
~$ dd if=/dev/zero of=/mnt/001/dummy.bin count=204800
204800+0 records in
204800+0 records out
104857600 bytes (105 MB) copied, 1.67602 s, 62.6 MB/s
~$ df -m /mnt/001
Filesystem 1M-blocks Used Available Use% Mounted on
/dev/mapper/group_lvm_greenfish-lv_greenfish
10080 251 9317 3% /mnt/001
~$ md5sum /mnt/001/examples.desktop
e7444acd4d538ede466c6d6cb932c5ec /mnt/001/examples.desktop
~$
LVM volume 늘리기
남은 공간이 모자르다면, LVM volume에 용량을 더 추가할 수 있다. 이는 lvresize 명령이면 가능하다. 이후 e2fsck로 file system을 검사해야 하고, resize2fs로 ext4 file system의 크기를 늘려줘야 한다.
우선, un-mount 상태에서 lvresize로 크기를 조정하고, e2fsck로 검사한다.
~$ sudo umount /mnt/001/
~$ sudo lvresize --size 15G /dev/mapper/group_lvm_greenfish-lv_greenfish
Extending logical volume lv_greenfish to 15.00 GiB
Logical volume lv_greenfish successfully resized
~$ sudo e2fsck -f /dev/mapper/group_lvm_greenfish-lv_greenfish
e2fsck 1.41.14 (22-Dec-2010)
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/mapper/group_lvm_greenfish-lv_greenfish: 13/655360 files (7.7% non-contiguous), 105264/2621440 blocks
~$
그릭고 아래와 같이 resize2fs를 통해 file system의 크기를 조절한다. 그리고 다시 mount하고, 크기와 기존 파일의 checksum과 비교한다.
~$ sudo resize2fs /dev/mapper/group_lvm_greenfish-lv_greenfish
resize2fs 1.41.14 (22-Dec-2010)
Resizing the filesystem on /dev/mapper/group_lvm_greenfish-lv_greenfish to 3932160 (4k) blocks.
The filesystem on /dev/mapper/group_lvm_greenfish-lv_greenfish is now 3932160 blocks long.
~$ sudo mount -t ext4 /dev/mapper/group_lvm_greenfish-lv_greenfish /mnt/001
~$ df -m /mnt/001
Filesystem 1M-blocks Used Available Use% Mounted on
/dev/mapper/group_lvm_greenfish-lv_greenfish
15119 253 14098 2% /mnt/001
~$ md5sum /mnt/001/examples.desktop
e7444acd4d538ede466c6d6cb932c5ec /mnt/001/examples.desktop
~$
즉, 이전에 3% use에서 2% use로 변경되었으며, check sum이 유지된것으로 봐서 파일 내용에 대한 변경은 없는것이 확인된다.
LVM volume 줄이기
기존의 LVM volume으로 부터 불필요한 공간을 회수하고 싶다면, 역시 lvresize 명령을 사용한다.
~$ sudo umount /mnt/001
~$ sudo e2fsck -f /dev/mapper/group_lvm_greenfish-lv_greenfish
e2fsck 1.41.14 (22-Dec-2010)
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/mapper/group_lvm_greenfish-lv_greenfish: 13/983040 files (7.7% non-contiguous), 126465/3932160 blocks
~$ sudo resize2fs /dev/mapper/group_lvm_greenfish-lv_greenfish 5G
resize2fs 1.41.14 (22-Dec-2010)
Resizing the filesystem on /dev/mapper/group_lvm_greenfish-lv_greenfish to 1310720 (4k) blocks.
The filesystem on /dev/mapper/group_lvm_greenfish-lv_greenfish is now 1310720 blocks long.
~$ sudo lvresize --size 5G /dev/mapper/group_lvm_greenfish-lv_greenfish
WARNING: Reducing active logical volume to 5.00 GiB
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce lv_greenfish? [y/n]: y
Reducing logical volume lv_greenfish to 5.00 GiB
Logical volume lv_greenfish successfully resized
~$ sudo mount -t ext4 /dev/mapper/group_lvm_greenfish-lv_greenfish /mnt/001
~$ df -m /mnt/001
Filesystem 1M-blocks Used Available Use% Mounted on
/dev/mapper/group_lvm_greenfish-lv_greenfish
5040 248 4536 6% /mnt/001
~$
LVM Logical Volume과 Group 삭제하기
다음과 같이 삭제한다.
~$ sudo lvremove /dev/mapper/group_lvm_greenfish-lv_greenfish
Do you really want to remove active logical volume lv_greenfish? [y/n]: y
Logical volume "lv_greenfish" successfully removed
~$ sudo vgremove group_lvm_greenfish
Volume group "group_lvm_greenfish" successfully removed
~$
'Research > Ubuntu' 카테고리의 다른 글
[Linux/Ubuntu Backup] network, internet, tcp/ip로 백업하기 (ssh, tar, rsync) (0) | 2013.12.23 |
---|---|
[Linux/Ubuntu Backup][01] tar, gzip, bzip2 사용하기 (0) | 2013.12.19 |
[Linux/Ubuntu 파일 시스템 관리] file system 사용량 측정하기 (df, du) (0) | 2013.12.18 |
[Linux/Ubuntu 파일 시스템 관리] file system 검사하기 (0) | 2013.12.17 |
[Linux/Ubuntu 파일 시스템 관리] file system mount, un-mount(마운트, umount) 하기 (0) | 2013.12.17 |