Ich habe eine iscsi
2 TB große Festplatte. Ich mache jede Woche ein Backup dieser Festplatte. Das Backup-Skript kopiert das Image der gesamten iscsi-Festplatte in eine Datei auf meinem NFS. Leider kopiert es das Image nicht in einem Stück, sondern teilt es in 1 TB große Blöcke auf. In meinem Fall habe ich also zwei 1-TB-Dateien (plus eine Konfigurationsdatei):
-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
Jetzt muss ich auf mein Backup zugreifen. Normalerweise würde ich es, wenn es eine Datei wäre, auf zuordnen /dev/loop0
und dann als normale Festplatte mounten. Aber in meinem Fall kann ich nicht zwei Dateien auf zuordnen /dev/loop0
. Eine Möglichkeit wäre, diese beiden Dateien zu caten, um eine große Datei zu erstellen, aber ich habe keinen zusätzlichen 2-TB-Speicherplatz und außerdem ist das sowieso keine gute Lösung.
Kann jemand bitte eine Lösung vorschlagen?
AKTUALISIEREN
Ich habe versucht, dmsetup mit linearem Ziel zu verwenden, wie von Andreas Wiese vorgeschlagen, aber ich erhalte folgenden Fehler.
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 enthält folgenden Fehler:
device-mapper: table: 254:0: linear: dm-linear: Device lookup failed
device-mapper: ioctl: error adding target to table
Antwort1
Was Sie tun möchten, könnte mit Device Mapper (konfigurierbar über dmsetup(8)
) erreicht werden. Wenn die Daten in den beiden Dateien wirklich einlinearWenn Sie einen Dump Ihres Datenträgers durchführen, können Sie ein DM-Gerät erstellen, das aus mehreren Blockgeräten besteht, die Sie aus den Dateien von Loop-Geräten erstellen können, ähnlich wie folgt:
# 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
Dadurch wird eine Tabelle mit der Beschreibung Ihres DM-Geräts gelesen stdin
und ein Blockgerät mit dem Namen erstellt, /dev/mapper/my-backup
das Sie wie jedes andere Blockgerät verwenden können sollten.
Das Tabellenformat ist
<start-sector> <length> <target> <target-args>
<start-sector>
und <length>
beschreiben Sie Anfang und Länge (in Sektoren von 512 Bytes) eines Teils Ihres DM-Geräts, <target>
wäre linear
für, nun ja, lineare Assemblierung. Die Argumente für das linear
Ziel sind das zu verwendende Gerät und der Offset innerhalb des Geräts (wenn Ihre Backup-Software also beispielsweise eine Art Header vor den Dump schreibt, können Sie dies überspringen), in diesem Beispiel ist es das, 0
was für einen Rohdump angemessen wäre.
Das obige Beispiel baut das Gerät also so auf, dass der erste Teil von (über ) und der zweite Teil von (über ) my-backup
abgebildet wird .Backup-LUN-itmp-lun-0.000
loop0
Backup-LUN-itmp-lun-0.000
loop1
Falls Ihr Backup nicht nur ein linearer Dump ist (z. B. indem Sie dd
die Ausgabe verwenden und in mehrere Dateien aufteilen), können Sie Ihr Glück mit den anderen DM-Zielen versuchen.
Bearbeiten:DM bildet nur Blockgeräte ab, keine Dateien, also habe ich den losetup
Teil hinzugefügt. Damit könnte man auch verwenden blockdev --getsz
und muss sich keine Gedanken über Größen machen, wie das Beispiel zeigt.