http://www.solanara.net/solanara/lvm
Linux RAID, LVM - WindyHana's Solanara
- Category: 저장장치
- Description: Linux RAID와 LVM에 대해 설명 (2011-09-04)
- Location: WindyHana's Solanara: Linux RAID, LVM
- @solanara
- Sorry, Korean only.
목차
개요
- Linux RAID와 LVM에 대해 설명한다.
- Linux RAID: 리눅스 커널의 RAID 구현 소프트웨어다. 물리적인 블록 장치(=디스크)를 논리적으로 묶어, 일종의 블록장치(Multiple Devices, /dev/md)를 만든다. 예전엔 Software RAID라 명명했으나 최근 이름이 변경되었다.
- LVM: LVM(Logical Volume Manager, 논리 볼륨 매니저)은 볼륨을 관리하기 쉽도록 해주는 소프트웨어로 리눅스 커널의 일부이다. HP-UX에서 사용되던 볼륨 매니저를 기반으로 1998년 Heinz Mauelshagen에 의해 개발되었다. 하나 이상의 물리 볼륨(PV, Physical Volume, 하드디스크 또는 Software RAID로 생성한 가상 블록장치)을 묶어 볼륨 그룹(VG, Volume Group)을 생성하고, 다시 볼륨 그룹으로 논리 볼륨(LV, Logical Volume, LVM이 아닌 시스템에서는 파티션에 해당, 역시 '가상 블록장치'다)을 생성한 후, 논리 볼륨을 포맷해 사용한다. [PV → VG → LV]를 잘 기억해두기 바란다.
- LVM에는 미러링기능이 없고(LVM은 논리 볼륨을 미러링할 수 있다. 디스크 미러링이 아니다), Linux RAID에는 볼륨을 나누거나 늘이거나 줄이는 기능이 없기 때문에 두 가지를 상호 보완적으로 같이 사용한다. 이를 [LVM on RAID]라 부르며, 이 경우 [MD → PV → VG → LV]가 되는 셈이다.
- 아래의 예제는 아래와 같은 구성을 사용했다.
- OS: Ubunto Server 10.04 LTS 버전 사용. 설치시 LVM 사용하지 않음
- sda: 10GB ATA Disk
- sdb, sdc, sdd: 2GB SCSI 디스크
- LVM HOWTO
Linux Raid
-
mdadm 패키지 설치
root@wll ~ # apt-get install mdadm root@wll ~ # cat /etc/mdadm/mdadm.conf ...
-
Linear RAID 생성
root@wll:~# mdadm --create --verbose /dev/md0 --level=linear --raid-devices=2 /dev/sdb /dev/sdc mdadm: chunk size defaults to 64K mdadm: array /dev/md0 started. root@wll:~# cat /proc/mdstat Personalities : [linear] md0 : active linear sdc[1] sdb[0] 4194176 blocks 64k rounding unused devices: <none>
-
RAID 0 생성
root@wll:~# mdadm --create --verbose /dev/md0 --level=0 --raid-devices=2 /dev/sdb /dev/sdc mdadm: array /dev/md0 started. root@wll:~# cat /proc/mdstat Personalities : [linear] [raid0] [raid1] [raid6] [raid5] [raid4] md0 : active raid0 sdc[1] sdb[0] 4194176 blocks 64k chunks unused devices: <none>
-
RAID 1 생성
root@wll:~# mdadm --create --verbose /dev/md0 --level=1 --raid-devices=2 --spare-disks=1 /dev/sdb /dev/sdc /dev/sdd mdadm: array /dev/md0 started. root@wll:~# cat /proc/mdstat Personalities : [linear] [raid0] [raid1] [raid6] [raid5] [raid4] md0 : active raid1 sdd[2](S) sdc[1] sdb[0] 2097088 blocks [2/2] [UU] unused devices: <none>
-
RAID 5 생성
root@wll:~# mdadm --create --verbose /dev/md0 --level=5 --raid-devices=3 /dev/sdb /dev/sdc /dev/sdd mdadm: array /dev/md0 started. root@wll:~# cat /proc/mdstat Personalities : [linear] [raid0] [raid1] [raid6] [raid5] [raid4] md0 : active raid5 sdd[2] sdc[1] sdb[0] 4194176 blocks level 5, 64k chunk, algorithm 2 [3/3] [UUU] unused devices: <none>
-
상태 보기
root@wll:~# mdadm --detail /dev/md0 /dev/md0: Version : 00.90 Creation Time : Wed Oct 13 16:51:17 2010 Raid Level : raid1 Array Size : 2097088 (2048.28 MiB 2147.42 MB) Used Dev Size : 2097088 (2048.28 MiB 2147.42 MB) Raid Devices : 2 Total Devices : 3 Preferred Minor : 0 Persistence : Superblock is persistent Update Time : Mon Oct 18 09:36:43 2010 State : clean Active Devices : 2 Working Devices : 3 Failed Devices : 0 Spare Devices : 1 UUID : cd25e116:d89492c5:442adbe2:10e49378 Events : 0.56 Number Major Minor RaidDevice State 0 8 16 0 active sync /dev/sdb 1 8 32 1 active sync /dev/sdc 2 8 48 - spare /dev/sdd
-
생성한 레이드 삭제
root@wll:~# mdadm --stop /dev/md0 mdadm: stopped /dev/md0
-
생성한 RAID 디스크 사용
문서 하단에서 설명할 LVM을 사용할 수 있지만, 아래와 같이 직접 포맷해서 사용할 수도 있다.root@wll:~# mkfs -t ext3 /dev/md0 root@wll:~# mkdir /mnt root@wll:~# mount /dev/md0 /mnt root@wll:~# df -h /mnt 파일시스템 크기 사용됨 사용가능 사용율% 마운트 됨 /dev/md0 4.0G 73M 3.7G 2% /mnt root@wll:~#
-
정크(Chunk) 크기
- 위에서 설명한 소프트 레이드들은 모두 기본 정크(데이터의 저장 단위) 크기를 사용했지만, 사용한 디스크와 서비스에 따라 정크 크기를 조절하고, 사용하는 파일 시스템의 블록크기 및 입출력 크기를 맞춰야 제대로된 성능이 나온다. 정크 크기는 mdadm 의 -s 옵션을 통해 설정 가능하다. [mdadm -s 64k ...]
- ext2를 예를 들자면, 32KiB 정크를 사용한 RAID의 경우, mke2fs -b 4096 -R stride=8 /dev/md0 명령을 사용하는 것이 좋다.
-
장애처리
/dev/sdb 디스크가 고장났을때, 장애를 처리하는 방법이다.root@wll:~# cat /proc/mdstat Personalities : [linear] [raid0] [raid1] [raid6] [raid5] [raid4] md0 : active raid5 sdd[2] sdc[1] sdb[0] 4194176 blocks level 5, 64k chunk, algorithm 2 [3/3] [UUU] unused devices: <none> root@wll:~# mdadm /dev/md0 --fail /dev/sdb mdadm: set /dev/sdb faulty in /dev/md0 root@wll:~# cat /proc/mdstat Personalities : [linear] [raid0] [raid1] [raid6] [raid5] [raid4] md0 : active raid5 sdd[2] sdc[1] sdb[3](F) 4194176 blocks level 5, 64k chunk, algorithm 2 [3/2] [_UU] unused devices: <none> root@wll:~# mdadm /dev/md0 --remove /dev/sdb mdadm: hot removed /dev/sdb root@wll:~# cat /proc/mdstat Personalities : [linear] [raid0] [raid1] [raid6] [raid5] [raid4] md0 : active raid5 sdd[2] sdc[1] 4194176 blocks level 5, 64k chunk, algorithm 2 [3/2] [_UU] unused devices: <none> [/dev/sdb 디스크 교체] root@wll:~# mdadm /dev/md0 --add /dev/sdb mdadm: re-added /dev/sdb root@wll:~# cat /proc/mdstat Personalities : [linear] [raid0] [raid1] [raid6] [raid5] [raid4] md0 : active raid5 sdb[0] sdd[2] sdc[1] 4194176 blocks level 5, 64k chunk, algorithm 2 [3/3] [UUU] unused devices: <none>
LVM
LVM2 패키지 설치
LVM2 패키지와 ReiserFS 패키지를 설치한다.root@wll:~# apt-get install lvm2 root@wll:~# apt-get install reiserfsprogs
VG 관리
-
PV 생성
블록 장치 초기화를 의미한다. 블록 장치에 PV에서 사용할 PV UUID를 저장한다. LVM에 관리될 모든 디스크는 초기화 되어있어야 한다.root@wll:~# pvcreate /dev/sdb Wiping software RAID md superblock on /dev/sdb Physical volume "/dev/sdb" successfully created root@wll:~# pvcreate /dev/sdc Wiping software RAID md superblock on /dev/sdc Physical volume "/dev/sdc" successfully created root@wll:~# pvcreate /dev/sdd Wiping software RAID md superblock on /dev/sdd Physical volume "/dev/sdd" successfully created root@wll:~# pvscan PV /dev/sdb lvm2 [2.00 GiB] PV /dev/sdc lvm2 [2.00 GiB] PV /dev/sdd lvm2 [2.00 GiB] Total: 3 [6.00 GiB] / in use: 0 [0 ] / in no VG: 3 [6.00 GiB] root@wll:~# pvdisplay --- Physical volume --- PV Name /dev/sdb VG Name VG_1 PV Size 2.00 GiB / not usable 1.00 GiB Allocatable yes PE Size 1.00 GiB Total PE 1 Free PE 1 Allocated PE 0 PV UUID 3mCSkv-ODb9-i8h7-qLGM-POVp-az6N-CKk9le --- Physical volume --- ... root@wll:~#
만약 오류 발생시 0번 섹터를 초기화하고 다시 시도해 본다.root@wll:~# dd if=/dev/zero of=/dev/sdb bs=512 count=1 root@wll:~# blockdev --rereadpt /dev/hdb
-
VG 생성
PV를 생성했으면 VG를 생성할 차례다.root@wll:~# vgcreate VG_1 /dev/sdb /dev/sdc Volume group "VG_1" successfully created root@wll:~# vgdisplay --- Volume group --- VG Name VG_1 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.99 GiB PE Size 4.00 MiB Total PE 1022 Alloc PE / Size 0 / 0 Free PE / Size 1022 / 3.99 GiB VG UUID FZgrFY-AtKn-JTLf-YMQG-gkoZ-C0qN-WFd7xK
-
VG 활성화
사용하기에 앞서 생성된 VG를 활성화 한다.root@wll:~# vgchange -a y VG_1 0 logical volume(s) in volume group "VG_1" now active
-
VG에 PV추가
root@wll:~# vgextend VG_1 /dev/sdd Volume group "VG_1" successfully extended root@wll:~# vgdisplay --- Volume group --- VG Name VG_1 System ID Format lvm2 Metadata Areas 3 Metadata Sequence No 2 VG Access read/write VG Status resizable MAX LV 0 Cur LV 0 Open LV 0 Max PV 0 Cur PV 3 Act PV 3 VG Size 5.99 GiB PE Size 4.00 MiB Total PE 1533 Alloc PE / Size 0 / 0 Free PE / Size 1533 / 5.99 GiB VG UUID FZgrFY-AtKn-JTLf-YMQG-gkoZ-C0qN-WFd7xK
-
VG에서 PV삭제
root@wll:~# pvmove /dev/sdd root@wll:~# vgreduce VG_1 /dev/sdd Removed "/dev/sdd" from volume group "VG_1"
pvmove의 두번째 인자가 없으면 PV에서 사용하고 있는 익스텐드를 다른 곳으로 옮긴다. -
VG 제거
root@wll:~# vgchange -a n VG_1 0 logical volume(s) in volume group "VG_1" now active root@wll:~# vgremove VG_1 Volume group "VG_1" successfully removed
-
PV 삭제
root@wll:~# pvremove /dev/sdb /dev/sdc /dev/sdd Labels on physical volume "/dev/sdb" successfully wiped Labels on physical volume "/dev/sdc" successfully wiped Labels on physical volume "/dev/sdd" successfully wiped
LV 관리
-
LV 생성
생성한 VG에 LV를 생성한다.root@wll:~# lvcreate -L 1g -n LV_1 VG_1 Logical volume "LV_1" created root@wll:~# lvscan ACTIVE '/dev/VG_1/LV_1' [1.00 GiB] inherit root@wll:~# lvdisplay --- Logical volume --- LV Name /dev/VG_1/LV_1 VG Name VG_1 LV UUID DceWpk-MLbL-tGry-QVaC-CzLX-uT4A-yoekYx LV Write Access read/write LV Status available # open 0 LV Size 1.00 GiB Current LE 256 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 252:0
/dev/VG_1/LV_1 이 블록장치 경로다. -
LV 사용
root@wll:~# mkfs -t reiserfs /dev/VG_1/LV_1 root@wll:~# mount /dev/VG_1/LV_1 /mnt root@wll:~# df -h /mnt 파일시스템 크기 사용됨 사용가능 사용율% 마운트 됨 /dev/mapper/VG_1-LV_1 1.0G 33M 992M 4% /mnt
-
LV 확장
볼륨이 사용중이면, 온라인으로 확장할 수 있는지 파일 시스템 매뉴얼을 읽어보자. 필요하다면 볼륨을 확장 한 후 FS에 맞춰 작업해줘야 할 일이 있다.root@wll:~# lvextend -L +1g /dev/VG_1/LV_1 Extending logical volume LV_1 to 2.00 GiB Logical volume LV_1 successfully resized root@wll:~# lvextend -L 4g /dev/VG_1/LV_1 Extending logical volume LV_1 to 4.00 GiB Logical volume LV_1 successfully resized
ReiserFS의 경우 아래와 같이 작업한다.root@wll:~# resize_reiserfs -f /dev/VG_1/LV_1 resize_reiserfs 3.6.21 (2009 www.namesys.com) resize_reiserfs: on-line resizing finished successfully. root@wll:~# df -h /mnt 파일시스템 크기 사용됨 사용가능 사용율% 마운트 됨 /dev/mapper/VG_1-LV_1 4.0G 33M 4.0G 1% /mnt
ext2/ext3: unmount 후 [resize2fs /dev/VG_1/LV_1]
XFS: [xfs_growfs /mnt]
JFS: [mount -o remount,resize /mnt] -
LV 축소
모든 FS가 축소를 지원하는 것이 아니기 때문에, 사용중인 볼륨을 축소하기 전에 FS의 매뉴얼을 확인해보자. ext3의 경우 축소가 지원되지 않는다.root@wll:~# umount /mnt root@wll:~# resize_reiserfs -s-1G /dev/VG_1/LV_1 ... root@wll:~# lvreduce -L-1G /dev/VG_1/LV_1 WARNING: Reducing active logical volume to 3.00 GiB THIS MAY DESTROY YOUR DATA (filesystem etc.) Do you really want to reduce LV_1? [y/n]: y Reducing logical volume LV_1 to 3.00 GiB Logical volume LV_1 successfully resized root@wll:~# mount /dev/VG_1/LV_1 /mnt root@wll:~# df -h /mnt 파일시스템 크기 사용됨 사용가능 사용율% 마운트 됨 /dev/mapper/VG_1-LV_1 3.0G 33M 3.0G 2% /mnt
-
LV 삭제
마운트를 해제하고, LV를 삭제한다.root@wll:~# umount /mnt root@wll:~# lvremove /dev/VG_1/LV_1
-
LV 스냅샷
스냅샷의 용도는 기본적으로 백업이다. 볼륨에 파일의 쓰기가 빈번히 일어나는 경우, 현재 상태를 백업받고 싶다면 아래와 같이 할 수 있다.root@wll:~# lvcreate -L 512m -s -n LV_1_SNAP`date "+%Y%m%d"` /dev/VG_1/LV_1 Logical volume "LV_1_SNAP20101017" created root@wll:~# mkdir /mntbackup root@wll:~# mount /dev/VG_1/LV_1_SNAP`date "+%Y%m%d"` /mntbackup root@wll:~# tar cvfz mntbackup.tar.gz /mntbackup
스냅샷의 삭제는 LV를 지우는 작업과 동일하다.root@wll:~# umount /mntbackup root@wll:~# lvremove /dev/VG_1/LV_1_SNAP`date "+%Y%m%d"` Do you really want to remove active logical volume LV_1_SNAP20101017? [y/n]: y Logical volume "LV_1_SNAP20101017" successfully removed
팁
-
VG 이전
wll 시스템의 디스크를 wll2 시스템으로 이전하는데 필요한 작업이다. vgexport, vmimport 를 사용한다.root@wll:~# unmount /mnt root@wll:~# vgchange -a n VG_1 root@wll:~# vgexport VG_1 디스크를 전부 wll2 시스템으로 이전 root@wll2:~# pvscan root@wll2:~# vgimport VG_1 root@wll2:~# vgchange -a y VG_1 root@wll2:~# mount /dev/VG_1/LV_1 /mnt
LVM on RAID
- 이 문서의 내용을 응용하는 예다. Linux RAID와 LVM을 동시에 사용한다.
-
생성
Linux RAID를 사용해 [md0]를 생성하고, [md0]를 PV로 사용한다, 다시 볼륨 그룹 [VG_1]을 생성한 후, [VG_1]에 논리 볼륨 [LV_1]을 생성한다.root@wll:~# mdadm --create --verbose /dev/md0 --level=1 --raid-devices=2 --spare-disks=1 \ /dev/sdb /dev/sdc /dev/sdd root@wll:~# mdadm --assemble /dev/md0 /dev/sdb /dev/sdc /dev/sdd root@wll:~# pvcreate /dev/md0 root@wll:~# vgcreate VG_1 /dev/md0 root@wll:~# lvcreate -L 1G -n LV_1 VG_1
-
마운트
생성한 LV_1 볼륨을 마운트 한다.root@wll:~# mkfs -t reiserfs /dev/VG_1/LV_1 root@wll:~# mkdir /u01 root@wll:~# mount /dev/VG_1/LV_1 /u01
-
시스템 재시작
재시작 후에도 자동으로 마운트 하도록 mdadm.conf 와 fstab 을 수정한다.root@wll:~# echo "DEVICES /dev/sdb /dev/sdc /dev/sdd" > /etc/mdadm/mdadm.conf root@wll:~# mdadm --detail --scan >> /etc/mdadm/mdadm.conf root@wll:~# vi /etc/mdadm/mdadm.conf ARRAY 에서 metadata=00.90 을 metadata=0.90 으로 변경 MAILADDR xxx@example.com root@wll:~# vi /etc/fstab ... /dev/VG_1/LV_1 /u01 reiserfs defaults 0 0 root@wll:~# sync; reboot
재시작 후 아래와 같이 마운트 되어있는 것을 확인할 수 있다.root@wll:~# df -h /u01 파일시스템 크기 사용됨 사용가능 사용율% 마운트 됨 /dev/mapper/VG_1-LV_1 1.0G 33M 992M 4% /u01
'UNIX > Redhat' 카테고리의 다른 글
12/08/29 10장 (0) | 2012.08.29 |
---|---|
12/08/28 6장 인증 관리 (0) | 2012.08.28 |
12/08/28 5장 계정 관리 (0) | 2012.08.28 |
12/08/28 4장 논리 볼륨 관리 (0) | 2012.08.28 |
12/08/28 3장 iSCSI 저장소에 액세스 (0) | 2012.08.28 |