Eu tenho um iscsi
disco 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/loop0
e 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 stdin
e cria um dispositivo de bloco chamado /dev/mapper/my-backup
que 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 linear
para, bem, montagem linear. Os argumentos para o linear
alvo 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 0
que seria apropriado para um despejo bruto.
Assim, o exemplo acima monta o my-backup
dispositivo 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 dd
e 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 losetup
parte. Com isso você também poderá usar blockdev --getsz
e não precisará se preocupar com tamanhos, como mostra o exemplo.