以下是当前情况的一些背景知识。我有一台负责维护的 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
,到它们各自的分区。我又回到了原点。sdc2
sdc3
sdb
这次我决定创建 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.cfg
并grub2-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。