ОБНОВЛЯТЬ

ОБНОВЛЯТЬ

У меня есть iscsiдиск размером 2 ТБ. Я делаю резервную копию этого диска каждую неделю. Скрипт резервного копирования копирует образ всего iscsi-диска в файл на моем NFS. К сожалению, он не копирует образ целиком, а разбивает его на части размером 1 ТБ. Так что в моем случае у меня есть два файла по 1 ТБ (плюс один файл конфигурации):

-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

Теперь мне нужно получить доступ к моей резервной копии. Обычно, если бы это был один файл, я бы сопоставил его с /dev/loop0и затем смонтировал бы его как обычный диск. Но в моем случае я не могу сопоставить два файла с /dev/loop0. Одним из вариантов было бы объединить эти два файла в cat, чтобы создать один большой файл, но у меня нет дополнительных 2 ТБ места, и, кроме того, это в любом случае не лучшее решение.

Может ли кто-нибудь предложить решение?

ОБНОВЛЯТЬ

Я попробовал использовать dmsetup с линейной целью, как предложил Андреас Визе, но получаю следующую ошибку.

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 содержит следующую ошибку:

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

решение1

То, что вы хотите сделать, можно сделать с помощью Device Mapper (настраивается через dmsetup(8)). Если данные в двух файлах действительно являютсялинейныйдампа вашего тома, вы можете создать устройство DM, состоящее из нескольких блочных устройств, которые вы можете создать из файлов из loop-devices, например так:

# 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

Это считывает таблицу, описывающую ваше устройство DM, stdinи создает блочное устройство с именем /dev/mapper/my-backup, которое вы сможете использовать как любое другое блочное устройство.

Формат таблицы:

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

<start-sector>и <length>описать начало и длину (в секторах по 512 байт) части вашего устройства DM, <target>будет linearдля, ну, линейной сборки. Аргументами для linearцели являются используемое устройство и смещение внутри устройства (так что если, например, ваше программное обеспечение для резервного копирования записывает какой-то заголовок перед дампом, вы можете пропустить это), в этом примере это то, 0что будет подходящим для необработанного дампа.

Таким образом, приведенный выше пример собирает my-backupустройство таким образом, что первая часть отображается из Backup-LUN-itmp-lun-0.000(через loop0), а вторая часть — из Backup-LUN-itmp-lun-0.000(через loop1).

Если ваша резервная копия не представляет собой просто линейный дамп (например, использование ddи разделение выходных данных на несколько файлов), вы можете попытаться добиться успеха с другими целями DM.

Редактировать:DM отображает только блочные устройства, а не файлы, поэтому добавил эту losetupчасть. С этим вы также можете использовать blockdev --getszи не беспокоиться о размерах, как показано в примере.

Связанный контент