ACTUALIZAR

ACTUALIZAR

Tengo un iscsidisco de 2TB de tamaño. Hago una copia de seguridad de ese disco todas las semanas. El script de respaldo copia la imagen de todo el disco iscsi en un archivo en mi NFS. Desafortunadamente, no copia la imagen en una sola pieza, sino que la divide en trozos de 1 TB de tamaño. Entonces, en mi caso, tengo dos archivos de 1 TB (más un archivo de configuración):

-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

Ahora necesito acceder a mi copia de seguridad. Normalmente, si fuera un archivo, lo asignaría /dev/loop0y luego lo montaría como un disco normal. Pero en mi caso, no puedo asignar dos archivos a /dev/loop0. Una opción sería capturar esos dos archivos para crear un archivo grande, pero no tengo 2 TB de espacio adicional y, además, esta no es una buena solución de todos modos.

¿Alguien puede sugerir una solución?

ACTUALIZAR

Intenté usar dmsetup con objetivo lineal, como lo sugirió Andreas Wiese, pero aparece el siguiente error.

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 contiene el siguiente error:

device-mapper: table: 254:0: linear: dm-linear: Device lookup failed
device-mapper: ioctl: error adding target to table

Respuesta1

Lo que desea hacer se puede lograr utilizando Device Mapper (que se configurará a través de dmsetup(8)). Si los datos en los dos archivos son realmente unlinealvolcado de su volumen, podría crear un dispositivo DM compuesto por varios dispositivos de bloque que podría crear a partir de los archivos de los dispositivos de bucle, similar 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

Esto lee una tabla que describe su dispositivo DM stdiny crea un dispositivo de bloque llamado /dev/mapper/my-backupque debería poder usar como cualquier otro dispositivo de bloque.

El formato de la tabla es

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

<start-sector>y <length>describir el inicio y la longitud (en sectores de 512 bytes) de una parte de su dispositivo DM, <target>sería linearpara, bueno, un ensamblaje lineal. Los argumentos para el linearobjetivo son el dispositivo a usar y el desplazamiento dentro del dispositivo (por lo tanto, si, por ejemplo, su software de respaldo escribe algún tipo de encabezado delante del volcado, puede omitir esto), en este ejemplo es lo 0que sería apropiado para un vertedero crudo.

Por lo tanto, el ejemplo anterior ensambla el my-backupdispositivo de modo que la primera parte se asigna desde Backup-LUN-itmp-lun-0.000(vía loop0) y la segunda parte desde Backup-LUN-itmp-lun-0.000(vía loop1).

En caso de que su copia de seguridad no sea solo un volcado lineal (como usar ddy dividir la salida en varios archivos), puede intentar tener suerte con los otros objetivos DM.

Editar:DM solo asigna dispositivos de bloque, no archivos, por lo que agregó la losetupparte. Con esto también podrás utilizar blockdev --getszy no tendrás que preocuparte por las tallas, como muestra el ejemplo.

información relacionada