LVM(Linux Volume Manager) 구축하기
2010.05.12 07:39
원문 : http://www.ischo.net -- 조인상 // 시스템 엔지니어
Writer : http://www.ischo.net -- ischo // System Engineer in Replubic Of Korea
+++++++++++++++++++++++++++++++++++++++++++++++++++++++
본문 : http://www.ischo.net -- 조인상 //시스템 엔지니어
+++++++++++++++++++++++++++++++++++++++++++++++++++++++
출처 : http://cafe.naver.com/nsis.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=3764
LVM(Linux Volume Manager) 구축하기
I. 시스템 사양
- PC 의 vmware 상에서 하드를 2개 추가하여 할 예정
- OS : redhat 9 2.4.20-31.9(yum으로 커널 컴파일 한 버전)
- vmware에서 구축
- HDD 3개 : 이중 sad1(2G) 과 sdc1(2G) 에 구축예정
- CPU : Pentium 4 2.8Ghz
- memory : 1G(physical) + 1G(swap)
II . 구축하기
1. 먼저 디스크에 리눅스 LVM 파일 시스템을 만들어준다.
[root@angka root]# fdisk /dev/sdb
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-261, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-261, default 261):
Using default value 261
Command (m for help): t
Selected partition 1
Hex code (type L to list codes): 8e <-- 반드시 LVM으로 포맷해준다.
Changed system type of partition 1 to 8e (Linux LVM)
Command (m for help): p
Disk /dev/sdb: 2147 MB, 2147483648 bytes
255 heads, 63 sectors/track, 261 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sdb1 1 261 2096451 8e Linux LVM
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
/dev/sdc 도 똑같은 방법으로 LVM 으로 만들어준다.
fdisk -l 명령으로 sdb 와 sdc가 LVM으로 만들어 졌는지 확인한다.
[root@angka root]# fdisk -l
Disk /dev/sda: 11.8 GB, 11811160064 bytes
255 heads, 63 sectors/track, 1435 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 * 1 510 4096543+ 83 Linux
/dev/sda2 511 637 1020127+ 82 Linux swap
/dev/sda3 638 1435 6409935 83 Linux
Disk /dev/sdb: 2147 MB, 2147483648 bytes
255 heads, 63 sectors/track, 261 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sdb1 1 261 2096451 8e Linux LVM <-- 파일 시스템 파입이 LVM이어야한다.
Disk /dev/sdc: 2147 MB, 2147483648 bytes
255 heads, 63 sectors/track, 261 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sdc1 1 261 2096451 8e Linux LVM
2. pvcreate 명령으로 물리적인 볼륨을 생성한다.
[root@angka root]# pvcreate /dev/sdb1
pvcreate -- physical volume "/dev/sdb1" successfully created
[root@angka root]# pvcreate /dev/sdc1
pvcreate -- physical volume "/dev/sdc1" successfully created
[root@angka root]#
3. sdb1 과 sdc1을 하나의 물리적 볼륨으로 묶어준다. 볼륨 그룹 이름은 angkaVG 로 한다.
[root@angka root]# vgcreate angkaVG /dev/sdb1 /dev/sdc1
vgcreate -- INFO: using default physical extent size 4 MB
vgcreate -- INFO: maximum logical volume size is 255.99 Gigabyte
vgcreate -- doing automatic backup of volume group "angkaVG"
vgcreate -- volume group "angkaVG" successfully created and activated
[root@angka root]#
4. vgdisplay 명령으로 볼륨그룹이 잘 생성되었는지 확인한다.
[root@angka root]# vgdisplay
--- Volume group ---
VG Name angkaVG
VG Access read/write
VG Status available/resizable
VG # 0
MAX LV 256
Cur LV 0
Open LV 0
MAX LV Size 255.99 GB
Max PV 256
Cur PV 2
Act PV 2
VG Size 3.98 GB <-- 2G 2개를 묶었으므로 4G가 나온다.
PE Size 4 MB
Total PE 1020
Alloc PE / Size 0 / 0
Free PE / Size 1020 / 3.98 GB
VG UUID HJNDS6-X7U4-BVlx-pPiG-uAkD-2Fup-cMqeqP
[root@angka root]#
여기서 주의할 것은 angkaVG는 단지 볼륨 그룹이지 논리적인 슬라이스가 아니다. angkaVG 자체를 마운트 하려고 하면 오류가 떨어진다. 이것은 마치 하드디스크를 추가하면 /dev/sde 와 같이 물리적인 디스크로 시스템에서 인식할 뿐이다. 그러므로 angkaVG를 다시 lvcreate 이용하여(하드 디스크일 경우는 fdisk이지만) 논리적으로 시스템이 인식하도록 만들어 주어야 한다.
5. angkaVG를 lvcreate를 이용 angkaVG1 4G로 만든다.
[root@angka root]# lvcreate -L 3.98G -n angkaVG1 angkaVG
lvcreate -- rounding size up to physical extent boundary
lvcreate -- doing automatic backup of "angkaVG"
lvcreate -- logical volume "/dev/angkaVG/angkaVG1" successfully created
[root@angka root]#
자 이제 우리가 쓸 수 있는 논리적인 디스크의 이름은 /dev/angkaVG/angkaVG1 이다. 이것의 크기는 4G 이며 이것은 sdb1(2G) + sdc1(2G)를 합쳐놓은 크기이다.
6. angkaVG1을 파일 시스템을 만들고 fsck 까지 한다음에 마운트한다.
[root@angka /]# mkfs.ext3 /dev/angkaVG/angkaVG1
mke2fs 1.32 (09-Nov-2002)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
522240 inodes, 1043456 blocks
52172 blocks (5.00%) reserved for the super user
First data block=0
32 block groups
32768 blocks per group, 32768 fragments per group
16320 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736
Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 37 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
[root@angka /]# fsck -y /dev/angkaVG/angkaVG1
fsck 1.32 (09-Nov-2002)
e2fsck 1.32 (09-Nov-2002)
/dev/angkaVG/angkaVG1: clean, 11/522240 files, 24607/1043456 blocks
[root@angka /]# mount /dev/angkaVG/angkaVG1 /test
[root@angka /]# df -k
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 4032092 3364488 462780 88% /
/dev/sda3 6309320 3779156 2209668 64% /oracle
none 79144 0 79144 0% /dev/shm
/dev/angkaVG/angkaVG1
4108224 32828 3866708 1% /test
[root@angka /]#
7. 부팅시에도 올라오도록 /etc/fstab 에 넣어준다.
LABEL=/ / ext3 defaults 1 1
none /dev/pts devpts gid=5,mode=620 0 0
LABEL=/oracle /oracle ext3 defaults 1 2
none /proc proc defaults 0 0
none /dev/shm tmpfs defaults 0 0
/dev/sda2 swap swap defaults 0 0
/dev/cdrom /mnt/cdrom udf,iso9660 noauto,owner,kudzu,ro 0 0
/dev/fd0 /mnt/floppy auto noauto,owner,kudzu 0 0
/dev/angkaVG/angkaVG1 /test ext3 defaults 1 3
*** LV 크기 조정 ***
lvextent 명령어로 논리볼륨의 크기를 쉽게 늘릴 수 있다.
# lvextend -L+1G /dev/test_lvm/logvol1
lvextend -- extending logical volume "/dev/test_lvm/logvol1" to 3GB
lvextend -- doing automatic backup of volume group "test_lvm"
lvextend -- logical volume "/dev/test_lvm/logvol1" successfully extended
비슷하게 아래와 같이 논리볼륨의 크기를 줄일 수 있다.
# lvreduce -L-1G /dev/test_lvm/lv1
lvreduce -- -Warning: reducing active logical volume to 2GB
lvreduce- -- This may destroy your data (filesystem etc.)
lvreduce -- -do you really want to reduce "/dev/test_lvm/lv1"? [y/n]: y
lvreduce- -- doing automatic backup of volume group "test_lvm"
lvreduce- -- logical volume "/dev/test_lvm/lv1" successfully reduced
//////////// 추가분 /////////////////////
LV의 크기가 커졌어도 파일 시스템에는 영향을 주지 않으므로 파일 시스템 고유의 툴을 이용하여 확장 해주어야 한다.
한 가지 주의해야 할 것은 이렇게 크기를 늘릴 때 순서를 뒤바꾸면 절대 안 된다는 것이다. LV 확장 다음에 파일 시스템의 확장이다.
다음은 파일 시스템 별 확장 방법이다.
* ext2 : ext2 파일 시스템의 크기를 바꿀 수 있는 명령으로는 resize2fs이 있는데, e2fsprogs 1.19버전 이상에는 기본적으로 포함되어 있다. 그 이하의 버전을 쓴다면 ext2resize라는 프로그램을 다음의 사이트에서 구할 수 있다.
http;//ext2resize.sourceforge.org
다음은 일반적인 ext2 의 확장 절차이다.
# umount /var/lib/mysql
# lvextend -L +10g /dev/databases/mysql
# resize2fs /dev/databases/mysql
# mount /dev/databases/mysql /var/lib/mysql
LVM tool에 포함되어있는 e2fsadm을 쓰면 LV 확장과 파일 시스템의 확장을 동시에 할 수 있다. 다음의 명령은,
# e2fsadm?L +10g /dev/databases/mysql
다음의 두 명령과 같다.
# lvextend -L +10g /dev/databases/mysql
# resize2fs /dev/databases/mysql
* reiserfs : reiserfs는 resize_reiserfs 라는 명령으로 크기를 바꿀 수 있다.
마운트된 상태에서도 크기를 늘릴 수 있는데, 그 예는 다음과 같다.
# lvextend -L +5g /dev/devel/cvs
# resize_reiserfs -f /dev/devel/cvs
언마운트해서 늘리려면 다음 같이 한다.
# umount /var/cvs
# lvextend -L +5g /dev/devel/cvs
# resize_reiserfs -f /dev/devel/cvs
# mount /dev/devel/cvs /var/cvs
6) LV 축소시키기
lvreduce는 LV의 크기를 줄이는데, 늘릴 때와 마찬가지로 파일 시스템과 별개로 이루어지므로 데이터를 잃어버릴 수 있으니 상당히 조심해야 한다.
작업의 순서는 확장할 때와는 반대로, 파일 시스템의 축소 다음에 LV의 축소이다.
각 파일 시스템 별 축소 방법이다.
* ext2 : e2fsadm 을 쓰는 것이 간단하다.
# umount /home
# e2fsadm -L -2g /dev/vg00/home
# mount /dev/vg00/home /home
* reiserfs : 크기를 늘릴 때와는 달리 마운트 된 상태에서는 줄일 수 없다.
# umount /usr
# resize_reiserfs -s -1g /dev/vg00/usr
# lvreduce -L -1g /dev/vg00/usr
# mount /dev/vg00/usr /usr
7) 설정의 백업과 복구
LVM Tool들은 기본적으로 몇몇을 제외하고 동작 전의 설정상태를 자동으로 백업해둔다.(절대 데이터의 백업이 아니다!) 그 백업파일들은 /etc/lvmconf 라는 디렉토리에 VolumeGroupName.conf{,.[0-9].old}라는 이름으로 만들어진다. 뒤에 번호가 붙어있지 않은 것은 현재의 설정 내용이고, 그 번호가 클수록 오래된 내용이다. 그러므로 바로 전의 설정 내용을 담고 있는 파일에는 이름 뒤에는 .1.old가 붙어있다.
먼저 설정 백업 파일의 내용을 보려면 다음과 같이 한다.
# vgcfgrestore -f /etc/lvmconf/vg00.conf.1.old -ll -n vg00
이 파일을 이용해 설정을 복구하려면 다음과 같이 한다.
# vgchange -a n vg00
# vgcfgrestore -f /etc/lvmconf/vg00.conf.1.old -n vg00
# vgchange -a y vg00
5. 활용
몇 가지 유용한 활용 예를 보이겠다.
1) 두개의 ide disk를 하나의 striped mapping LV로 묶기
80GB 짜리(실제는 약 76.1GB) IDE 하드디스크 두 개를 striped mapping LV 로 묶는 과정이다.
먼저 블록 디바이스 이름이 /dev/hde, /dev/hdf 인 디스크들을 PV로 만든다.
# pvcreate /dev/hde /dev/hdf
그렇게 만든 PV들을 합쳐서 VG를 만든다.
# vgcreate vg00 /dev/hde /dev/hdf
이제 VG에 LV를 만든다.
# lvcreate -i 2 -I 4 -L 152g -n striped_lv vg00
위의 명령으로 152GB 짜리 striped mapping LV가 만들어진 것이다. 옵션을 설명하면 ‘-i 2’는 두개의 PV를 striped 하는데 쓰고, ‘-I 4’는 PE를 4KB로 쪼개서 PV들에게 저장한다는 것이다. ‘-I’ 옵션에는 2^n (0 <= n <= 7), 즉 1, 2, 4, 8, 16, 32, 64, 128 의 숫자를 쓸 수 있다.
파일 시스템을 만들고, 마운트를 해서,
# mkreiserfs /dev/vg00/striped_lv
# mount /dev/vg00/striped_lv /mnt
bonnie++ 등의 벤치마킹 프로그랭으로 시험해본 결과, linear mapping LV보다 약 1.5배에서 1.8배까지 속도의 차이가 있었다. 물론 억세스가 많아지면 어떻게 되는지는 필자도 시험을 못했다.
2) 세로운 디스크로 PV 교체하기
하드디스크를 확장하면서 기존에 있는 하드디스크를 제거해야 할 때는 다음과 같은 과정을 거치면 된다.
환경은 /dev/hdd, /dev/sda, /dev/sdb가 vg01에 속해있는데, 그중에서 /dev/hdd를 빼고 /dev/sdc를 더하는 과정이다.
먼저 /dev/sdc 를 PV 로 만들고,
# pvcreate /dev/sdc
/dev/sdc를 vg01에 추가한 후에,
# vgextend vg01 /dev/sdc
/dev/hdd의 PE 들을 /dev/sdc로 옮긴다.
# pvmove /dev/hdd /dev/sdc
성공적으로 옮겨졌으면 vg01에서 /dev/hdd를 제거한다.
# vgreduce vg01 /dev/hdd
3) snapshot LV를 만들어서 안전한 백업하기
데이터의 변동이 많은 /var등의 디렉토리는 백업 도중에 데이터가 엉키는 수가 있다. 그것을 방지하기 위해서, snapshot LV를 만들어 데이터를 고정시킨 후 백업을 하면 된다.
일단 snapshot LV 를 만든다.(한 줄로)
# lvcreate -s -L 5g -n mysqlbackup /dev/vg01/mysql
위의 명령은 /dev/vg01/mysql에 대한 snapshot LV인 /dev/vg01/mysqlbackup를 만든다. 옵션 ‘-s’는 만들어질 LV가 snapshot 형식임을 정해주고 있다. 옵션 ‘-L’ 는 LV 의 최대 크기를 정해준다. 대게 원본 LV와 크기를 같게 하는 것이 좋다. 사실 snapshot LV는 원본이 갱신되는 부분만 고정시키려고 데이터를 가져와 LE에 할당하기 때문에 많은 LE가 필요하지 않다.
이제 만든 LV 를 마운트 시킨 후
# mount /dev/vg01/mysqlbackup /mnt
백업을 하면 된다.
# tar cf /dev/rmt0 /mnt
백업을 마쳤으면 언마운트시킨 후에 snapshot LV 을 지운다.
# mount /mnt# lvremove /dev/vg01/mysqlbackup
<출처 : kldp.org>
+++++++++++++++++++++++++++++++++++++++++++++++++++++++
출처 : http://cafe.naver.com/nsis.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=3764
LVM(Linux Volume Manager) 구축하기
I. 시스템 사양
- PC 의 vmware 상에서 하드를 2개 추가하여 할 예정
- OS : redhat 9 2.4.20-31.9(yum으로 커널 컴파일 한 버전)
- vmware에서 구축
- HDD 3개 : 이중 sad1(2G) 과 sdc1(2G) 에 구축예정
- CPU : Pentium 4 2.8Ghz
- memory : 1G(physical) + 1G(swap)
II . 구축하기
1. 먼저 디스크에 리눅스 LVM 파일 시스템을 만들어준다.
[root@angka root]# fdisk /dev/sdb
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-261, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-261, default 261):
Using default value 261
Command (m for help): t
Selected partition 1
Hex code (type L to list codes): 8e <-- 반드시 LVM으로 포맷해준다.
Changed system type of partition 1 to 8e (Linux LVM)
Command (m for help): p
Disk /dev/sdb: 2147 MB, 2147483648 bytes
255 heads, 63 sectors/track, 261 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sdb1 1 261 2096451 8e Linux LVM
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
/dev/sdc 도 똑같은 방법으로 LVM 으로 만들어준다.
fdisk -l 명령으로 sdb 와 sdc가 LVM으로 만들어 졌는지 확인한다.
[root@angka root]# fdisk -l
Disk /dev/sda: 11.8 GB, 11811160064 bytes
255 heads, 63 sectors/track, 1435 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 * 1 510 4096543+ 83 Linux
/dev/sda2 511 637 1020127+ 82 Linux swap
/dev/sda3 638 1435 6409935 83 Linux
Disk /dev/sdb: 2147 MB, 2147483648 bytes
255 heads, 63 sectors/track, 261 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sdb1 1 261 2096451 8e Linux LVM <-- 파일 시스템 파입이 LVM이어야한다.
Disk /dev/sdc: 2147 MB, 2147483648 bytes
255 heads, 63 sectors/track, 261 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sdc1 1 261 2096451 8e Linux LVM
2. pvcreate 명령으로 물리적인 볼륨을 생성한다.
[root@angka root]# pvcreate /dev/sdb1
pvcreate -- physical volume "/dev/sdb1" successfully created
[root@angka root]# pvcreate /dev/sdc1
pvcreate -- physical volume "/dev/sdc1" successfully created
[root@angka root]#
3. sdb1 과 sdc1을 하나의 물리적 볼륨으로 묶어준다. 볼륨 그룹 이름은 angkaVG 로 한다.
[root@angka root]# vgcreate angkaVG /dev/sdb1 /dev/sdc1
vgcreate -- INFO: using default physical extent size 4 MB
vgcreate -- INFO: maximum logical volume size is 255.99 Gigabyte
vgcreate -- doing automatic backup of volume group "angkaVG"
vgcreate -- volume group "angkaVG" successfully created and activated
[root@angka root]#
4. vgdisplay 명령으로 볼륨그룹이 잘 생성되었는지 확인한다.
[root@angka root]# vgdisplay
--- Volume group ---
VG Name angkaVG
VG Access read/write
VG Status available/resizable
VG # 0
MAX LV 256
Cur LV 0
Open LV 0
MAX LV Size 255.99 GB
Max PV 256
Cur PV 2
Act PV 2
VG Size 3.98 GB <-- 2G 2개를 묶었으므로 4G가 나온다.
PE Size 4 MB
Total PE 1020
Alloc PE / Size 0 / 0
Free PE / Size 1020 / 3.98 GB
VG UUID HJNDS6-X7U4-BVlx-pPiG-uAkD-2Fup-cMqeqP
[root@angka root]#
여기서 주의할 것은 angkaVG는 단지 볼륨 그룹이지 논리적인 슬라이스가 아니다. angkaVG 자체를 마운트 하려고 하면 오류가 떨어진다. 이것은 마치 하드디스크를 추가하면 /dev/sde 와 같이 물리적인 디스크로 시스템에서 인식할 뿐이다. 그러므로 angkaVG를 다시 lvcreate 이용하여(하드 디스크일 경우는 fdisk이지만) 논리적으로 시스템이 인식하도록 만들어 주어야 한다.
5. angkaVG를 lvcreate를 이용 angkaVG1 4G로 만든다.
[root@angka root]# lvcreate -L 3.98G -n angkaVG1 angkaVG
lvcreate -- rounding size up to physical extent boundary
lvcreate -- doing automatic backup of "angkaVG"
lvcreate -- logical volume "/dev/angkaVG/angkaVG1" successfully created
[root@angka root]#
자 이제 우리가 쓸 수 있는 논리적인 디스크의 이름은 /dev/angkaVG/angkaVG1 이다. 이것의 크기는 4G 이며 이것은 sdb1(2G) + sdc1(2G)를 합쳐놓은 크기이다.
6. angkaVG1을 파일 시스템을 만들고 fsck 까지 한다음에 마운트한다.
[root@angka /]# mkfs.ext3 /dev/angkaVG/angkaVG1
mke2fs 1.32 (09-Nov-2002)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
522240 inodes, 1043456 blocks
52172 blocks (5.00%) reserved for the super user
First data block=0
32 block groups
32768 blocks per group, 32768 fragments per group
16320 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736
Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 37 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
[root@angka /]# fsck -y /dev/angkaVG/angkaVG1
fsck 1.32 (09-Nov-2002)
e2fsck 1.32 (09-Nov-2002)
/dev/angkaVG/angkaVG1: clean, 11/522240 files, 24607/1043456 blocks
[root@angka /]# mount /dev/angkaVG/angkaVG1 /test
[root@angka /]# df -k
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 4032092 3364488 462780 88% /
/dev/sda3 6309320 3779156 2209668 64% /oracle
none 79144 0 79144 0% /dev/shm
/dev/angkaVG/angkaVG1
4108224 32828 3866708 1% /test
[root@angka /]#
7. 부팅시에도 올라오도록 /etc/fstab 에 넣어준다.
LABEL=/ / ext3 defaults 1 1
none /dev/pts devpts gid=5,mode=620 0 0
LABEL=/oracle /oracle ext3 defaults 1 2
none /proc proc defaults 0 0
none /dev/shm tmpfs defaults 0 0
/dev/sda2 swap swap defaults 0 0
/dev/cdrom /mnt/cdrom udf,iso9660 noauto,owner,kudzu,ro 0 0
/dev/fd0 /mnt/floppy auto noauto,owner,kudzu 0 0
/dev/angkaVG/angkaVG1 /test ext3 defaults 1 3
*** LV 크기 조정 ***
lvextent 명령어로 논리볼륨의 크기를 쉽게 늘릴 수 있다.
# lvextend -L+1G /dev/test_lvm/logvol1
lvextend -- extending logical volume "/dev/test_lvm/logvol1" to 3GB
lvextend -- doing automatic backup of volume group "test_lvm"
lvextend -- logical volume "/dev/test_lvm/logvol1" successfully extended
비슷하게 아래와 같이 논리볼륨의 크기를 줄일 수 있다.
# lvreduce -L-1G /dev/test_lvm/lv1
lvreduce -- -Warning: reducing active logical volume to 2GB
lvreduce- -- This may destroy your data (filesystem etc.)
lvreduce -- -do you really want to reduce "/dev/test_lvm/lv1"? [y/n]: y
lvreduce- -- doing automatic backup of volume group "test_lvm"
lvreduce- -- logical volume "/dev/test_lvm/lv1" successfully reduced
//////////// 추가분 /////////////////////
LV의 크기가 커졌어도 파일 시스템에는 영향을 주지 않으므로 파일 시스템 고유의 툴을 이용하여 확장 해주어야 한다.
한 가지 주의해야 할 것은 이렇게 크기를 늘릴 때 순서를 뒤바꾸면 절대 안 된다는 것이다. LV 확장 다음에 파일 시스템의 확장이다.
다음은 파일 시스템 별 확장 방법이다.
* ext2 : ext2 파일 시스템의 크기를 바꿀 수 있는 명령으로는 resize2fs이 있는데, e2fsprogs 1.19버전 이상에는 기본적으로 포함되어 있다. 그 이하의 버전을 쓴다면 ext2resize라는 프로그램을 다음의 사이트에서 구할 수 있다.
http;//ext2resize.sourceforge.org
다음은 일반적인 ext2 의 확장 절차이다.
# umount /var/lib/mysql
# lvextend -L +10g /dev/databases/mysql
# resize2fs /dev/databases/mysql
# mount /dev/databases/mysql /var/lib/mysql
LVM tool에 포함되어있는 e2fsadm을 쓰면 LV 확장과 파일 시스템의 확장을 동시에 할 수 있다. 다음의 명령은,
# e2fsadm?L +10g /dev/databases/mysql
다음의 두 명령과 같다.
# lvextend -L +10g /dev/databases/mysql
# resize2fs /dev/databases/mysql
* reiserfs : reiserfs는 resize_reiserfs 라는 명령으로 크기를 바꿀 수 있다.
마운트된 상태에서도 크기를 늘릴 수 있는데, 그 예는 다음과 같다.
# lvextend -L +5g /dev/devel/cvs
# resize_reiserfs -f /dev/devel/cvs
언마운트해서 늘리려면 다음 같이 한다.
# umount /var/cvs
# lvextend -L +5g /dev/devel/cvs
# resize_reiserfs -f /dev/devel/cvs
# mount /dev/devel/cvs /var/cvs
6) LV 축소시키기
lvreduce는 LV의 크기를 줄이는데, 늘릴 때와 마찬가지로 파일 시스템과 별개로 이루어지므로 데이터를 잃어버릴 수 있으니 상당히 조심해야 한다.
작업의 순서는 확장할 때와는 반대로, 파일 시스템의 축소 다음에 LV의 축소이다.
각 파일 시스템 별 축소 방법이다.
* ext2 : e2fsadm 을 쓰는 것이 간단하다.
# umount /home
# e2fsadm -L -2g /dev/vg00/home
# mount /dev/vg00/home /home
* reiserfs : 크기를 늘릴 때와는 달리 마운트 된 상태에서는 줄일 수 없다.
# umount /usr
# resize_reiserfs -s -1g /dev/vg00/usr
# lvreduce -L -1g /dev/vg00/usr
# mount /dev/vg00/usr /usr
7) 설정의 백업과 복구
LVM Tool들은 기본적으로 몇몇을 제외하고 동작 전의 설정상태를 자동으로 백업해둔다.(절대 데이터의 백업이 아니다!) 그 백업파일들은 /etc/lvmconf 라는 디렉토리에 VolumeGroupName.conf{,.[0-9].old}라는 이름으로 만들어진다. 뒤에 번호가 붙어있지 않은 것은 현재의 설정 내용이고, 그 번호가 클수록 오래된 내용이다. 그러므로 바로 전의 설정 내용을 담고 있는 파일에는 이름 뒤에는 .1.old가 붙어있다.
먼저 설정 백업 파일의 내용을 보려면 다음과 같이 한다.
# vgcfgrestore -f /etc/lvmconf/vg00.conf.1.old -ll -n vg00
이 파일을 이용해 설정을 복구하려면 다음과 같이 한다.
# vgchange -a n vg00
# vgcfgrestore -f /etc/lvmconf/vg00.conf.1.old -n vg00
# vgchange -a y vg00
5. 활용
몇 가지 유용한 활용 예를 보이겠다.
1) 두개의 ide disk를 하나의 striped mapping LV로 묶기
80GB 짜리(실제는 약 76.1GB) IDE 하드디스크 두 개를 striped mapping LV 로 묶는 과정이다.
먼저 블록 디바이스 이름이 /dev/hde, /dev/hdf 인 디스크들을 PV로 만든다.
# pvcreate /dev/hde /dev/hdf
그렇게 만든 PV들을 합쳐서 VG를 만든다.
# vgcreate vg00 /dev/hde /dev/hdf
이제 VG에 LV를 만든다.
# lvcreate -i 2 -I 4 -L 152g -n striped_lv vg00
위의 명령으로 152GB 짜리 striped mapping LV가 만들어진 것이다. 옵션을 설명하면 ‘-i 2’는 두개의 PV를 striped 하는데 쓰고, ‘-I 4’는 PE를 4KB로 쪼개서 PV들에게 저장한다는 것이다. ‘-I’ 옵션에는 2^n (0 <= n <= 7), 즉 1, 2, 4, 8, 16, 32, 64, 128 의 숫자를 쓸 수 있다.
파일 시스템을 만들고, 마운트를 해서,
# mkreiserfs /dev/vg00/striped_lv
# mount /dev/vg00/striped_lv /mnt
bonnie++ 등의 벤치마킹 프로그랭으로 시험해본 결과, linear mapping LV보다 약 1.5배에서 1.8배까지 속도의 차이가 있었다. 물론 억세스가 많아지면 어떻게 되는지는 필자도 시험을 못했다.
2) 세로운 디스크로 PV 교체하기
하드디스크를 확장하면서 기존에 있는 하드디스크를 제거해야 할 때는 다음과 같은 과정을 거치면 된다.
환경은 /dev/hdd, /dev/sda, /dev/sdb가 vg01에 속해있는데, 그중에서 /dev/hdd를 빼고 /dev/sdc를 더하는 과정이다.
먼저 /dev/sdc 를 PV 로 만들고,
# pvcreate /dev/sdc
/dev/sdc를 vg01에 추가한 후에,
# vgextend vg01 /dev/sdc
/dev/hdd의 PE 들을 /dev/sdc로 옮긴다.
# pvmove /dev/hdd /dev/sdc
성공적으로 옮겨졌으면 vg01에서 /dev/hdd를 제거한다.
# vgreduce vg01 /dev/hdd
3) snapshot LV를 만들어서 안전한 백업하기
데이터의 변동이 많은 /var등의 디렉토리는 백업 도중에 데이터가 엉키는 수가 있다. 그것을 방지하기 위해서, snapshot LV를 만들어 데이터를 고정시킨 후 백업을 하면 된다.
일단 snapshot LV 를 만든다.(한 줄로)
# lvcreate -s -L 5g -n mysqlbackup /dev/vg01/mysql
위의 명령은 /dev/vg01/mysql에 대한 snapshot LV인 /dev/vg01/mysqlbackup를 만든다. 옵션 ‘-s’는 만들어질 LV가 snapshot 형식임을 정해주고 있다. 옵션 ‘-L’ 는 LV 의 최대 크기를 정해준다. 대게 원본 LV와 크기를 같게 하는 것이 좋다. 사실 snapshot LV는 원본이 갱신되는 부분만 고정시키려고 데이터를 가져와 LE에 할당하기 때문에 많은 LE가 필요하지 않다.
이제 만든 LV 를 마운트 시킨 후
# mount /dev/vg01/mysqlbackup /mnt
백업을 하면 된다.
# tar cf /dev/rmt0 /mnt
백업을 마쳤으면 언마운트시킨 후에 snapshot LV 을 지운다.
# mount /mnt# lvremove /dev/vg01/mysqlbackup
<출처 : kldp.org>
댓글 0
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
공지 | [공지] 게시자료 열람자유. 불펌금지입니다. | 조인상 | 2010.12.07 | 31437 |
24 | centOS 에서 dovecot POP3 사용하기 | 조인상 | 2010.05.12 | 15297 |
23 | sendmail 기반의 Squirrelmail (다람쥐메일)설치기법 | 조인상 | 2010.05.12 | 13231 |
22 | centOS 4.2 설치시 한글깨짐 문제 | 조인상 | 2010.05.12 | 18538 |
21 | 백스페이스 눌러서 지우려고 할때 ^H 표시될때 조치법 | 조인상 | 2010.05.12 | 24606 |
20 | 삼바 세팅 및 사용법 [1] | 조인상 | 2010.05.12 | 25227 |
» | LVM(Linux Volume Manager) 구축하기 | 조인상 | 2010.05.12 | 15392 |
18 | 리눅스에서 플로피 사용하기 | 조인상 | 2010.05.12 | 9021 |
17 | 리눅스에서 HBA카드의 WWN확인 방법 | 조인상 | 2010.05.12 | 54587 |
16 | HBA카드의 WWNN과 WWPN에 대한 포럼 내용 | 조인상 | 2010.05.12 | 17689 |
15 | 리눅스에 Qlogic2300 HBA카드로 어레이 붙이기 | 조인상 | 2010.05.12 | 20293 |
14 | 리눅스 가상 IP 설정 | 조인상 | 2010.05.12 | 30850 |
13 | 2G이상 파일 tar 로 생성 / 분할생성(복사) | 조인상 | 2010.05.12 | 13076 |
12 | NFS 관련 명령어 및 파일들 | 조인상 | 2010.05.12 | 14531 |
11 | 내가 즐겨사용하는 프롬프트 변수(PS1) 설정치 | 조인상 | 2010.05.12 | 10417 |
10 | 터미널에서 한글을!! Unicon 소개/설치 | 조인상 | 2010.05.12 | 12437 |
9 | mysql 4 버전 설치하기 | 조인상 | 2010.05.12 | 11791 |
8 | APM 설치하기 | 조인상 | 2010.05.12 | 8140 |
7 | 새로운 디스크를 ext3로 파일시스템 생성하기 | 조인상 | 2010.05.12 | 8830 |
6 | NAT환경에서 넷미팅 사용하기 | 조인상 | 2010.05.12 | 9588 |
5 | 리눅스 환경에서 Xmanager 사용법 | 조인상 | 2010.05.12 | 19286 |