mdadm
似乎不支持将数组从 1 级扩展到 10 级。
我在 RAID 1 中有两个磁盘。我想添加两个新磁盘并将阵列转换为四磁盘 RAID 10 阵列。
我目前的策略:
- 做好备份。
- 创建一个缺少两个磁盘的降级 4 磁盘 RAID 10 阵列。
rsync
the RAID 1 array with the RAID 10 array.
RAID 1 阵列中的一个磁盘。fail
and remove- 将可用磁盘添加到 RAID 10 阵列并等待重新同步完成。
- 销毁 RAID 1 阵列并将最后一个磁盘添加到 RAID 10 阵列。
问题在于步骤 5 缺乏冗余。
有没有更好的办法?
答案1
使用 linux softraid 您可以仅用两个磁盘创建 RAID 10 阵列。
下面使用的设备名称:
md0
是类型/级别 RAID1 的旧阵列。md1
是类型/级别的新阵列 RAID10。sda1
并且sdb2
新的、空分区(没有数据)。sda2
并且sdc1
是旧分区(包含关键数据)。
替换名称以适合您的用例。使用 eglsblk
查看您当前的布局。
0)备份,备份,备份,备份,还有备份
1)创建新阵列(4 个设备:2 个现有,2 个缺失):
mdadm -v --create /dev/md1 --level=raid10 --raid-devices=4 /dev/sda1 missing /dev/sdb2 missing
请注意,此示例布局中sda1
有一个缺失的对应项,并且还有另一个缺失的对应项。此时sdb2
您的数据并不安全(实际上它是 RAID0,直到您添加缺失的成员)。md1
要查看创建的数组的布局和其他详细信息,请使用:
mdadm -D /dev/md1
注意!您应该保存数组的布局:
# View current mdadm config:
cat /etc/mdadm/mdadm.conf
# Add new layout (grep is to make sure you don't re-add md0):
mdadm --detail --scan | grep "/dev/md1" | tee -a /etc/mdadm/mdadm.conf
# Save config to initramfs (to be available after reboot)
update-initramfs -u
2)格式化并安装。应该/dev/md1
可以立即使用,但需要格式化然后安装。
3)复制文件。例如,使用 rsync 将数据从旧 RAID 1 复制到新 RAID 10。(这只是一个示例命令,请阅读 rsync 的手册页)
rsync -arHx / /where/ever/you/mounted/the/RAID10
4)使旧 RAID1(md0)的第一部分失效,并将其添加到新的 RAID10(md1)
mdadm /dev/md0 --fail /dev/sda2 --remove /dev/sda2
mdadm /dev/md1 --add /dev/sda2
注意!这将删除 中的数据sda2
。md0
应该仍然可以使用,但前提是其他团队成员完全正常运行。
另请注意,这将开始同步/恢复过程md1
。要检查状态,请使用以下命令之一:
# status of sync/recovery
cat /proc/mdstat
# details
mdadm -D /dev/md1
等待直到恢复完成。
5)在新阵列上安装 GRUB(假设您从该阵列启动)。某些 Linux 救援/启动 CD 效果最好。
6)在新阵列上启动。如果工作正常,则销毁旧阵列并将剩余磁盘添加到新阵列。
**无可挽回的境地**
此时,您将销毁旧 md0 阵列的最后一个成员上的数据。确保一切正常。
mdadm --stop /dev/md0
mdadm /dev/md0 --remove /dev/sdc1
mdadm /dev/md1 --add /dev/sdc1
然后再次 -等待直到恢复md1
完成。
# status of sync/recovery
cat /proc/mdstat
# details
mdadm -D /dev/md1
7)更新 mdadm 配置
记得更新/etc/mdadm/mdadm.conf
(删除 md0)。
并将配置保存到 initramfs(重启后可用)
update-initramfs -u
答案2
按照与 Mark Turner 相同的步骤操作,但在创建 RAID 阵列时,请提及 2 个丢失的磁盘
mdadm -v --create /dev/md1 --level=raid10 --raid-devices=4 /dev/sda1 missing /dev/sdb2 missing
然后继续执行其他步骤。
简而言之,创建总共有 4 个磁盘(其中 2 个丢失)的 RAID10,重新同步,然后添加另外两个磁盘。
答案3
刚刚完成从两个 2TB 磁盘 mdadm RAID 1 上的 LVM 到四磁盘 RAID 10(两个原始磁盘 + 两个新磁盘)上的 LVM 的转换。
正如@aditsu 指出的那样,创建阵列时驱动器顺序很重要。
mdadm -v --create /dev/md1 --level=raid10 --raid-devices=4 /dev/sda missing /dev/sdb missing
上面的代码提供了一个可用的阵列,其中有两个缺失的磁盘(如果您不使用整个磁盘,请添加分区号)。一旦添加第三个磁盘,它就会开始同步。我在第三个磁盘完成同步之前添加了第四个磁盘。它显示为备用,直到第三个磁盘完成同步后才开始同步。
针对我的情况的步骤:
做好备份。
创建一个具有两个缺失磁盘的降级 4 磁盘 RAID 10 阵列(我们将缺失的磁盘称为 2 号和 4 号)。
告诉妻子不要更改或添加任何她关心的文件
发生故障并从 RAID 1 阵列中删除一个磁盘(磁盘 4)。
将物理范围从 RAID 1 阵列移动到 RAID 10 阵列,并将磁盘 2 留空。
终止活动的 RAID 1 阵列,将现在空的磁盘(磁盘 2)添加到 RAID 10 阵列,然后等待重新同步完成。
将从 RAID 1 中移除的第一个磁盘(磁盘 4)添加到 RAID 10 阵列。
讓老婆继续。
在第 7 步,我认为驱动 1、2,或者4 可以发生故障(在磁盘 4 重新同步期间),而不会终止阵列。如果驱动器 3 发生故障,阵列上的数据将丢失。
答案4
我已经将 raid1 移至 raid10,虽然此页面对我有帮助,但上面的答案中缺少一些内容。特别是我的目标是保留 ext4 出生时间。
设置如下:
- 每种类型有 2 个 raid1 磁盘,msdos 和 md0,带有 ext4 分区和 mbr,带有 msdos
- 2 个新磁盘成为新的主磁盘(大小全部相同)
- 结果是 4 个磁盘 raid md127 ext4,但由于大小,我不得不从mbr 转换为 gpt
- 这是我的主磁盘,因此不需要或不打算设置引导管理器
- 使用我日常使用的 ubuntu(因此:不使用外部救援盘)
- 使用 gparted、dd 和 mdadm
正如之前任何人所说的那样:零步应备份并且过程中总会出错,导致严重的数据丢失
备份
新突袭的设置
创建新的突袭
mdadm -v --create /dev/md127 --level=raid10 --raid-devices=4 /dev/sdb1 missing /dev/sde1 missing
(我发现布局很重要……第二和第四个似乎是默认‘近’突袭中的重复项)
- 设置 raid 的分区,我使用 gparted 在 md127 上设置 gpt,然后添加一个与旧分区大小相同或更大的新分区(ext4)
迁移
现在获取数据...我首先尝试使用 rsync ,它工作正常,但无法保留出生时间...使用 dd克隆从旧袭击到新袭击
dd if=/dev/md0 of=/dev/md127p1 bs=1M conv=notrunc,noerror,sync
等待
你可以通过将 USR1 发送到该进程来进行检查kill -s USR1 <pid>
修复 raid
gparted 是一个很棒的工具:你告诉它检查并修复分区,并只需点击几下鼠标即可将其调整为该磁盘的完整大小;)为该分区设置一个新的 uuid 并使用它来更新你的 fstab(更改 uuid)
将你的突袭存储在 conf 中
mdadm --examine --scan >> /etc/mdadm/mdadm.conf
并删除旧的
vim /etc/mdadm/mdadm.conf
- 如果你不在救援系统上,请重新启动
摧毁旧的
第一个失败,并将其添加到新的团队中
mdadm /dev/md0 --fail /dev/sdc1 --remove /dev/sdc1
然后在该设备上创建 gpt 并设置一个新的空分区
mdadm /dev/md127 --add /dev/sdc1
等待
你可以检查cat /proc/mdstat
停止第二个
mdadm --stop /dev/md0
然后在最后一个设备上创建 gpt 并再次设置一个新的空分区
mdadm /dev/md127 --add /dev/sdd1
再次等待