我正在将一个工作项目从 RHEL 6(内核 2.6.32)迁移到 RHEL 7(内核 3.10.0)。
该项目涉及构建要在虚拟机上使用的原始磁盘映像文件,这些文件代表真实硬件,但允许在不使用目标硬件的情况下进行测试和开发。
将软件从主机操作系统部署到磁盘时,原始文件将附加到循环设备,并创建分区。其中一些是 raid 0 分区。这些分区有时对于附加到不同虚拟机的磁盘具有相同的标签。例如,我有四个原始文件,原始文件 1 和 2 附加到一个虚拟机,3 和 4 附加到另一个虚拟机;但是,我需要在分区标签为“LOG”的两个磁盘上设置一个 raid。
这在 RHEL 6 上不是问题。连接循环设备时,我必须运行kpartx -a /dev/loop0
,kpartx -a /dev/loop1
如果我想组装 raid 设备,则可以使用以下命令完成:mdadm --assemble /dev/md/LOG --name LOG
。在我使用 kpartx 之前,lsblk
循环设备的分区不会显示。blkid
在 RHEL 7 中执行同样的操作是事情变得棘手的地方。只需将原始文件附加为循环设备即可检测到分区。使用lsblk
或blkid
我能够看到循环设备的分区,并且在加载软件时,mdadm 工具将在循环设备 0-3 上看到分区标签“LOG”,并且无法组装 raid 集,因为循环 0 上标记为 LOG 的分区和 1 与循环 2 和 3 上标记为 LOG 的分区不同。
我还没有找到一种方法来防止使用lostup中的参数。有没有办法防止通过内核参数或其他配置文件检测循环设备上的分区?