带有 LVM 的裸机 raid 阵列在重启后消失

带有 LVM 的裸机 raid 阵列在重启后消失

长话短说:

重启后RAID阵列+LVM消失。

细节

我想建立一个加密的raid阵列,基于这个所以

我设置了一个 RAID 阵列“裸机”(即在磁盘上而不是在分区上)。数组构建完成后,我没有格式化它并运行pvcreate。然后我按照通常的方式设置 LVM 和加密。 (看数字海洋 RAID 指南,RAID 上 LVM 的架构指南

设置加密后,我运行mdadm --detail --scan | tee -a /etc/mdadm/mdadm.confupdate-initramfs -u重新启动。/dev/md0然后就消失了。我哪里做错了?

调试步骤。

类似的问题还有很多,这是我根据我的阅读到目前为止尝试过的。

  • 的输出mdadm --examine --scan为空白。
  • 未注释的内容/etc/mdadm/mdadm.confHOMEHOST <system>,,,没有一些 SO 答案中建议的重复条目MAILADDR rootARRAY /dev/md0 metadata=1.2 name=server:0 UUID=xxxxx
  • 发行service mdadm status收益率Loaded: masked (Reason: Unit mdadm.service is masked.)
  • 发行cat /proc/mdstat收益率Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] \n unused devices: <none>
  • 我尝试跑步dpkg-reconfigure mdadmupdate-initramfs -u按照建议这里我没有找到启用“全部”的选项。此后我尝试重新启动,但这也不起作用。

作为最后的手段我尝试了mdadm --assemble --scan

奇怪的是,这种类型并不TYPE="linux_raid_member"符合我的预期这个所以

root@server:/home/user# blkid
/dev/sda1: UUID="xx" TYPE="ext2" PARTUUID="xx-xx"
/dev/sda5: UUID="xx" TYPE="LVM2_member" PARTUUID="xx-xx"
/dev/mapper/server--vg-root: UUID="xx" TYPE="ext4"
/dev/mapper/server--vg-swap_1: UUID="xx" TYPE="swap"
/dev/sdb: PTUUID="xx" PTTYPE="gpt"
/dev/sdc: PTUUID="xx" PTTYPE="gpt"
/dev/sdd: PTUUID="xx" PTTYPE="gpt"

该数组位于 sd[bcd] 上,/dev/sda 保存根文件系统。该阵列驱动器用于数据。

重新创建的步骤。

为了完整性和万一有用。

  • mdadm --create --verbose /dev/md0 --level=5 --raid-devices=3 /dev/sdb /dev/sdc /dev/sdd创建数组
  • pvcreate /dev/md0制作物理卷
  • vgcreate data_group /dev/md0创建卷组
  • lvcreate -n secure data_group -L +900G创建卷
  • cryptsetup -v luksFormat /dev/data_group/secure设置加密
  • cryptsetup luksOpen /dev/data_group/secure cryptvault打开加密卷
  • mkfs.ext4 /dev/mapper/cryptvault分割
  • mkdir /mnt/vault制作挂载点
  • mount /dev/mapper/cryptvault /mnt/vault
  • mdadm --detail --scan | tee -a /etc/mdadm/mdadm.conf保存数组布局
  • update-initramfs -u使用新配置更新 init
  • reboot

答案1

这只是一个理论:mdadm 元数据版本 1.2 距离设备启动为 4K,并且当您创建阵列时磁盘上已经存在现有的 GPT 分区表,该阵列未被 mdadm 删除(我希望 mdadm 删除所有现有签名,但这就是仅对 GPT 签名存在的解释)。阵列现在尚未组装,因为对于所有工具(包括 mdadm)来说,这看起来就像带有 GPT 分区表的空磁盘(也可能 blkid 检测到磁盘末尾附近的标头备份)而不是 mdmember,因此磁盘被忽略。

wipefs您可以尝试使用-- 首先简单地wipefs /dev/sdb检测并打印所有签名,然后wipefs -o <offset>使用上一个命令打印的 GPT 签名的偏移量来删除分区表。这可能有助于系统将磁盘检测为 mdmeber 设备。

如果这没有帮助,我建议重新开始并选择元数据版本 1.1(--metadata=1.1mdadm 的选项,1.1 将元数据放在设备的开头)或在分区顶部创建阵列(使用磁盘没有任何好处)恕我直言,没有分区表)。或者当然你可以等待其他人提出更好的建议:-)

顺便提一句。我认为这是一个全新的设置,因此设备上没有有价值的数据,但在进行任何不可逆转的更改之前备份磁盘的前几个 MiB 可能会很有用。

相关内容