ATUALIZAR

ATUALIZAR

Eu tenho um iscsidisco de 2 TB 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, ele não copia a imagem inteira, mas a divide em pedaços de 1 TB de tamanho. Então, no meu caso, tenho dois arquivos de 1 TB (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 o mapearia /dev/loop0e depois o montaria como um disco normal. Mas no meu caso, não consigo mapear dois arquivos para /dev/loop0. Uma opção seria cat esses dois arquivos para criar um arquivo grande, mas 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?

ATUALIZAR

Tentei usar dmsetup com destino linear, conforme 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

Responder1

O que você deseja fazer pode ser realizado usando o Device Mapper (a ser configurado via dmsetup(8)). Se os dados nos dois arquivos forem realmentelineardump do seu volume, você poderia criar um dispositivo DM composto de vários dispositivos de bloco que você poderia criar a partir dos arquivos dos dispositivos de loop, semelhante a este:

# 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

Isso lê uma tabela que descreve seu dispositivo DM stdine cria um dispositivo de bloco chamado /dev/mapper/my-backupque você deve poder usar como qualquer outro dispositivo de bloco.

O formato da tabela é

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

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

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

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

Editar:O DM mapeia apenas dispositivos de bloco, não arquivos, então adicionou a losetupparte. Com isso você também poderá usar blockdev --getsze não precisará se preocupar com tamanhos, como mostra o exemplo.

informação relacionada