
我有一個iscsi
2TB 大的磁碟。我每週都會備份該磁碟。備份腳本將整個 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
並且不必擔心大小,如示例所示。