출처 : https://support.hpe.com/hpsc/doc/public/display?docId=emr_na-c01847647

 

 

기술 작업 지침

리눅스에서 LVM 구성하는 방법

LVM 은 Logical Volume Manager 의 약자로서, 저장장치들을 좀더 효율적이고 유연하게 관리할 수 있는 커널의 부분과 프로그램을 말합니다. 처음에는 IBM에서 개발되었는데, 그 후에 OSF(현재는 OpenGroup http://www.opengroup.org)에서 차용을 하여 OSF/1 operating system 에서 쓰였습니다. 지금은 HP-UX, Digital Unix operating system, AIX 등의 상용 유닉스에서 쓰고 있습니다. 리눅스 버전은 현재 HP-UX의 것을 모델로 하여 Sistina Software사 (http://www.sistina.com)에서 open source로 개발하고 있습니다. LVM 을 이해하려면 먼저 Software RAID (Redundant Array of Inexpensive Drives)를 언급해야 하는데, 이 둘은 비슷하면서도 큰 차이가 있습니다. 비슷한 점은 여러 물리적인 디스크들을 하나의 논리적인 디스크처럼 다룰 수 있게 함으로서 조합방법에 따라 고용량, 고속, 데이터의 무결성을 실현하는 점입니다. 하지만 분명하게 다른 점이 있는데. lvm은 raid보다 관리 및 확장이 비교적 쉬운 반면, raid에는 lvm에는 없는 disk mirroring (RAID level 1), Parity Stripe (RAID level 4,5) 등의 방식이 있어서 속도 또는 데이터의 무결성을 보장 받을 수 있습니다. 그러나 이런 차이점에도 불구하고 lvm가 주목을 받는 이유는 다음과 같습니다.

  • 쉬운 관리
  • 서로 다른 많은 디바이스 조합 지원
  • 직관적인 저장 장치로의 접근
  • 뛰어난 확장성
  • 믿을만한 안전성과 효율
  • 스냅샷 기능 지원
이와 같은 특징들로 인해 사용자들이 얻는 이득은 많습니다.

VG(Volume Group)은 LVM의 가장 기본적인 요소입니다. 쉽게 말하자면 가상 디스크라고 할 수 있는데, 하나 이상의 실제 물리적으로 존재하는 블록 디바이스가 모여서 VG를 이루게 됩니다.

그 물리적인 블록 디바이스를 PV(Physical Volume)라고 하는데, 거의 대부분의 장치를 PV로 쓸 수 있습니다. 하드디스크 및 그 파티션, 소프트웨어/하드웨어 RAID 장치, 심지어 Loopback 블록 디바이스(파일 시스템상의 파일을 블록 디바이스처럼 쓸 수 있게 해준다) 도 포함합니다.

PV와 대비되는 것이 LV(Logical Volume)입니다. 이것은 가상 파티션이라고도 할 수 있는데, VG를 적당히 나누어 할당한 것이 LV입니다. 사용자는 LV를 일반 디스크나 파티션처럼 쓰면 됩니다. 정리하자면, 하나 이상의 PV가 모여 VG를 이루고, VG를 가상적으로 나누어 할당하면 LV이 됩니다.

  1. PV(Physical Volume) 초기화 작업

    # fdisk /dev/hda

    Command (m for help): t

    Partition number (1-6): 2

    Hex code (type L to list codes): 8e

    Changed system type of partition 2 to 8e (Linux LVM)

    Command (m for help): w



    # fdisk /dev/hdb

    Command (m for help): t

    Partition number (1-6): 2

    Hex code (type L to list codes): 8e

    Changed system type of partition 2 to 8e (Linux LVM)

    Command (m for help): w



  2. PV(Phydical Volume) 생성

    # pvcreate /dev/hda2

    pvcreate -- physical volume “/dev/hda2”

    successfully created



    # pvcreate /dev/hdb2

    pvcreate -- physical volume “/dev/hdb2”

    successfully created



  3. VG(Volume Group) 생성

    # vgcreate -s 16m new_vg /dev/hda /dev/hdb

    위의 명령은 두 개의 스크를 합쳐서 new_vg라는 VG를 만든다는 것이다.

    옵션 ‘-s 16m’은 PE(Physical Extent)의 크기를 16MB로 정하는 것인데, 만약 옵션 ‘-s’가 생략되면 기본적으로 PE의 크기는 4MB가 된다. VG가 만들어지면 /dev/VolumeGroupName라는 형식으로 디렉토리가 생기게 된다.

    위의 예에서는 /dev/new_vg 가 될 것이다.



  4. VG(Volume Group)명 변경 또는 삭제방법

    1. 변경방법

      # vgrename new_vg vg00

    2. 삭제방법

      VG에 LV가 남아있지 않고 비활성화되어 있으면 vgremove로 지울 수 있습니다. 비활성화 시키는 방법은, # vgchange -a n vg00 이고, 다음의 명령으로 지워집니다.

      # vgremove vg00



  5. VG(Volume Group) 확장방법

    VG의 확장과 축소는 PV의 추가, 제거로 이루어집니다.

    VG에 PV를 추가하는 명령은 vgextend인데, vg00이라는 VG에 PV인 /dev/hda2를 추가하려면 다음과 같이 실행해야 합니다.

    # vgextend vg00 /dev/hda2



  6. VG(Volume Group) 축소방법

    PV를 VG에서 제거하는 명령은 vgreduce입니다. 그러나 PV에 PE가 할당되어 있으면 제거되지 않습니다. 그 할당된 PE를 다른 PV로 옮겨야 제거될 것입다. 빈 PV인 /dev/hda2를 vg00에서 제거하려면,

    # vgreduce vg00 /dev/hda2



  7. LV(Logical Volume) 생성

    VG에 LV를 만들면 /dev/VolumeGroupName/LogicalVolumeName의 형식으로 블록 디바이스가 만들어집니다. 이것은 일반 블록 디바이스와 다를 바 없는 용도로 쓸 수 있습니다. LV 를 만드는 명령은 lvcreate인데 일반적인 예는 다음과 같습니다.

    # lvcreate -L 4g -n data vg00

    위의 명령은 4GB 크기로 vg00이라는 VG에 data라는 새로운 LV를 만드는 것입니다. 옵션 ‘-L’은 LV의 크기를 지정하는 것인데, 숫자 뒤의 접미사에 따라 숫자의 단위가 달라집니다. k는 KB, m은 MB, g는 GB, t는 TB를 뜻합니다. 만약, 접미사가 안 붙어있으면 숫자의 단위는 MB가 됩니다. ‘-L’ 대신 ‘-l’를 쓸 수도 있는데, ‘-l’ 뒤에는 LE의 갯수를 쓰면 됩니다.



  8. LV(Logical Volume)명 변경 및 삭제방법
    1. 변경방법

      # lvrename /dev/vg00/data /dev/vg00/db

    2. 삭제방법

      # lvremove /dev/vg00/db



  9. LV(Logical Volume) 확장방법

    # lvextend -L +2g /dev/vg00/db

    위의 명령은 /dev/vg00/db의 크기를 2GB 만큼 늘립니다. 기존의 크기가 4GB 였다면, 옵션 ‘-L 6g’를 줬어도 같은 결과를 보일 것입니다. 역시 여기에서도 옵션 ‘-l’를 쓰면 LE 단위로 늘릴 수 있습니다.



    다음은 일반적인 ext2 의 확장 절차입니다.

    • # umount /var/lib/mysql
    • # lvextend -L +10g /dev/databases/mysql
    • # resize2fs /dev/databases/mysql
    • # mount /dev/databases/mysql /var/lib/mysql
    NOTE: 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



  10. LV(Logical Volume) 축소방법
    • ext2 : e2fsadm 을 쓰는 것이 간단합니다.

      # umount /home

      # lvreduce -L -2g /dev/vg00/home 또는

      # lvresize -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



  11. LVM 설정의 Backup 방법

    먼저 설정 백업 파일의 내용을 보려면 다음과 같이 합니다.

    # vgcfgrestore -f /etc/lvm/backup/vg00 -ll vg00



    이 파일을 이용해 설정을 복구하려면 다음과 같이 합니다.

    # vgchange -a n vg00

    # vgcfgrestore -f /etc/lvm/backup/vg00 vg00

    # vgchange -a y vg00



  12. 두개의 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’ 옵션에는 2n (n은 0과 7사이의 숫자), 즉 1, 2, 4, 8, 16, 32, 64, 128 의 숫자를 쓸 수 있습니다



    파일 시스템을 만들고, 마운트를 해서,

    # mkreiserfs /dev/vg00/striped_lv 또는

    # mke2fs –j /dev/vg00/striped_lv

    # mount /dev/vg00/striped_lv /mnt

  13. 새로운 디스크로 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

  14. 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 을 지웁니다.

    # umount /mnt

    # lvremove /dev/vg01/mysqlbackup

LVM관련 디스크가 변경되었을 경우

# vgscan –v –mknodes 를 실행하면

vgscan scans all SCSI, (E)IDE disks, multiple devices and a bunch of other disk devices in the system looking for LVM physical volumes and volume groups. Define a filter in lvm.conf(8) to restrict the scan to avoid a CD ROM, for example.

In LVM2, vgscans take place automatically; but you might still need to run one explicitly after changing hardware.

See lvm for common options

--mknodes

Also checks the LVM special files in /dev that are needed for active logical volumes and creates any missing ones and removes unused ones.

'IBM PowerLinux' 카테고리의 다른 글

Scale-out LC System Event Log Collection Tool  (0) 2018.06.19
RHEL7: How to get started with CPU governor  (0) 2018.03.20
LVM home삭제후 root 증설  (0) 2018.02.14
Linux samba 설정  (0) 2017.08.04
Linux Network SPEED test iperf  (0) 2017.07.09

+ Recent posts