Acessando as partições em um volume LVM

6

Suponha que você tenha um volume LVM / dev / vg0 / mylv. Você apresentou isso como um disco virtual para um sistema convidado virtualizado ou emulado. Durante a instalação, o sistema guest o vê como / dev / sda e o particiona em / dev / sda {1,2,5,6} e completa a instalação. Agora, em algum momento, você precisa acessar esses sistemas de arquivos a partir do sistema host, sem executar o sistema convidado. O fdisk vê essas partições bem:

# fdisk -l /dev/vg0/mylv
           Device Boot      Start         End      Blocks   Id  System
/dev/vg0/mylv1            2048      684031      340992   83  Linux
/dev/vg0/mylv2          686078    20969471    10141697    5  Extended
/dev/vg0/mylv5          686080     8290303     3802112   83  Linux
/dev/vg0/mylv6         8292352    11980799     1844224   83  Linux

No entanto, os dispositivos como / dev / vg0 / mylv1 não existem. Eu acho que porque eles estão dentro de um LV, o sistema operacional não reconhece esse tipo de aninhamento por padrão. Existe alguma maneira de eu lançar o Linux de modo que / dev / vg0 / mylv1 ou equivalente apareça e assim se torne montável dentro do sistema host?

Eu entendo que é possível com o qemu-nbd, e usarei isso se necessário. No entanto, eu estava esperando algo mais direto, se possível, em vez de simular um dispositivo de bloco de rede e anexá-lo.

    
por projix 19.10.2012 / 18:23

2 respostas

8

Acredito que a ferramenta que você está procurando é kpartx .

O procedimento geral é:

  1. Listar partições na imagem do disco:

    kpartx -l /dev/vg0/mylv
    
  2. Adicione as partições ao mapeador de dispositivos:

    kpartx -a /dev/vg0/mylv
    
  3. Monte a partição em que está interessado:

    mount -o ro /dev/mapper/loop0p5 /mnt
    
por 19.10.2012 / 18:38
1

Você pode acessar os sistemas de arquivos particionados via loopback usando offsets. Multiplique o setor pelo tamanho do setor.

mkdir /mnt/mylv{1,5,6}
mount -o ro,loop,offset=$((512*2048)) /dev/vg0/mylv /mnt/mylv1
mount -o ro,loop,offset=$((512*686080)) /dev/vg0/mylv /mnt/mylv5
mount -o ro,loop,offset=$((512*8292352)) /dev/vg0/mylv /mnt/mylv6
    
por 19.10.2012 / 18:45