답변:
논리 볼륨이 나머지 소스 볼륨 그룹과 물리적 볼륨의 별도 서브 세트에 있도록 정렬 할 수있는 경우 ( lvconvert sourcevg/sourcelv /dev/pv1 ...
도움이 될 수 있음) vgsplit
lv를 새 vg로 분리 vgmerge
하고 새 vg를 목표 vg.
LVM에는 미러링 기능이 있지만 미러의 양쪽 다리가 같은 vg에 있어야 하며 연결을 끊을 수 없기 때문에 볼륨 그룹간에 사본을 만드는 데이 기능을 사용할 수 없습니다 .
볼륨을 다른 볼륨으로 복사하는 방식으로 LVM 볼륨을 다른 볼륨으로 복사 할 수 있습니다. 적절한 크기의 대상 lv를 만든 다음로 내용을 복사하십시오 dd if=/dev/sourcevg/sourcelv of=/dev/targetvg/targetlv bs=4M
. 소스 볼륨이 활성화 된 경우 LVM을 활용하여 일관된 사본을 만들 수 있습니다. 먼저 소스 lv lvcreate -s
의 스냅 샷을으로 만든 다음 스냅 샷을 복사하십시오.
dd
(당신은 오래된 볼륨을 던져 서둘러하지 않는 경우), 새로운 파일 시스템의 UUID를 변경하는 것을 잊지 마세요 : tune2fs를 -U 무작위는 / dev / targetvg / targetlv
pvmove -n lvol1 /dev/sdb1 /dev/sdc1
pvmove는 물리 볼륨간에 데이터를 이동할 수 있습니다. LVM 관리자 안내서
vgextend
새로운 pv로 vg1을 입력 한 다음 pvmove
lv를 새 pv로, vg2에서 vgsplit
임시 vg로 설정하십시오 vgmerge
. 그런 다음 pvmove
다시 lv ~ vg2 원본 pv, vgreduce
vg2를 통해 중간 pv를 읽습니다. 또는 중간 복사본을 피하려면 먼저 vg1을 vg2, pvmove
lv1 에 병합 하고 vgsplit
다시 vg1을 vg2 에서 병합 할 수 있습니다 . 이 MattBianco 및 @kissgyorgy @의 반대에 응답하고 @Gilles의 솔루션되지만 스냅 샷 및 저수준 교체에 해당한다 dd
a로pvmove
Debian stretch (9.0)의 LVM, 즉 2.02.168-2 vgmerge
에서 lvconvert
, 및 조합을 사용하여 볼륨 그룹에서 논리 볼륨의 사본을 수행 할 수 있습니다 vgsplit
. 이동은 사본과 삭제의 조합이므로 이동에도 적용됩니다.
또는 pvmove
볼륨을 이동하는 데 사용할 수 있습니다 .
루프 장치를 사용한 완전한 자체 포함 된 예제 세션
lvconvert
입니다.
요약 : 우리가 볼륨 그룹을 생성 vg1
논리 볼륨으로 lv1
, 그리고 vg2
와 lv2
, 그리고 복사본을 만들어 lv1
에서 vg2
.
파일을 작성하십시오.
truncate pv1 --size 100MB
truncate pv2 --size 100MB
파일에 루프 장치를 설정하십시오.
losetup /dev/loop1 pv1
losetup /dev/loop2 pv2
루프 장치에 물리 볼륨을 만듭니다 (LVM에서 사용하기 위해 루프 장치를 초기화합니다).
pvcreate /dev/loop1 /dev/loop2
볼륨 그룹 만들기 vg1
와 vg2
에 /dev/loop1
와 /dev/loop2
각각을.
vgcreate vg1 /dev/loop1
vgcreate vg2 /dev/loop2
논리 볼륨 생성 lv1
과 lv2
에서 vg1
하고 vg2
각각을.
lvcreate -L 10M -n lv1 vg1
lvcreate -L 10M -n lv2 vg2
lv1
및에 ext4 파일 시스템을 만듭니다 lv2
.
mkfs.ext4 -j /dev/vg1/lv1
mkfs.ext4 -j /dev/vg2/lv2
선택적으로 lv1
나중에 사본이 올바르게 작성되었는지 확인할 수 있도록 무언가를 작성하십시오. 확인 vg1
비활성.
vgchange -a n vg1
테스트 모드에서 병합 명령을 실행하십시오. 이로 병합 lv1
됩니다 lv2
.
vgmerge -A y -l -t -v <<destination-vg>> <<source-vg>>
vgmerge -A y -l -t -v vg2 vg1
그리고 진짜.
vgmerge -A y -l -v vg2 vg1
이어서로부터 RAID 1 미러 쌍을 생성 lv1
하여 lvconvert
. 는 <> 인수는 말한다 lvconvert
미러 사본을 만들
lv1_copy
에를 /dev/loop2
.
lvconvert --type raid1 --mirrors 1 <<source-lv>> <<dest-pv>>
lvconvert --type raid1 --mirrors 1 /dev/vg2/lv1 /dev/loop2
그런 다음 거울을 분리하십시오. 새로운 LV는 이제 lv1_copy
입니다.
lvconvert --splitmirrors 1 --name <<source-lv-copy>> <<source-lv>>
lvconvert --splitmirrors 1 --name lv1_copy /dev/vg2/lv1
확인 vg2
비활성.
vgchange -a n vg2
그런 다음 (테스트 모드)
vgsplit -t -v <<source-vg>> <<destination-vg>> <<moved-to-pv>>
vgsplit -t -v /dev/vg2 /dev/vg1 /dev/loop1
진짜
vgsplit -v /dev/vg2 /dev/vg1 /dev/loop1
결과 출력 :
lvs
[...]
lv1 vg1 -wi-a----- 12.00m
lv1_copy vg2 -wi-a----- 12.00m
lv2 vg2 -wi-a----- 12.00m
노트:
1) 이러한 명령의 대부분은 루트로 실행해야합니다.
2) 두 볼륨 그룹에서 논리 볼륨 이름이 중복 vgmerge
되면 진행을 거부합니다.
3) 병합시 :
Logical volumes in `vg1` must be inactive
그리고 분할 :
Logical volume `vg2/lv1` must be inactive.