mapeando um arquivo dividido para / dev / loop0

3

Eu tenho um disco de iscsi 2TB grande. Eu faço backup desse disco toda semana. O script de backup copia a imagem de todo o disco iscsi em um arquivo no meu NFS. Infelizmente, não copia a imagem de uma só peça, mas divide-a em pedaços de 1 TB de tamanho. Então, no meu caso, eu tenho dois arquivos de 1TB (mais um arquivo de configuração):

-r--r----- 1 root root 1099511627776 May 10 02:12 Backup-LUN-itmp-lun-0.000
-r--r----- 1 root root 1099500093440 May 10 03:50 Backup-LUN-itmp-lun-0.001
-rw-r--r-- 1 root root           251 May 10 03:50 Backup-LUN-itmp-lun-0.conf

Agora preciso acessar meu backup. Normalmente, se fosse um arquivo, eu iria mapeá-lo para /dev/loop0 e depois montá-lo como disco normal. Mas no meu caso, não consigo mapear dois arquivos para /dev/loop0 . Uma opção seria catar esses dois arquivos para criar um arquivo grande, mas eu não tenho espaço extra de 2 TB, e além disso, essa não é uma boa solução.

Alguém pode sugerir uma solução?

UPDATE

Eu tentei usar o dmsetup com alvo linear, como sugerido por Andreas Wiese, mas recebo o seguinte erro.

dmsetup create my-backup << EOF
> 0 2147483648 linear Backup-LUN-itmp-lun-0.000 0
> 2147483648 2147461120 linear Backup-LUN-itmp-lun-0.001 0
> EOF
device-mapper: reload ioctl on my-backup failed: Invalid argument
Command failed

dmesg contém o seguinte erro:

device-mapper: table: 254:0: linear: dm-linear: Device lookup failed
device-mapper: ioctl: error adding target to table
    
por Martin Vegter 11.05.2014 / 15:56

1 resposta

6

O que você deseja fazer pode ser feito usando o Mapeador de Dispositivos (a ser configurado via dmsetup(8) ). Se os dados nos dois arquivos são realmente um despejo linear do seu volume, você poderia criar um dispositivo DM composto de vários dispositivos de bloco que você poderia criar a partir dos arquivos de dispositivos de loop, semelhante a isto:

# losetup /dev/loop0 /path/to/Backup-LUN-itmp-lun-0.000
# losetup /dev/loop1 /path/to/Backup-LUN-itmp-lun-0.001
# size1=$(blockdev --getsz /dev/loop0)
# size2=$(blockdev --getsz /dev/loop1)
# dmsetup create my-backup << EOF
0 $size1 linear /dev/loop0 0
$size1 $size2 linear /dev/loop1 0
EOF

Isto lê uma tabela descrevendo seu dispositivo DM a partir de stdin e cria um dispositivo de bloco chamado /dev/mapper/my-backup , que você deve ser capaz de usar como qualquer outro dispositivo de bloco.

O formato da tabela é

<start-sector> <length> <target> <target-args>

<start-sector> e <length> descrevem início e comprimento (em setores de 512 bytes) de uma parte do seu dispositivo DM, <target> seria linear para, bem, montagem linear. Os argumentos para o linear target são o dispositivo a ser usado eo offset dentro do dispositivo (portanto, se, por exemplo, seu software de backup gravar algum tipo de cabeçalho na frente do dump, você poderá ignorar isso), neste exemplo é 0 que seria apropriado para um despejo bruto.

Assim, o exemplo acima monta o dispositivo my-backup para que a primeira parte seja mapeada de Backup-LUN-itmp-lun-0.000 (via loop0 ) e a segunda parte de Backup-LUN-itmp-lun-0.000 (via loop1 ).

Caso seu backup não seja apenas um dump linear (como usar dd e dividir a saída em vários arquivos), você pode tentar ter sorte com os outros alvos DM.

Editar: O DM mapeia apenas os dispositivos de bloco, não os arquivos, portanto, adicionou a parte losetup . Com isso, você também pode usar blockdev --getsz e não precisa se preocupar com tamanhos, como mostra o exemplo.

    
por 11.05.2014 / 16:35