更新

更新

我有一個iscsi2TB 大的磁碟。我每週都會備份該磁碟。備份腳本將整個 iscsi 磁碟的映像複製到我的 NFS 上的檔案中。不幸的是,它不會將影像複製為一塊,而是將其分割成 1TB 大小的區塊。因此,就我而言,我有兩個 1TB 檔案(外加一個設定檔):

-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.一種選擇是將這兩個文件合併起來創建一個大文件,但我沒有額外的 2TB 空間,而且無論如何這都不是一個好的解決方案。

有人可以建議解決方案嗎?

更新

我嘗試按照 Andreas Wiese 的建議將 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

您想要做的事情可以使用裝置映射器來完成(透過設定dmsetup(8))。如果兩個檔案中的資料確實是一個線性轉儲磁碟區後,您可以建立一個由多個區塊設備組成的 DM 設備,您可以從循環設備的檔案中建立這些區塊設備,類似於:

# 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>描述 DM 設備的一部分的開始和長度(以 512 位元組的磁區為單位),這<target>linear用於線性組裝。目標的參數linear是要使用的設備和設備內的偏移量(因此,如果您的備份軟體在轉儲前面寫入某種標頭,您可以跳過此操作),在本範例中,它0適合於原始轉儲。

因此,上面的範例組裝了my-backup設備,以便第一部分從Backup-LUN-itmp-lun-0.000(via loop0) 映射,第二部分從Backup-LUN-itmp-lun-0.000(via loop1) 映射。

如果您的備份不僅僅是線性轉儲(例如使用dd輸出並將其拆分為多個檔案),您可以嘗試幸運地使用其他 DM 目標。

編輯:DM只映射塊設備,不映射文件,所以添加了這losetup部分。有了這個,您也可以使用blockdev --getsz並且不必擔心大小,如示例所示。

相關內容