我正在维护一个 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,我不确定直接访问数据是否安全(但我不是虚拟化专家,而且您有快照,所以可能没问题)。