루프 장치에서 장치 매퍼 씬 프로비저닝 사용

루프 장치에서 장치 매퍼 씬 프로비저닝 사용

읽기 전용 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`

그런 다음 풀 장치를 만듭니다. ( loop0for raw, loop1for metaloop2for 가정 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\"");

관련 정보