FREEDOM. FRIENDS. FEATURES. FIRST.
페도라 한국 사용자 모임

LVM으로 설치 및 운용(수정 2011-02-26)

게시판 Tech/Tip LVM으로 설치 및 운용(수정 2011-02-26)

  • This topic has 1개 답변, 2명 참여, and was last updated 11 years, 2 months 전에 by ELem. This post has been viewed 29 times
  • 만든이
    게시글
  • #12019
    태랑
    키 마스터
    • 게시글208
    • 댓글879
    • 총합1087
    • ★★
    @admin

    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 개발하고 있다.

     

     

    좀더 받아들이기 쉽게 밑의 그림을 보면서 설명을 드리겠습니다

     

    Physical Volume 이란 하나의 디스크 혹은 파티션입니다

    쉽게 디스크라고 생각하면 위의 그림은 디스크 3개를 1개의  그룹으로 묶습니다 그 그룹을 Volume Group

    이라고 부르구요 raid 0  을 사용해보신분이라면 조금 이해가 빠르실겁니다

     

    그렇게 3개의 디스크를 하나의 볼륨 그룹으로 만들고 2개의 논리적 볼륨으로 나눕니다

    논리적 볼륨은 쉽게 파티션이라고 생각하시면 됩니다

     

    만약 위의 2개의 LV(로지컬 볼륨)에 / 과 /home  파티션을 잡아서 사용하게 되면

    / 와 /home  파티션에 해당되는 곳에 I/O는 3개의 디스크에서 Striping 이 되게 됩니다

    그러니까 /home  에 유저가 파일을 읽거나 쓸때   => 파티션을 access 할때

    3개의 디스크가  I/O를 나눠서 처리한다는 것이죠

     

    물론 파일이 쓰일때도 3개의 디스크에 나뉘어져서(striping) 쓰이게 됩니다

     

    access 가 많은 파일이나 특정 블록에서 Hot block 이나 contention(경합) 이 발생될 확율이 줄어들며

    Disk I/O이 분산되기에 그만큼 각각 디스크 I/O를 좀더 효율적으로 사용가능합니다

     

    또하나의 장점 위에서 설명햇드시 / 와 /home 을 만들어놓고 운용중에 / 용량은 남는 /home 의 용량이

    부족할때 / 용량을 줄이고 /home을 늘릴수 있습니다

     

    또한 하드나 파티션을 VG(볼륨그룹) 에 추가후에 / 와 /home  과 같은 LV 를 늘릴수도 있습니다

     

    기존의 파티션에서 용량부족시 하던 해결법과 다른면을 볼수있는부분이죠

     

    이정도만 알고 설치시 LVM설정으로 설치하는법과 설치후 운용법에 대해서 말씀드리겠습니다

     

    스크린샷 및 디스크 숫자 부족으로 버추얼박스로 진행 하도록하며

    디스크는 초기에 8기가 짜리 3개로 설치후 3기가짜리 하나를 더 달아서 한다는 시나리오로 진행하겠습니다

     

     

    [그림이 깨지면 클릭하셔서 원본크기로 보세요]

     

    설치법은 동일하니 파티션 설정만 설명하겠습니다  사용자 레이아웃 으로 맞춰놓고 작업하겠습니다

     

     

    위의 설명처럼 8기가짜리 3개를 달아놓은 상황입니다

     

     

     

    파티셔닝은 /  6기가  swap 1기가  로 잡고 나머지는 3개의 PV로 잡은후 1개의 VG로 잡고

    다시 3개의 LV 를 만들어서 /home  /data  /var 로 만들겠습니다

     

    일단 sda(첫번재하드) 에 / 파티션에 6기가를 주고 만듭니다

     

     

     

     

    /dev/sdb(2번째디스크) 에다가 swap 을 1기가 생성 합니다

     

     

     

    /dev/sda 와 sdb, sdc  에 위와같이 PV로 잡아주고 최대가능한 용량으로 채움으로 해서

    3개의 PV를 만들어 줍니다

     

     

    PV 3개를 생성후 화면의 우측에 있는 LVM(L) 버튼을 누르면 화면과 같이 나타납니다

    볼륨 그룹은 VG의 이름이며 사용할 물리적 볼륨 에 보면 3개만들어준 PV를 볼수있습니다

     

     

     

    추가(A) 를 누른후 마운트 지점과 용량을 지정하고 OK를 누릅니다

    저는 /home /data /var 로 만들어주었습니다

     

     

    위와같이 3개의 LV가 보이네요

     

     

     

    현재 파티셔닝은 위의 그림과 같이 됩니다

    /dev/sda1 에는 / 파티션이

    /dev/sdb2 에는 swap 파티션이   일반적은 파티셔닝으로 만들어져있으며

     

    나머지 공간에 3개의 디스크에서 PV를 3개를 생성 해서 하나의 VG으로 생성한후

    3개의 LV를 만든것입니다

     

    꼭이렇게 해야하는것은 아니며 예시 입니다 이런식으로 설치시에 LVM으로 설치가 가능합니다

    여러개의 디스크가 있을시 Access 가 많을만한 파티션을 LV에 만들어주는것도 좋을듯하고

    용량이 부족할수도 있는 파티션은 LV로 만들어서 차후에 변경이 용이하게 하는것도 좋을듯합니다

     

     

     

     


    Normal
    0

    0
    2

    false
    false
    false

    EN-US
    KO
    X-NONE

    MicrosoftInternetExplorer4

    /* Style Definitions */
    table.MsoNormalTable
    {mso-style-name:"표준 표";
    mso-tstyle-rowband-size:0;
    mso-tstyle-colband-size:0;
    mso-style-noshow:yes;
    mso-style-priority:99;
    mso-style-qformat:yes;
    mso-style-parent:"";
    mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
    mso-para-margin:0cm;
    mso-para-margin-bottom:.0001pt;
    mso-pagination:widow-orphan;
    font-size:10.0pt;
    mso-bidi-font-size:11.0pt;
    font-family:"맑은 고딕";
    mso-ascii-font-family:"맑은 고딕";
    mso-ascii-theme-font:minor-latin;
    mso-fareast-font-family:"맑은 고딕";
    mso-fareast-theme-font:minor-fareast;
    mso-hansi-font-family:"맑은 고딕";
    mso-hansi-theme-font:minor-latin;
    mso-bidi-font-family:"Times New Roman";
    mso-bidi-theme-font:minor-bidi;
    mso-font-kerning:1.0pt;}

    시스템-> 관리 -> 논리적 볼륨 관리 를 실행해서 본 화면 입니다 설면한것처럼 구성이 되어있습니다

     

     

    그다음은 디스크를 하나 장착후 VG에 추가한후 새로운 LV를 생성 하는것과

    생성된 LV
    줄이고 다른쪽을 늘리는 테스트를 해보겠습니다

     

    터미널에서

     

    [root@fedora12 oracle]#
    vgdisplay -v

    를하면 vg
    관한 정보를 상세히 볼수 있습니다

     

     

    [root@fedora12
    oracle]# lvscan

      ACTIVE            '/dev/vg_fedora12/LogVol01' [9.77
    GB] inherit


    ACTIVE
    '/dev/vg_fedora12/LogVol00' [3.91 GB] inherit


    ACTIVE
    '/dev/vg_fedora12/LogVol02' [3.46 GB] inherit

     

    lvscan 을치면 현재 LV상태를
    알수있습니다

     

     

    [root@fedora12
    oracle]# fdisk -l

    Disk /dev/sdd:
    3221 MB, 3221225472 bytes

    255 heads, 63
    sectors/track, 391 cylinders

    Units =
    cylinders of 16065 * 512 = 8225280 bytes

    Disk
    identifier: 0x00000000

     

    fdisk
    -l  
    를해서보면 중간에 /dev/sdd  라고 4번째 디스크가 보이네요 파티션도 않되어있고요

     

    파티션을 잡아보겠습니다

     

    [root@fedora12
    oracle]# fdisk /dev/sdd

     

    Command (m for
    help):
    n

    Command action

       e
    extended

       p
    primary partition (1-4)

    p 

    Partition
    number (1-4):
    1

    First cylinder
    (1-391, default 1):
    (엔터)

    Using default
    value 1

    Last cylinder,
    +cylinders or +size{K,M,G} (1-391, default 391):
    (엔터)

    Using default
    value 391

     

    Command (m for
    help):
    w   

    The partition
    table has been altered!

     

    Calling ioctl()
    to re-read partition table.

    Syncing disks.

     

     

     

    파티션이 생성 되었고 생성된 파티션 타입을 변경
    하겠습니다

     

    [root@fedora12
    oracle]# fdisk /dev/sdd

     

    Command (m for
    help):
    t  

    Selected
    partition 1

    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/sdd:
    3221 MB, 3221225472 bytes

    255 heads, 63
    sectors/track, 391 cylinders

    Units =
    cylinders of 16065 * 512 = 8225280 bytes

    Disk
    identifier: 0x11d06658

     

       Device Boot      Start         End      Blocks
    Id  System

    /dev/sdd1               1         391
    3140676   8e  Linux LVM

     

    Command (m for
    help): w

    The partition
    table has been altered!

     

    Calling ioctl()
    to re-read partition table.

    Syncing disks.

     

    8e Linux
    LVM
    타입의 ID입니다

     

     

    [root@fedora12
    oracle]# pvcreate /dev/sdd1

      Physical volume "/dev/sdd1"
    successfully created

     

    pvcreate PV
    생성 합니다

     

     

    [root@fedora12
    oracle]# vgextend vg_fedora12 /dev/sdd1

      Volume group "vg_fedora12"
    successfully extended

     

    vgextend 로 기존 vg
    새로훈 pv 를 추가합니다

     

    vgextend 기존vg
    추가할pv  입니다

     

     

     

    LV를 만들어야 하는데요 용량지정에는 2가지가 있습니다 용량으로 지정하는것과

    PE로 지정할수 있는데요

     

    [root@fedora12
    ~]# vgdisplay -v | grep "PE Size"

        Finding all volume
    groups

        Finding volume group
    "vg_fedora12"

      PE
    Size
    4.00 MB

     

    를 해보면 PE
    Size
    4메가씩 활당 되었다는걸 알수있으며

     

    vgdisplay -v 를 해서 보면

    밑에쪽에 새로추가한 /dev/sdd1 의 정보중에


    Total PE / Free PE    766 / 766

     

    PE의 갯수를 알수있습니다

     

     

     

    일단 용량은 지정은 PE사이즈 * 갯수 입니다

     

    766 * 4 = 3064

     

    [root@fedora12
    oracle]# lvcreate -L 3064M vg_fedora12 -n LogVol03

    로 만들수 있습니다

    lvcreate
    -L(
    용량지정용량MB 기존VG -n 생성할LV이름

     

     

    PE지정법은 갯수로 지정하는것입니다 사이즈는 4MB 임으로 위의 용량이 알아서 계산되서 생성됩니다

    [root@fedora12
    oracle]# lvcreate -l 766 vg_fedora12 -n LogVol03

    -l(소문자 엘) PE갯수   입니다

     

     

    [root@fedora12
    oracle]# lvscan


    ACTIVE
    '/dev/vg_fedora12/LogVol01' [9.77 GB] inherit

      ACTIVE            '/dev/vg_fedora12/LogVol00' [3.91
    GB] inherit

      ACTIVE            '/dev/vg_fedora12/LogVol02' [3.46
    GB] inherit

      ACTIVE            '/dev/vg_fedora12/LogVol03' [2.99
    GB] inherit

     

    LogVol03 3기가
    용량이 LV로 추가 된것을 확인할수 있습니다

     

    이제 원하는 파일시스템으로 만든후 마운팅할 디렉토리
    생성한다음 마운트 하겠습니다

     

     

    [root@fedora12
    oracle]# mkfs.ext4 /dev/vg_fedora12/LogVol03

    [root@fedora12
    oracle]# mkdir /data2

    [root@fedora12
    oracle]# mount /dev/vg_fedora12/LogVol03 /data2

     

    다음부팅때도 마운팅되도록 fstab에 기록하겠습니다 현재 시스템에서 마운트 된 정보는 /etc 아래에
    있는 mtab

    에 기록되어 있습니다

     

    cat /etc/mtab |
    grep data2 >> /etc/fstab

    위와같이 리다이렉션 을 이용해서 추가해도 되고

     

    mtab의 마운트 된 정보를 그대로 복사해서 fstab에 추가 해도 됩니다

     

     

    [root@fedora12
    ~]# df -h

    /dev/mapper/vg_fedora12-LogVol03

                          2.0G   69M  1.99G   4% /data2

     

    df -h 로 확인해보면
    /data2
    에 마운트가 되어있는걸 확인할수 있습니다

     

     

    이제는
    /data2
    에 해당하는 LV를 용량을 줄이고 /home
    늘리도록 하겠습니다

    1200MB로 줄이고 800MB정도를 다시 VG에 반납합니다.

     

    [root@fedora12
    oracle]# umount /data2

     

    [root@fedora12
    oracle]# e2fsck -f /dev/vg_fedora12/LogVol03

     

    [root@fedora12
    ~]# resize2fs /dev/vg_fedora12/LogVol03 1200M

     

    [root@fedora12
    ~]# lvreduce -L 1200M /dev/vg_fedora12/LogVol03 

    WARNING:
    Reducing active logical volume to 1.17 GB
    THIS MAY DESTROY YOUR DATA (filesystem etc.)
    Do you really want to reduce LogVol03? [y/n]:
    y

    Reducing logical volume LogVol03 to 1.17 GB
    Logical volume LogVol03 successfully resized

     

    -l 옵션을 사용시에는
    PE
    개수를 써주시면 됩니다.

     

    -L –l 둘다
    반환할 만큼의 용량(PE개수)이 아닌 원하는 줄여진 용량(PE개수)를 써주셔야 합니다.

    2000MB에서 1500으로
    변경하고자 할 때 –L 500M 하게 되면 2000-500 해서 1500 이 아닌

    500MB로 줄어듭니다.

    줄일때는
    resize2fs
    에서 MB 용량으로 줄이게 되니
    lvreduce
    에서도 동일하게 –L MB용량을
    지정하여 줄이는 것이 좋을 듯 합니다.

     

     

    진행 과정은 반드시 umount -> e2fsck -> resize2fs->  lvreduce 순으로 해야합니다.

     

    온라인으로 줄이고 남은 1.81G /home에 붙이겠습니다

     

     

     

    [root@fedora12
    oracle]# umount /home

     

      [root@fedora12
    ~]# lvextend -L +1.81G /dev/vg_fedora12/LogVol00

    + 는 해당용량만큼 이라는 의미이며, +없이 –L 1.81G 를 쓰면
    1.81GB
    로 늘려라 라는 의미입니다.

    여기 까지 진행하면 LV는 늘어났지만 실제 파일시스템은 늘어나지 않았기에 resize2fs
    파일시스템을 늘려주겠습니다.

     

    RHEL기준으로 3버전은
    LVM 버전1 을 사용함으로서 온라인 파일시스템 증가가 불가하고

    4부터는 가능하며,
    RHEL4
    ext2online 명령어를 사용하면 되며,
    RHEL5
    resize2fs 를 사용하면 됩니다.

     

    사용방법은
    resize2fs
    와 동일합니다.

    # ext2online
    /dev/vg_fedora12/LogVol00

     

    [root@fedora12
    ~]# resize2fs /dev/vg_fedora12/LogVol00

     

    lvscan 으로 확인해보면
    /LogVol03
    은 줄어들고 /LogVol00 은 늘어났음을 알수있습니다

     

    [root@fedora12
    ~]#  lvscan
    ACTIVE
    '/dev/vg_fedora12/LogVol01' [9.77 GB] inherit
    ACTIVE
    '/dev/vg_fedora12/LogVol00' [5.72 GB] inherit
    ACTIVE
    '/dev/vg_fedora12/LogVol02' [3.46 GB] inherit
    ACTIVE
    '/dev/vg_fedora12/LogVol03' [1.17 GB] inherit

     

     

    unmount 2개의 LV를 마운트하고 df -h 를 하면

     

    [root@fedora12
    ~]# mount /dev/vg_fedora12/LogVol00 /home/

    [root@fedora12
    ~]# mount /dev/vg_fedora12/LogVol03 /data2/

     

     

    [root@fedora12
    ~]# df -h
    Filesystem
    Size  Used Avail Use% Mounted on
    /dev/sda1
    5.8G  3.0G  2.6G  54% /
    tmpfs
    293M     0  293M   0% /dev/shm
    /dev/mapper/vg_fedora12-LogVol01

    9.7G  150M  9.0G   2% /data
    /dev/mapper/vg_fedora12-LogVol02

    3.5G  338M  2.9G  11% /var
    /dev/mapper/vg_fedora12-LogVol00

    5.7G   74M  5.3G   2% /home
    /dev/mapper/vg_fedora12-LogVol03

    1.2G   34M  1.1G   4% /data2

     

    /home 은 늘어나고
    /data2
    는 줄어든것을 확인할수 있습니다

     

     

    Redhat 에서는 왠만하면 파일시스템을 umount 한 후에 정상적인 상황에서 resize하는 것을 권장하는
    부분이 있으며,

    Redhat 문서를 몇 개를 살펴보더라도 umount resize하는 부분이 많이 보이며 온라인중 증가후에도 umount 한후에

    e2fsck등으로 파일시스템을 체크 하는 부분이 나옵니다

     

    순서는
    umount => lvextend => e2fsck –f  => resize2fs 
    로 하면 되겠습니다.

     

     

     

    이상으로 포스팅을 맞치며

     

    시나리오상 나오지않았던 VG 조정부분은 따로 올려드리겠습니다

     

     

    # 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 가 될 것이다.


    VG(Volume Group)
    명 변경 또는 삭제방법
    1.
    변경방법
    # vgrename new_vg vg00
    2.
    삭제방법
    VG
    LV가 남아있지 않고 비활성화되어 있으면 vgremove로 지울 수 있다.
    비활성화시키는 방법은  vgchange -a n vg_name 이고, 다음의 명령을 통해 지워진다.
    # vgremove vg00

     


    VG(Volume Group)
    확장방법
    VG
    의 확장과 축소는 PV의 추가, 제거로
    이루어진다.
    VG
    PV를 추가하는 명령은
    vgextend
    인데, vg00이라는 VG PV
    /dev/hda2
    를 추가하려면 다음과 같이 실행해야 한다.
    # vgextend vg00 /dev/hda2

     


    VG(Volume Group)
    축소방법
    PV
    VG에서 제거하는 명령은
    vgreduce
    이다. 그러나 PVPE가 사용되어지고 있다면
    있으면 제거되지 않는다. 그 할당된 PE
    다른 PV로 옮겨야 제거될 것이다.

     PE를 옴길때는  pvmove 를 사용한다.

     

    # pvmove –n /dev/vg00/data  /dev/sda2
    /dev/sdc1

       -n
    /
    경로/볼륨그룹명/LV  제거하고자하는PV  옴겨질PV

       위 명령어는
    data
    라는 LV  /dev/sdb1에 해당하는 PE /dev/sdc1로 옴기라는 의미이다.

     


    비어있는 PV(혹은 pvmove로 비워진
    PV)
    /dev/hda2 vg00에서 제거하려면,
    # vgreduce vg00 /dev/hda2

    PV 삭제

    위에서
    /dev/hda2
    VG상에서 제외시켰다 해당 hda2
    를 일반파티션이나 다른용도로 상용하려면 PV를 지워야 할 것이다.

      #
    pvremove /dev/hda2

     

    LV 변경방법
    # lvrename /dev/vg00/data  /dev/vg00/db

    LV 삭제방법
    # lvremove /dev/vg00/db

     

    오픈소스를 응원합니다 Blog https://hoing.io
    Senior Database Administrator(Mysql, Oracle)

    사이트 이용 문의 사항은 댓글이나 admin@fedoralinux.or.kr 로 메일주세요

0 답변 글타래를 보이고 있습니다
  • 글쓴이
    답변
    • #12563
      ELem
      참가자
      • 게시글67
      • 댓글672
      • 총합739
      • ★★
      @Bardisch

      저도 루트랑 스왑을 LVM으로 묶어서 설치했어요 🙂

0 답변 글타래를 보이고 있습니다
  • 답변은 로그인 후 가능합니다.