我有一台新安装的机器,上面安装了 Gentoo Linux,还有来自另一台机器的软件 RAID 5 阵列(4 个 IDE 磁盘连接到板外 PCI 控制器)。我已成功将控制器移至新机器;内核检测到驱动器;我使用 mdadm --examine 并验证了单个 RAID 分区已被检测到、干净,甚至按“正确”顺序排列(hde1 == 驱动器 0、hdg1 == 驱动器 1,等等)。
我无法访问旧机器的原始配置文件。我应该如何在不丢失数据的情况下重新激活此阵列?
答案1
您确实需要原始的 mdadm.conf 文件。但是,由于您没有它,因此您必须重新创建它。首先,在执行任何操作之前,通过 mdadm 手册页了解 mdadm。为什么要冒着因您不了解的情况或命令而丢失数据的风险呢?
话虽如此,此建议的风险由您自行承担。使用错误的命令很容易丢失所有数据。在运行任何命令之前,仔细检查该命令的后果. 我不对您采取的任何行动造成的数据丢失或其他问题负责 - 因此仔细检查一切。
您可以尝试以下操作:
mdadm --assemble --scan --verbose /dev/md{number} /dev/{disk1} /dev/{disk2} /dev/{disk3} /dev/{disk4}
这应该会为您提供一些信息,以及 ID。它还将创建一个新的阵列设备 /dev/md{number},从那里您应该能够找到任何挂载。 不要使用该--auto
选项,手册页措辞暗示在某些情况下,这可能会导致驱动器上的阵列设置被覆盖。 这可能是不是情况确实如此,并且该页面可能需要重写以提高清晰度,但为什么要冒险呢?
如果阵列组装正确,并且一切“正常”,确保已将 mdadm.conf 写入并存储在 中/etc
,以便您在启动时能够获得它。 在文件中包括来自数组的新 ID 以帮助其完成。
答案2
我只是想至少为 Debian 添加我的完整答案。
- 通过 --> 安装 raid 管理器
sudo apt-get install mdadm
通过 --> 扫描旧的 raid 磁盘
sudo mdadm --assemble --scan
此时,我喜欢
BLKID
手动检查并安装突袭以进行确认。blkid mount /dev/md0 /mnt
- 通过 --> 将信息附加到 mdadm.conf
mdadm --detail --scan >> /etc/mdadm/mdadm.conf
通过 --> 更新 initramfs
update-initramfs -u
故障排除:
确保输出mdadm --detail --scan
匹配你的/etc/mdadm/mdadm.conf
nano /etc/mdadm/mdadm.conf
ARRAY /dev/md/0 level=raid5 num-devices=3 metadata=00.90 UUID=a44a52e4:0211e47f:f15bce44:817d167c
示例 FSTAB
/dev/md0 /mnt/mdadm ext4 defaults,nobootwait,nofail 0 2
https://unix.stackexchange.com/questions/23879/using-mdadm-examine-to-write-mdadm-conf/52935#52935
答案3
在将操作系统从 CentOS 6.2 更新到 CentOS 8.2 时,4 磁盘数据 Raid0 与操作系统磁盘分离的问题将我带到了这里。
我能够使用 Avery 上面接受的答案(https://serverfault.com/a/32721/551746),但由于 Kernel 3.14 中引入的 Raid Layout 混乱而遇到了问题。
在本帖之后 (https://www.reddit.com/r/linuxquestions/comments/debx7w/mdadm_raid0_default_layout/)我必须更改默认布局(/sys/module/raid0/parameters/default_layout),以便新内核使用旧的 Raid0 布局。
mdadm --detail /dev/mdx
echo 2> /sys/module/raid0/parameters/default_layout #study the previous link to see if 2,1 or 0 needs to be echoed here.
mdadm --assemble --scan
如果可行,请添加内核参数,以便重启时 raid0 默认布局为 2(或 1 或 0),方法是编辑 /etc/default/grub 并设置
raid0.default_layout=2
重建 grub.cfg,添加到 /etc/fstab 并重新启动!
答案4
2023 年更新
现在事情变得简单多了,而且这或多或少不需要任何麻烦、手动组装或访问原始配置等。下面的过程是在将 10 年前的 3 驱动器 RAID 5 设置从 SL(即 RedHat)6.9 移动到 Ubuntu 22.04 时测试的。
如果可以的话,从旧机器上获取以下内容:
mdadm.conf
(/etc/mdadm.conf
或者/etc/mdadm/mdadm.conf
)/etc/fstab
- 输出
cat /proc/mdstat
- 的输出
mdadm -D /dev/mdx
,其中'mdx'可以从(3)中找到(即/dev/md0
)
如果您无法获取这些信息并没有关系;您只需要它来进行健全性检查。
现在mdadm
在新机器上安装,然后重新启动。将会有一个新的mdadm.conf
(几乎肯定在),它应该正确报告驱动器 UUID(它应该与旧机器上/etc/mdadm
报告的 UUID 相同)。这将看起来像mdadm -D
ARRAY /dev/md/0 metadata=1.1 UUID=68d1ea02:83b09989:707c6320:1905a656 name=0
cat /proc/mdstat
和的新输出mdadm -D
应该与旧机器的输出几乎相同,只是设备可能有变化(在我的情况下,/dev/md127
更改为/dev/md0
)并且报告的尺寸可能略有不同。
现在你需要创建一个/etc/fstab
条目,并且你(最好)需要一个 fstab 样式的 UUID(这是不是与 报告的 UUID 相同mdadm
)。如果您的新数组是/dev/md0
,那么
$ blkid | grep /dev/md0
/dev/md0: UUID="some-long-uuid" BLOCK_SIZE="4096" TYPE="ext4"
现在创建您想要挂载新驱动器的目录,并创建一个/etc/fstab
条目:
UUID=some-long-uuid /data ext4 defaults 0 2
在这种情况下,阵列将安装在/data
。
以 root 身份运行测试新的 fstab 条目mount -a
;这将挂载尚未挂载的任何内容。您还应该检查/etc/mtab
以确认挂载选项是否正确:
$ cat /etc/mtab | grep /dev/md0
/dev/md0 /data ext4 rw,relatime,stripe=256 0 0
在运行这些测试之前,请勿尝试重新启动。如果您输入的 UUID 不正确,内核将启动到带有依赖性错误的紧急控制台。要恢复,请删除新/etc/fstab
条目并重新启动。
重新启动后,您应该会在挂载点看到旧阵列。