如何真正正确地重新创建 RAID1

如何真正正确地重新创建 RAID1

系统:
配备 Linux Mint 17.3 的笔记本电脑,1x SSD 用于系统,2x HDD 用于使用mdadm.

情况:
由于不知道如何正确创建 RAID1,所以我创建得很糟糕。

  • GParted 显示一条警告,表明主gpt分区表不存在,并且它正在使用备份分区表,我认为它显示了两次

  • GParted 显示两个 HDD 上的分区都包含ext4文件系统,而不是linux-raid文件系统

  • raidGParted在两个 HDD 上均未显示该标志

  • 重新启动导致阵列无法工作,我的意思是它不仅没有自动安装,而且在不停止阵列并重新组装的情况下无法安装

  • 可能还有其他我没有注意到的事情,比如我不知道阵列(我的意思是镜像)是否正常工作

答案1

在此答案中,请明确指出,两个阵列成员(驱动器)上的所有数据都将被销毁,因此请先备份!


打开终端并成为rootsu);如果你有sudo启用后,您还可以执行以下操作sudo -i:看man sudo对于所有选项):

sudo -i

mdX检查数组中的 数字 ( ):

cat /proc/mdstat

假设它是md0并且它安装在 上/mnt/raid1,首先我们必须卸载并停止该阵列:

umount /mnt/raid1
mdadm --stop /dev/md0

我们需要擦除两个驱动器上的超级块,假设sdasdb

mdadm --zero-superblock /dev/sda1
mdadm --zero-superblock /dev/sdb1

让我们开始工作吧;也就是说,如果之前有任何数据和文件系统,我们应该擦除驱动器。假设我们有 2 个成员:sda, sdb:

pv < /dev/zero > /dev/sda
pv < /dev/zero > /dev/sdb

如果您出于某种原因要跳过上一步,则需要擦除两个驱动器上的所有文件系统。然后检查是否没有留下任何东西,您可以在两个驱动器上使用 GParted 查看,如果有除 之外的任何文件系统unknown,请将其擦除。

首先,我们擦除所有现有分区,假设sda包含3个分区,则:

wipefs --all /dev/sda3
wipefs --all /dev/sda2
wipefs --all /dev/sda1

在两个驱动器上使用它并执行所有分区。

然后,我们使用以下命令擦除分区方案:

wipefs --all /dev/sda
wipefs --all /dev/sdb

然后,我们使用 GUID 分区表 (GPT) 初始化两个驱动器:

gdisk /dev/sda
gdisk /dev/sdb

在这两种情况下都使用以下内容:

o Enter新的空 GUID 分区表 (GPT)
y Enter以确认您的决定
w Enter写入更改
y Enter以确认您的决定

现在,我们需要对两个驱动器进行分区,但不要使用 GParted 执行此操作,因为它会在此过程中创建一个文件系统,这是我们不希望的,请gdisk再次使用:

gdisk /dev/sda
gdisk /dev/sdb

在这两种情况下,请使用以下内容:
n Enter对于新分区
Enter对于第一个分区 对于
Enter第一个扇区的默认值
Enter对于最后一个扇区的默认值
fd00 Enter对于 Linux RAID 类型
w Enter写入更改
y Enter以确认您的决定


要三重检查是否没有留下任何内容,您可以使用 GParted 查看两个新创建的分区,如果它们包含除 之外的任何文件系统unknown,请将其擦除:

wipefs --all /dev/sda1
wipefs --all /dev/sdb1

您现在可以检查驱动器:

mdadm --examine /dev/sda /dev/sdb

应该说:

(type ee)

如果是,我们现在检查分区:

mdadm --examine /dev/sda1 /dev/sdb1

应该说:

No md superblock detected

如果是的话,我们可以创建 RAID1 阵列:

mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sda1 /dev/sdb1

我们将等到数组完全创建,我们可以通过以下方式观察这个过程:

watch -n 1 cat /proc/mdstat

创建数组后,我们应该查看其详细信息:

mdadm --detail /dev/md0

应该说:

          State : clean
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0

现在我们在阵列上创建文件系统,如果您使用ext4,最好避免这种情况,因为ext4lazyinit会花费大量时间,因此得名“lazyinit”,因此我建议您避免这种情况:

mkfs.ext4 /dev/md0

相反,您应该使用以下命令强制进行完整的即时初始化:

mkfs.ext4 -E lazy_itable_init=0,lazy_journal_init=0 /dev/md0

通过指定这些选项,inode 和日志将在创建期间立即初始化,这对于较大的阵列很有用。

如果您选择采用快捷方式并ext4使用“更好避免的命令”创建文件系统,请注意,ext4lazyinit初始化所有索引节点将花费大量时间,您可以观察它直到完成,例如:

iotop

无论选择哪种方式进行文件系统初始化,都应该在完成初始化后挂载它。


我们现在为此 RAID1 阵列创建一些目录:

mkdir --parents /mnt/raid1

并简单地安装它:

mount /dev/md0 /mnt/raid1

由于我们基本上已经完成,我们可以再次使用 GParted 来快速检查它是否显示linux-raid文件系统以及raid两个驱动器上的标志。

如果是这样,我们就正确创建了带有 GPT 分区的 RAID1 阵列,现在可以在其上复制文件。


查看文件系统的 UUID md0

blkid /dev/md0

将 UUID 复制到剪贴板。

现在我们需要使用fstab您最喜欢的文本编辑器进行编辑:

nano /etc/fstab

并添加一个条目:

UUID=<the UUID you have in the clipboard>    /mnt/raid1    ext4    defaults     0    0

保存更改后您可以检查是否正确:

mount --all --verbose | grep raid1

应该说:

already mounted

如果是,我们保存阵列配置;如果您还没有md创建任何设备,您可以简单地执行以下操作:

mdadm --detail --scan >> /etc/mdadm/mdadm.conf

如果数组已经存在,只需运行前面的命令,而不重定向到conf文件:

mdadm --detail --scan

并手动将新数组添加到mdadm.conf文件中。


最后,不要忘记更新你的 initramfs:

update-initramfs -u

检查您是否按照计划进行了所有操作,如果是,则可以重新启动:

reboot --reboot

相关内容