Usando o provisionamento thin do mapeador de dispositivos em dispositivos de loop

1

Eu tenho vários arquivos raw do KVM que são somente leitura (cerca de 100gb).

Estou adicionando esses arquivos raw como dispositivos de loopback.

Eu, então, crio um arquivo de snap para permitir que a VM tenha acesso de leitura / gravação ao disco. Isso me permite inserir modificações, testar, limpar o snap e repetir.

Snippet do meu script 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");'

Isso cria um dispositivo chamado /dev/mapper/vmdrive que, em seguida, anexo à minha máquina virtual. Eu posso usar o parted /dev/mapper/vmdrive para ver as partições disponíveis. Agora, seria ótimo mudar para o provisionamento thin para ver se obtenho um ganho de desempenho.

Aqui está o que eu tentei (usei o "livro de receitas" do link )

Primeiro, crio alguns dispositivos de bloco usando loops:

meta: 2 GB

snap: 24 GB

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'

Em seguida, criei o dispositivo de pool: (suponho loop0 para raw , loop1 para meta e loop2 para snap ) Eu uso um tamanho de bloco de 1 MB e 2 GB como meu limite de espaço livre baixo

$ dmsetup create vmbase-pool \
      --table "0 20971520 thin-pool /dev/loop1 /dev/loop0 2048 2048

Siga as instruções gerando o snap do dispositivo de bloco externo (meu arquivo bruto)

$ dmsetup message /dev/mapper/vmbase-pool 0 "create_thin 0"
$ dmsnap create vmsnap \
      --table "0 20971520 thin /dev/mapper/vmbase-pool 0 /dev/loop0"

Em seguida, conecto o dispositivo /dev/mapper/vmsnap à minha máquina virtual e ele não inicializa. Quando uso parted para imprimir a tabela de partições, recebo erros. Parte disso é que preciso ser capaz de iniciar várias cópias da máquina virtual de uma só vez.

Estou usando o RHEL 6.7 com o kernel 2.6.32-573.7.1

Onde estou indo errado?

    
por pacmanwa 07.01.2016 / 23:03

1 resposta

1

Encontrou o (s) problema (s).

1: O volume de apoio de dados de um thin-pool precisa ser do mesmo tamanho ou maior do dispositivo de bloco base. O comando de criação dd do volume de apoio de dados deve ter o mesmo tamanho de bloco e "$ base_size" como o snap original.

2: O segundo número na definição da tabela do comando dmsetup create thin_pool deve ser o número de blocos do dispositivo de bloco, que é obtido pelo seguinte código:

my $base_stats = stat($base_file);
my $base_blocks = $base_stats->size / 512;

Finalmente, o comando para criar o pool thin é o seguinte:

system("dmsetup create vm-pool\
   --table \"0 $base_blocks thin-pool $meta_lodev $snap_lodev 2048 2048\"");
    
por 11.01.2016 / 23:19