如何将单个驱动器克隆到新的 RAID 1 阵列上?

如何将单个驱动器克隆到新的 RAID 1 阵列上?

以下是当前情况的一些背景知识。我有一台负责维护的 DELL Precision T7600,它刚刚丢失了一个硬盘,幸好上面只有 /home 目录,现在已经恢复了。现在,我的任务是制作操作系统驱动器的 RAID 1,以便将停机时间降至最低。

我在 Arch-Linux wiki 上读过有关硬盘克隆的内容,目前正在关注这些 指南,倾向于第一个 grub2 配置,但我无法理解这个过程。也许我把这个变得太复杂了,而这是一个简单的dd if=/dev/sdc of=/dev/md126命令。dd从设备文件到数组是否可能或推荐?我不确定这里的最佳实践是什么。

我尝试dd访问 /dev/md0 设备,但它比原始设备小一点,所以我收到了一个关于dd无法复制到/dev/md0.另外,我尝试启动该阵列,但遇到并被error: file '/grub/i386-pc/normal.mod' not found.放入 a 中grub rescue>,我不知道该怎么办。因此,我尝试安装阵列以便grub-install对其进行操作,但失败了,正如mount告诉我的那样:unknown filesystem type 'linux_raid_member'

我运行以下命令将操作系统驱动器克隆到两个空白驱动器:

sudo pv /dev/sdc | tee >(dd of=/dev/sda) >(dd of=/dev/sdb) | dd of=/dev/null

这成功克隆了我的操作系统驱动器,没有像第一次尝试那样出现 grub 错误。 Grub 已加载,但无法启动操作系统,我陷入了 dracut 紧急模式。我通过从 LiveUSB 发出以下命令来摆脱这个sfdisk -d /dev/sdc | sfdisk /dev/sda问题,对于sdb.

这次加载了 Fedora,但我陷入了紧急模式,至少在我的情况下,这是由不存在的/etc/fstab条目引起的,正如我之前处理过的那样。所以我修剪了 fstab 以仅挂载/分区。

现在我跑了:

sudo mdadm --create --verbose /dev/md0 --level=mirror --raid-devices=2 /dev/sda /dev/sdb

从我的 Live USB 记忆棒创建阵列,但完成此操作后驱动器仍然无法启动。所以我不得不重新分区dd,到它们各自的分区。我又回到了原点。sdc2sdc3sdb

这次我决定创建 3 个独立的 RAID 分区。并创建了一个名为/etc/grub.d/09_raid1_setup

menuentry 'Fedora RAID 1' --class fedora --class gnu-linux --class gnu --class os {
    load_video
    set gfxpayload=keep
    insmod gzio
    insmod part_gpt
    insmod ext2
    insmod mdraid1x
    set root='(md/2)'
    search --no-floppy --set=root /dev/md2 
    linux /vmlinuz-3.18.9-100.fc20.x86_64 root=/dev/md3 ro
    initrd /initramfs-3.18.9-100.fc20.x86_64.img
}

然后我重新创建了新的/boot/grub2/grub.cfggrub2-mkconfig -o /boot/grub2/grub.cfg运行dracut -f /boot/initramfs-currentimage以更新 initramfs。

我还犯了一个错误,没有更改 的分区表以sdb匹配 的分区表sda,如下所示:

Part. #     Size        Partition Type            Partition Name
----------------------------------------------------------------
         1007.0 KiB  free space
1        1024.0 KiB  BIOS boot partition
2        500.0 MiB   Linux RAID
3        97.7 GiB    Linux RAID
4        2.6 TiB     Linux RAID
         455.5 KiB   free space

直到我创建了 initramfs 映像并更新了grub.cfg.

lsblk 的输出现在如下所示:

NAME    MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
sda       8:0    0   2.7T  0 disk  
├─sda1    8:1    0     1M  0 part  
├─sda2    8:2    0   500M  0 part  
├─sda3    8:3    0  97.7G  0 part  /
└─sda4    8:4    0   2.6T  0 part  
sdb       8:16   0   2.7T  0 disk  
├─sdb1    8:17   0     1M  0 part  
├─sdb2    8:18   0   500M  0 part  
│ └─md2   9:2    0 499.7M  0 raid1 /boot
├─sdb3    8:19   0  97.7G  0 part  
│ └─md3   9:3    0  97.6G  0 raid1 
└─sdb4    8:20   0   2.6T  0 part  
  └─md4   9:4    0   2.6T  0 raid1 
sdc       8:32   0   2.7T  0 disk  /home

并且/etc/fstab是:

/dev/md3 /                       ext4    defaults        1 1
/dev/md2 /boot                   ext4    defaults        1 2
UUID=f9fba42e-80f4-41b1-b309-88b22f642907 /home                 ext4    defaults        1 2

经过一些研究,阅读, 和一般的 谷歌搜索,我仍然找不到适合我情况的答案。

感谢您的时间和投入!

答案1

首先,您需要确保现有磁盘末尾至少有 1mb 左右的可用空间。如果需要,调整最后一个分区的大小。然后只需从两个磁盘创建 raid 阵列(首先列出原始磁盘)。请务必使用-e 1.0开关来mdadm确保它将 raid 元数据放置在磁盘的末尾。它将自动开始将原始驱动器的内容复制到新驱动器。您需要在从其他驱动器启动时执行所有这些操作,或者至少在所有文件系统都以只读方式安装的情况下执行。完成后重新启动,然后重新安装 grub。如果您的 /etc/fstab 使用 UUID,这就是您需要做的;如果没有,您需要确保将其设置为指向 /dev/mdXpY 而不是 /dev/sdapY。

相关内容