AKTUALISIEREN

AKTUALISIEREN

Ich habe eine iscsi2 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/loop0und 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 stdinund ein Blockgerät mit dem Namen erstellt, /dev/mapper/my-backupdas 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 linearfür, nun ja, lineare Assemblierung. Die Argumente für das linearZiel 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, 0was 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-backupabgebildet wird .Backup-LUN-itmp-lun-0.000loop0Backup-LUN-itmp-lun-0.000loop1

Falls Ihr Backup nicht nur ein linearer Dump ist (z. B. indem Sie dddie 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 losetupTeil hinzugefügt. Damit könnte man auch verwenden blockdev --getszund muss sich keine Gedanken über Größen machen, wie das Beispiel zeigt.

verwandte Informationen