서버/리눅스

[리눅스] LVM stripe, mirror

장동규 2017. 4. 13. 21:48

2) LVM stripe구성

Stripe구성은 raid의 stripe구성과는 다르다.

Raid의 stripe구성은 전체 디스크를 똑같은 용량으로 나누어서 저장해 [ 빠른 속도 ] 라는 이점이 있었지만

LVM의 stripe구성은 stripesize를 지정 후 디스크마다 분산저장을 해 낮은 용량일 경우 이점이 사라진다.

ex) stripesize : 68kb일 경우 A디스크에 68kb를 저장 그 다음 B디스크에 68kb저장.. 다시 A디스크에 ..모든 파일에 대한용량을 

저장할때까지 반복한다.


#실습

준비된 시스템

-LVM 파티션 /dev/sdc1 /dev/sdd1

-PV : /dev/sdc1 /dev/sdd1

-VG : stripe ( /dev/sdc1 /dev/sdd1 )


리눅스 소스 & 설명

* LV 생성

#>lvcreate -i <dev_num> -L <size> -n <lv_name> <vg_name> ....

       또는 -l

option -i    가 추가되었다. ( 없으면 linear로 생성 )

VG에서 stripe로 구성할 device의 갯수를 작성후 맨 뒤에 장치들에 대한 포함될 아규먼트들을 작성한다.


#>lvcreate -i 2 -L 1.5G -n lv01 stripe /dev/sdc1 /dev/sdd1

>>이때 자동으로 stripesize가 정해졌다.


*결과

: Logical Volume Name : Volume Group이 다른경우 이름이 같아도 상관없다.


파일시스템과 마운트까지 해준다.

#>mkfs -t ext4 /dev/mapper/stripe-lv01

#>mkdir -p /lvm/stripe

#>mount /dev/mapper/stripe-lv01 /lvm/stripe

3) LVM mirror구성

miroor 구성 같은경우 raid와 마찬가지로 lv로 만들어진 그룹갯수가 n일경우 1개의 원본장치와 n-1개의 사본장치로 구성된다. 

즉 lv생성시 3개의 장치를 사용한다고 하면 2개의 사본장치가 생기고

    2개의 장치를 사용한다고 하면 1개의 사본장치가 생긴다.


#실습

준비된 시스템

디스크 2장에 대한 파티션 ( hexC : 8e )

/dev/sdb (1G) >> /dev/sdb1

/dev/sdc (1G) >> /dev/sdc1

/dev/sdd (1G) >> /dev/sdd1 : 나중에 복구시 쓸 디스크


디스크에 대한 PV


VG ( 위 두장의 디스크에 대한 볼륨그룹 ) : miroor ( 2G )


리눅스 소스 & 설명

LV 생성

#>lvcreate -l|-L <size> -m <copy_num> -n <lv_name> <vg_name> <pv_name> ...

옵션 -m 의 아규먼트에 생성될 미러구성의 사본장치 갯수를 적어준다.

>> mirror구성에서는 size는 하나의 장치에대한 size다. : 미러 구성되는 갯수만큼 곱해줘야 한다.

ex) 3개의 미러구성 = 1개의 원본장치 3개의 미러구성 = size * 4 만큼의 용량을 할당받는다.


#>lvcreate -L  -m 1 -n lv01 miroor /dev/sdb1 /dev/sdc1


#결과

>> lvcreate 명령어를 통하여 만들어준 lv01은 500m의 사이즈를 가지고 있지만 사실 복사본에대한 할당까지 받은 것이여서

miroor그룹은 1G가 줄어있다.


>> 여기서 보면 mirror 구성은 Cpy%Sync : 동기화가 100%되고 있다는 것을 보여준다.


파일시스템과 마운트까지 해준다.

#>mkfs -t ext4 /dev/mapper/miroor-lv01

#>mkdir -p /lvm/miroor

#>mount /dev/mapper/miroor-lv01 /lvm/miroor


#강제고장

#>cp /etc/services /lvm/miroor

#>dd if=/dev/zero of=/dev/sdb1 count=10

#>reboot

#>lvscan

#>lvchange --activate a /dev/mapper/miroor-lv01

#>mount /dev/mapper/miroor-lv01 /lvm/miroor/

#파일이 살아있는 것을 확인했다.


0) dd명령어는 디바이스에 강제로 데이터를 작성하는 방법이다.

1) lvscan명령어는 lv를 더 자세하게 보는 명령어이다.

2) lvchange명령어는 비활성화된 장치를 활성화 시킬 수 있다.

3) 비활성화시 mount가 안되므로 활성화 시킨후 mount시켜준다.

4) 강제로 활성화 시킨 lv로 인해 pv와 vg에서는 에러메세지와 고장난 디스크에 대한 용량까지 표시하고 있다.


#복구

*장치제거

#>vgreduce --removemissing --force <vg_name>

#>vgreduce --removemissing --force miroor

>> 장치제거를 완료하면 고장난 장치는 표시하지 않고 에러메세지 또한 사라진다.

다시 정상작동 되는 lv는 mirror구성장치인 사본장치들이 없으므로 linear장치로 동작하게 된다.

이렇게되면 장치를 추가 (확장) 해서 다시 미러 구성으로 동작시켜준다.


*확장

#>vgextend miroor /dev/sdd1

#>lvconvert -m 0 /dev/miroor/lv01

#>lvconvert -m 1 /dev/miroor/lv01 /dev/sdd1

>> 확장을 해도 아직 linear상태로 동작하는 LV를 mirror구성으로 동작시켜주기위해 lvconvert 명령어를 사용한다.

/dev/mapper/ ~ 링크파일을 사용하는게 아니라 /dev/miroor/ ~ 이 형식으로 작성해줘야 한다.

>> path가 아닌 인자값으로 넘겨주는 것이다 /dev/볼륨그룹/로지컬그룹으로 생각하기에 형식에 맞는 링크파일을 넘겨준다.

또한 아직 자신이 mirror구성인줄 아는 LV에 대해 linear라는 것을 재설정한다.


#file 명령어로 확인

file명령어 같은 경우 링크파일을 확인하면 원본이름을 반환한다.

지금 우리가 만든 lv들은 전부 symbolic link file이다.

따라서 #> file 명령어로 확인하는 경우 원본을 출력해준다.