![루프 장치에서 장치 매퍼 씬 프로비저닝 사용](https://linux55.com/image/80873/%EB%A3%A8%ED%94%84%20%EC%9E%A5%EC%B9%98%EC%97%90%EC%84%9C%20%EC%9E%A5%EC%B9%98%20%EB%A7%A4%ED%8D%BC%20%EC%94%AC%20%ED%94%84%EB%A1%9C%EB%B9%84%EC%A0%80%EB%8B%9D%20%EC%82%AC%EC%9A%A9.png)
읽기 전용 KVM 원시 파일(약 100GB)이 여러 개 있습니다.
이러한 원시 파일을 루프백 장치로 추가했습니다.
그런 다음 가상 머신이 해당 디스크에 대한 읽기/쓰기 액세스를 허용하도록 스냅샷 파일을 생성합니다. 이를 통해 수정 사항을 삽입하고, 테스트하고, 스냅샷을 지우고 반복할 수 있습니다.
내 Perl 스크립트 조각:
$base_file = "/images/vmbase.raw";
$base_stats = stat($base_file);
$base_blocks = $base_stats->size / 512;
$base_size = floor($base_stats->size / 10**6);
system("dd if=/dev/zero of=/dev/shm/vmbase.snap count=1 bs=1M seek=$base_size");
$baseloop='losetup -f --show /images/vmbase.raw --read-only';
$snaploop='losetup -f --show /dev/shm/vmbase.snap';
system("dmsetup create vmdrive --table "0 snapshot $baseloop");`
그러면 이라는 장치가 생성되어 /dev/mapper/vmdrive
내 가상 머신에 연결됩니다. parted를 사용하여 /dev/mapper/vmdrive
사용 가능한 파티션을 확인할 수 있습니다. 이제 씬 프로비저닝으로 전환하여 성능이 향상되는지 확인하는 것이 좋습니다.
내가 시도한 것은 다음과 같습니다("레시피" 사용).https://www.kernel.org/doc/Documentation/device-mapper/thin-provisioning.txt)
먼저 루프를 사용하여 몇 가지 블록 장치를 만듭니다.
위안: 2GB
스냅샷: 24GB
dd if=/dev/zero of=/dev/shm/vmbase.meta bs=4096 count=524288
dd if=/dev/zero of=/snaps/vmbase.snap bs=4096 count=5859385
losetup -f /images/vmbase.raw --read-only
losetup -f /dev/shm/vmbase.meta
losetup -f /snaps/vmbase.snap`
그런 다음 풀 장치를 만듭니다. ( loop0
for raw
, loop1
for meta
및 loop2
for 가정 snap
) 1MB 블록 크기와 2GB를 낮은 여유 공간 임계값으로 사용합니다.
$ dmsetup create vmbase-pool \
--table "0 20971520 thin-pool /dev/loop1 /dev/loop0 2048 2048
다음으로 외부 블록 장치의 스냅샷을 생성합니다(내 원본 파일)
$ dmsetup message /dev/mapper/vmbase-pool 0 "create_thin 0"
$ dmsnap create vmsnap \
--table "0 20971520 thin /dev/mapper/vmbase-pool 0 /dev/loop0"
그런 다음 /dev/mapper/vmsnap
장치를 가상 머신에 연결했지만 부팅되지 않았습니다. parted를 사용하여 파티션 테이블을 인쇄할 때 오류가 발생합니다. 그 중 하나는 가상 머신의 여러 복사본을 동시에 시작할 수 있어야 한다는 것입니다.
RHEL 6.7을 사용하고 있으며 커널은 2.6.32-573.7.1입니다.
내가 어디서 잘못됐나요?
답변1
문제가 발견되었습니다.
1: 가상 풀의 데이터 백업 볼륨은 기본 블록 장치의 크기와 같거나 커야 합니다. 데이터 백업 볼륨 dd create 명령은 원래 스냅샷과 동일한 블록 크기 및 "$base_size"를 가져야 합니다.
2: dmsetup create Thin_pool 명령의 테이블 정의에 있는 두 번째 숫자는 다음 코드로 얻은 블록 장치의 블록 번호여야 합니다.
my $base_stats = stat($base_file);
my $base_blocks = $base_stats->size / 512;
가상 풀을 생성하는 최종 명령은 다음과 같습니다.
system("dmsetup create vm-pool\
--table \"0 $base_blocks thin-pool $meta_lodev $snap_lodev 2048 2048\"");