LVM 볼륨 그룹 병합

LVM 볼륨 그룹 병합

상태:

내 서버에는 아래와 같이 LVM에 4개의 1TB 드라이브가 있습니다. 서버는 12개 이상의 openvz 컨테이너가 있는 openvz 하드웨어 노드입니다. 현재는 컨테이너당 하나의 디스크만 사용됩니다. 이는 당시 대부분의 디스크 IO 로드를 제어하고 분리된 상태로 유지하도록 설계되었습니다.

# pvdisplay -s
  Device "/dev/sdd1" has a capacity of 227.51 GiB
  Device "/dev/sdc1" has a capacity of 427.51 GiB
  Device "/dev/sdb1" has a capacity of 427.51 GiB
  Device "/dev/sda2" has a capacity of 407.02 GiB

ATM 각 PV는 자체 별도의 VG로 설정됩니다.

# vgdisplay -s
  "vg04" 931.51 GiB [704.00 GiB used / 227.51 GiB free]
  "vg03" 931.51 GiB [504.00 GiB used / 427.51 GiB free]
  "vg02" 931.51 GiB [504.00 GiB used / 427.51 GiB free]
  "vg01" 931.02 GiB [524.00 GiB used / 407.02 GiB free]

이러한 VG 위에는 많은 LV가 있습니다.

# lvdisplay | grep Name
  LV Name                /dev/vg04/swap
  VG Name                vg04
  LV Name                /dev/vg04/vz
  VG Name                vg04
  LV Name                /dev/vg03/swap
  VG Name                vg03
  LV Name                /dev/vg03/vz
  VG Name                vg03
  LV Name                /dev/vg02/swap
  VG Name                vg02
  LV Name                /dev/vg02/vz
  VG Name                vg02
  LV Name                /dev/vg01/swap
  VG Name                vg01
  LV Name                /dev/vg01/root
  VG Name                vg01
  LV Name                /dev/vg01/vz
  VG Name                vg01

질문:

이제 하나의 컨테이너가 로드를 처리하기 위해 두 개의 디스크로 분할해야 할 정도로 커졌습니다.

기본적으로 두 개의 LV(/dev/vg03/vz 및 /dev/vg04/vz)를 두 개의 디스크에 분산된 하나의 LV로 병합하고 싶습니다.

어떻게 하면 이를 가장 잘 달성할 수 있습니까? vgmerge가 이 작업을 수행할 수 있나요? vgmerge의 맨페이지는 다소 간단하며 그 사용에 대한 더 자세한 설명을 찾을 수 없습니다.

결국에는 물건을 옮겨서 목표를 달성할 수 있지만, 작동 중인 데이터가 많고 프로덕션 서버이므로 가능하면 이를 피하려고 합니다.

답변1

귀하의 질문을 올바르게 읽었다면 실제로 하고 싶은 일은 두 개의 LV를 별도의 VG에 병합하는 것입니다. 이를 위해서는 한 LV에서 다른 LV로 데이터를 이동해야 하며, LV를 직접 병합할 수 있는 방법은 없습니다.

그래서 당신은 일종의 가동 중지 시간을보고 있습니다.

다음을 수행하여 이를 제한할 수 있습니다. LVA - 곧 더 커질 논리 볼륨 LVB - 곧 삭제될 논리 볼륨

  1. LVB를 LVA의 위치로 rsync(가장 시간이 많이 소요됨)
  2. **다운타임 시작** - 원격 액세스 비활성화
  3. 최종 rsync를 수행하여 LVA의 모든 데이터가 최신 상태인지 확인하세요.
  4. 실시간 방송 제거
  5. 마치 LVB가 설치된 것처럼 LVA의 동기화 데이터를 해당 위치로 이동합니다(이는 LVA에 있어야 하므로 mv는 단지 inode 작업이므로 매우 짧습니다).
  6. **다운타임 종료** - 원격 액세스가 다시 활성화됨
  7. 여가 시간에는 생방송을 중단하고 VGB VGMerge를 VGA로 변경하세요.
  8. 그런 다음 LVA를 확장할 수 있습니다(파일 시스템을 온라인으로 확장할 수도 있음).

답변2

두 개의 VG를 병합할 수는 있지만 먼저 삭제하고 다시 생성하지 않고는 LV를 linearLV로 변환할 수는 없을 것 같습니다.striped

어떤 경우든 루프 장치를 사용하여 디스크 공간을 거의 차지하지 않는 희소 파일을 쉽게 테스트할 수 있습니다.

truncate -s500G a
truncate -s500G b
sudo losetup /dev/loop0 a
sudo losetup /dev/loop1 b
sudo pvcreate /dev/loop0
sudo pvcreate /dev/loop1
sudo vgcreate A /dev/loop0
sudo vgcreate B /dev/loop1
sudo lvcreate ...

답변3

논리 볼륨을 모두 파괴하지 않고 공간을 재구성한 후 새 LV를 생성하지 않고 /dev/vg03/vz이 작업을 수행하는 방법을 모르겠습니다./dev/vg04/vz

다음 전략은 (테스트하지는 않음) 다른 볼륨에 대한 가동 중지 시간 없이 원하는 구성을 얻을 수 있어야 합니다. 삭제하려는 가장 큰 LV 크기까지 스크래치 디스크에 임시 공간을 남겨 두어야 할 수도 있습니다.

  1. 삭제할 두 LV의 모든 데이터를 백업하십시오.
  2. LV( lvchange -an)를 비활성화합니다.
  3. 스크래치 공간( )에 물리 볼륨을 생성합니다 pvcreate.
  4. vg03( ) 에 스크래치 공간을 추가합니다 vgextend. 끝의 범위를 vg03스크래치 공간으로 이동합니다(적절한 파티션 지정자와 올바른 범위 번호로 교체 pvmove /dev/sdXX:MMM-NNN). 새로운 스트라이프 LV에서 사용할 수 있도록 변환할 범위를 이동합니다.sdXXMMMNNN
  5. pvresize마지막에 방금 해제한 볼륨 그룹의 물리 볼륨을 축소하기 위해 호출됩니다 .
  6. 방금 축소된 물리 볼륨이 포함된 파티션을 축소하려면 fdisk또는 를 사용하십시오 . parted이렇게 하면 남은 공간에 대한 새 파티션을 만듭니다.
  7. 다시 호출하면 pvmove스테이징 공간의 모든 데이터가 원래(현재 축소된) PV로 다시 이동됩니다.
  8. 이전 4단계를 반복합니다 vg04. 이후에는 더 이상 스크래치 공간이 필요하지 않습니다.
  9. 이제 아무것도 없는 두 개의 새로운 파티션이 생겼습니다. 이를 물리 볼륨( pvcreate)으로 변환하고 두 PV에 대한 볼륨 그룹( )을 생성합니다 vgcreate.
  10. 새 VG에 스트라이프 LV를 만듭니다.

관련 정보