Filesystems

掛載邏輯卷時的分區偏移

  • October 26, 2020

我正在維護一個 Linux 伺服器(仍然是 Ubuntu 18.04),除其他外,它在其上執行虛擬 Windows 10 機器。Windows 機器使用邏輯卷作為其硬碟驅動器。

我的目標是通過在主機系統目錄樹中安裝其 LV 的快照,然後使用 rsync 備份文件(就像我在 Linux 主機系統上的文件所做的那樣)來備份 Windows 機器上的某些文件。

這是我正在做的事情:

# create snapshot
lvcreate --snapshot --size 20G --name windows-backup /dev/vg0/vmachine

# mount snapshot
mkdir /mnt/windows-backup
mount --read-only /dev/vg0/windows-backup /mnt/windows-backup

但是,安裝失敗並顯示以下錯誤消息:

mount: /mnt/windows-backup: wrong fs type, bad option, bad superblock on /dev/mapper/vg0-windows--backup, missing codepage or helper program, or other error.

我懷疑那是因為 LV 由多個分區組成並遵循fdisk -l /dev/vg0/windows-backup

Disk /dev/vg0/windows-backup: 250 GiB, 268435456000 bytes, 524288000 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: dos
Disk identifier: 0x6be134ed

Device                   Boot     Start       End   Sectors  Size Id Type
/dev/vg0/windows-backup1 *         2048   1126399   1124352  549M  7 HPFS/NTFS/exFAT
/dev/vg0/windows-backup2        1126400 523192612 522066213  249G  7 HPFS/NTFS/exFAT
/dev/vg0/windows-backup3      523194368 524283903   1089536  532M 27 Hidden NTFS WinRE

然後我嘗試了

mount --read-only --types ntfs -o offset=$((512*1126400)) /dev/vg0/windows-backup /mnt/windows-backup

這產生了預期的結果。

我的問題:我能否以某種方式擺脫必須在掛載之前手動查找分區偏移量的步驟,即在我的情況下硬編碼備份腳本中的值。畢竟,這個偏移量理論上(雖然不太可能)會改變?!有沒有辦法動態確定最大 NTFS 分區的偏移量?

讓我有點困惑的另一件事是,第一個mount命令(沒有偏移,沒有指定文件系統類型)曾經在一段時間前工作,同時我沒有更改 LV 的分區佈局。這是為什麼?

您不應該嘗試安裝設備本身,而是安裝其上的分區。這裡的問題是系統預設不會嘗試檢測 LV 上的分區(因為在 LV 之上創建分區通常沒有意義)所以你首先需要告訴核心讀取分區表使用partprobe /dev/vg0/windows-backup然後掛載/dev/vg0/windows-backup2.

使用一些虛擬化工具(如libguestfs)來訪問數據也可能是一個更好的主意,而不是直接訪問 LV,我不確定直接訪問數據是否安全(但我不是虛擬化專家,你有一個快照,所以它可能沒問題)。

引用自:https://unix.stackexchange.com/questions/616505