我试图了解 LVM 如何/在哪里存储其配置数据。
- 是否
pvcreate /dev/sdb
写入任何元数据/dev/sdb
?如果是的话写什么? vgcreate data /dev/sdb /dev/sdc
卷组的配置存储在哪里?- LVM 在哪里存储逻辑盘区和物理盘区之间的映射?
- LVM 配置中是否有任何特定于机器的配置?
- 假设我的机器将 2 个磁盘配置为逻辑卷,我可以将这些磁盘从机器中取出并将它们放入另一台机器中,并期望逻辑卷将在新机器中工作吗?
答案1
是否
pvcreate /dev/sdb
写入任何元数据/dev/sdb
?如果是的话写什么?
是的,但它只不过是一些标头和标识数据来将块设备标记为 LVM PV。当您创建卷组时,就会出现“真正的”元数据。
vgcreate data /dev/sdb /dev/sdc
卷组的配置存储在哪里?
在属于卷组的每个物理卷上。默认情况下,卷组内每个物理卷的每个元数据区域中都会维护元数据的相同副本。 LVM 卷组元数据很小并以 ASCII 形式存储。
LVM 在哪里存储逻辑盘区和物理盘区之间的映射?
这是上述卷组元数据的一部分。
LVM 配置中是否有任何特定于机器的配置?
不会。作为 VG 一部分的 PV 是通过使用在创建 PV 时分配的唯一标识符来查找和组装的。
假设我的机器将 2 个磁盘配置为逻辑卷,我可以将这些磁盘从机器中取出并将它们放入另一台机器中,并期望逻辑卷将在新机器中工作吗?
是的。如果组成 VG 的所有 PV 都存在,则该 VG 上的 LV 将工作。
答案2
pvcreate /dev/sdb 是否将任何元数据写入 /dev/sdb?如果是的话写什么?
如果您-vv
向命令传递一个标志,pvcreate
它会使命令更加详细,您将看到 pvcreate 在磁盘上创建了一个元数据区域。
Writing physical volume data to disk "/dev/sdc1"
lvmcache: /dev/sdc1: now in VG #orphans_lvm2 (#orphans_lvm2) with 0 mdas
Creating metadata area on /dev/sdc1 at sector 8 size 2040 sectors
Opened /dev/sdc1 RW O_DIRECT
/dev/sdc1: block size is 1024 bytes
/dev/sdc1: physical block size is 512 bytes
/dev/sdc1: Preparing PV label header xxx.xxxxx.xxxxxxxxxxxxxxx
/dev/sdc1: Writing label to sector 1 with stored offset 32.
元数据区域写入了什么?
我不知道可用于查看元数据的命令,但该命令vgcfgbackup
可用于备份元数据,并且您可以打开由此创建的备份文件来查看元数据
vgcfgbackup -f /path/of/your/choice/file <your_vg_name>
上述命令创建/path/of/your/choice/file
的将包含PV、VG和LVM元数据。其中一个部分如下所示:
physical_volumes {
pv0 {
id = "abCDe-TuvwX-DEfgh-daEb-Xys-6Efcgh-LkmNo"
device = "/dev/sdc1" # Hint only
status = ["ALLOCATABLE"]
flags = []
dev_size = 10477194 # 4.99592 Gigabytes
pe_start = 2048
pe_count = 1278 # 4.99219 Gigabytes
}
}
我建议你看一下目录的内容/etc/lvm
和命令的输出lvm dumpconfig
假设我的机器将 2 个磁盘配置为逻辑卷,我可以将这些磁盘从机器中取出并将它们放入另一台机器中,并期望逻辑卷将在新机器中工作吗?
是的你可以。
您可以将卷组迁移到另一台主机。虽然它不完全是即插即用的,但执行此操作的过程非常简单。网上有许多教程可以帮助您完成此操作。
这个服务器故障线程讨论如何使用命令将 LVM 分区移动到另一台主机dd
。
答案3
- 是否
pvcreate /dev/sdb
写入任何元数据/dev/sdb
?如果是的话写什么?vgcreate data /dev/sdb /dev/sdc
卷组的配置存储在哪里?
pvcreate
为 PV 创建“标签”和“标头”,并为卷上的元数据分配空间(由选项指定--[pv]metadata
)。标头是一个二进制数据结构,其中包括指向该 PV 上元数据区域的指针。
该vgcreate
命令将卷组当前状态的文本描述存储到先前在关联 PV 上分配的元数据区域(由选项--[vg]metadatacopies
等控制)。这些是命令支持的描述vgcfgbackup
,在大多数情况下是人们有兴趣检查的元数据。
对于更晦涩的 PV 标签/标头信息:可以在以下位置找到一份概述说明:LVM 内部结构,http://mo.morsi.org/blog/node/392(其中包括指向 Ruby 脚本的链接,该脚本可以解析标签/标题lvm-parser.rb
。)
类似的 Python 模块pvdissect
位于http://www.syslinux.org/wiki/index.php?title=开发/LVM_support。