挂载逻辑卷时的分区偏移量

挂载逻辑卷时的分区偏移量

我正在维护一个 Linux 服务器(仍然是 Ubuntu 18.04),除其他外,它在其上运行虚拟 Windows 10 机器。 Windows 机器使用逻辑卷作为其硬盘驱动器。

我的目标是通过在主机系统目录树中安装 LV 的快照来备份 Windows 计算机上的某些文件,然后使用 rsync 备份文件(就像我对 Linux 主机系统上的文件所做的那样)。

这是我正在做的事情:

# 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 的分区布局。这是为什么?

答案1

您不应该尝试挂载设备本身,而应该尝试挂载其上的分区。这里的问题是系统默认情况下不会尝试检测 LV 上的分区(因为在 LV 上创建分区通常没有意义),因此您首先需要告诉内核使用以下命令读取分区表partprobe /dev/vg0/windows-backup,然后挂载/dev/vg0/windows-backup2

使用一些虚拟化工具也可能是一个更好的主意,例如libguestfs要访问数据,而不是直接访问 LV,我不确定直接访问数据是否安全(但我不是虚拟化专家,而且您有快照,所以可能没问题)。

相关内容