У меня есть 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
и не беспокоиться о размерах, как показано в примере.