기본적으로 여러 논리 볼륨 (lv)을 새 볼륨 그룹 (vg) 으로 이동 / 복사 하고 싶습니다 . 새로운 볼륨 그룹은 새로운 물리적 볼륨 세트에 상주합니다. 누구나 논리 볼륨 내부의 데이터를 손상시키지 않고 안전하게 수행하는 방법을 알고 있습니까?
기본적으로 여러 논리 볼륨 (lv)을 새 볼륨 그룹 (vg) 으로 이동 / 복사 하고 싶습니다 . 새로운 볼륨 그룹은 새로운 물리적 볼륨 세트에 상주합니다. 누구나 논리 볼륨 내부의 데이터를 손상시키지 않고 안전하게 수행하는 방법을 알고 있습니까?
답변:
먼저 .img 파일로 복사 할 이유가 없습니다. 먼저 lvcreate를 수행 한 다음 직접 복사하십시오.
lvcreate --snapshot --name <the-name-of-the-snapshot> --size <the size> /dev/volume-group/logical-volume
lvcreate --name <logical-volume-name> --size <size> the-new-volume-group-name
dd if=/dev/volume-group/snapshot-name of=/dev/new-volume-group/new-logical-volume
좋아, 나는 내 자신의 방식으로 상황을 처리 할 수 있었다. 내가 취한 단계는 다음과 같습니다.
1) 대상 논리 볼륨의 스냅 샷을 만듭니다.
lvcreate --snapshot --name <the-name-of-the-snapshot> --size <the size> /dev/volume-group/logical-volume
참고 : 스냅 샷의 크기는 원하는만큼 크거나 작을 수 있습니다. 중요한 것은 스냅 샷 기간 동안 변경 사항을 캡처 할 수있는 충분한 공간이 있다는 것입니다.
2) 다음을 사용하여 스냅 샷 컨텐츠의 이미지 사본을 작성하십시오. dd
dd if=/dev/volume-group/snapshot-name of=/tmp/backup.img
3) 대상 (새) 볼륨 그룹에 충분한 크기의 새 논리 볼륨을 작성하십시오.
lvcreate --name <logical-volume-name> --size <size> the-new-volume-group-name
4) 다음을 사용하여 이미지 백업에서 새 논리 볼륨에 데이터 쓰기 dd
dd if=/tmp/backup.img of=/dev/new-volume-group/new-logical-volume
5)를 사용하여 스냅 샷 이미지 백업을 삭제 lvremove
하고 rm
각각을.
그게 다야 .. 누군가에게 도움이되기를 바랍니다 :)
데비안 스트레치 (9.0)의 LVM, 즉 2.02.168-2 vgmerge
에서 lvconvert
, 및 조합을 사용하여 볼륨 그룹에서 논리 볼륨의 사본을 수행 할 수 있습니다 vgsplit
. 이동은 사본과 삭제의 조합이므로 이동에도 적용됩니다.
또는 pvmove
볼륨을 이동하는 데 사용할 수 있습니다 .
루프 장치를 사용한 완전한 자체 포함 된 예제 세션
lvconvert
입니다.
요약 : 논리 볼륨 lv1을 사용하여 볼륨 그룹 vg1을 작성하고 lv2를 사용하여 vg2를 작성하고 vg2에 lv1의 사본을 작성합니다.
파일을 작성하십시오.
truncate pv1 --size 100MB
truncate pv2 --size 100MB
파일에 루프 장치를 설정하십시오.
losetup /dev/loop1 pv1
losetup /dev/loop2 pv2
루프 장치에 물리 볼륨을 만듭니다 (LVM에서 사용하기 위해 루프 장치를 초기화합니다).
pvcreate /dev/loop1 /dev/loop2
/ dev / loop1 및 / dev / loop2에 각각 볼륨 그룹 vg1 및 vg2를 작성하십시오.
vgcreate vg1 /dev/loop1
vgcreate vg2 /dev/loop2
vg1 및 vg2에 각각 논리 볼륨 lv1 및 lv2를 작성하십시오.
lvcreate -L 10M -n lv1 vg1
lvcreate -L 10M -n lv2 vg2
lv1 및 lv2에 ext4 파일 시스템을 작성하십시오.
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.
지금까지 4 가지 대답은 모두 볼륨의 정확한 크기를 알 수없는 것으로보고 있습니다. lvdisplay
소수점 이하 2 자리로 반올림 된 값만 표시 man lvdisplay
하고 사용 가능한 옵션에 대해서는 다른 명령 만 가리 킵니다. 다음은 기본 LVM 블록 크기 4MiB로 충분히 정확한 MiB를 선택합니다.
lvdisplay --units m
MiB도의 기본 단위 --size
입니다 lvcreate
. 의심스러운 경우 lvdisplay
대상 볼륨을 생성 한 후로 정확한 크기를 다시 확인하십시오 . 그런 다음 다른 답변과 마찬가지로 복사하십시오. 또한, 내가하는 것이 좋습니다 것 사본을 확인 으로, 예를 들면 cmp
.
다음은 스냅 샷이 사용되는 이유와이를 보호하고 보호하지 않는 이유입니다.
스냅 샷은 스냅 샷 생성 당시의 모든 데이터가 복사되도록 만들어집니다. 복사 프로세스 중 소스 볼륨에 대한 활동은 복사에 반영되지 않습니다.
스냅 샷은 또한 dd
명령 행 에서 사람 볼륨으로부터 소스 볼륨을 보호합니다 . 실수로 스냅 샷에 쓰면 스냅 샷의 데이터 만 손상되므로 스냅 샷을 제거하고 다시 시작할 수 있습니다.
복사 과정 중에 대상 볼륨이 보호되지 않습니다. 다른 관리자 (또는 os-prober와 같은 자동 프로세스 dracut
)가 불완전한 볼륨을 마운트하면 마운트가 문제를 일으킬 수 있습니다. 읽기 전용 마운트에서도 여전히 저널 항목을 볼륨에 쓸 수 있습니다.
VG A에서 다른 VG B로 논리 볼륨을 복사해야하는 경우을 사용하여 흥미로운 변형을 찾았습니다 partclone
. 그런 다음 dd로 복사하는 스냅 샷이 좋은 방법이지만 파일 시스템이 가득 차지 않으면 속도가 느려질 수 있습니다. 이 솔루션은 사용 된 블록 만 복사하므로 매우 빠릅니다.
lvcreate --snapshot --size 1G /dev/sourcevg/lv --name lv-backup
다음 --size
은 스냅 샷을 비활성화하기 전에 얼마나 많이 쓸 수 있는지입니다.
lvcreate --size <new_lv_size> /dev/destvg --name newlv
new_lv_size
최소한 소스 LV의 크기 여야합니다
partclone.<fs_type> --dev-to-dev --source /dev/sourcevg/lv-backup --output /dev/destvg/newlv
fs_type
할 수있다 ext4
, fat32
, btrfs
, xfs
, ... 어떤 FS는 partclone 지원
lvremove /dev/sourcevg/lv-backup