AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 43677
Accepted
Hans Malherbe
Hans Malherbe
Asked: 2009-07-22 10:20:07 +0800 CST2009-07-22 10:20:07 +0800 CST 2009-07-22 10:20:07 +0800 CST

将 Linux 软件 RAID 1 扩展到 RAID 10 的最佳方法

  • 772

mdadm似乎不支持将数组从级别 1 扩展到级别 10。

我在 RAID 1 中有两个磁盘。我想添加两个新磁盘并将阵列转换为四磁盘 RAID 10 阵列。

我目前的策略:

  1. 做好备份。
  2. 创建具有两个缺失磁盘的降级 4 磁盘 RAID 10 阵列。
  3. rsync the RAID 1 array with the RAID 10 array.
  4. fail and removeRAID 1 阵列中的一个磁盘。
  5. 将可用磁盘添加到 RAID 10 阵列并等待重新同步完成。
  6. 销毁 RAID 1 阵列并将最后一个磁盘添加到 RAID 10 阵列。

问题是第 5 步缺少冗余。

有没有更好的办法?

linux mdadm software-raid
  • 5 5 个回答
  • 24545 Views

5 个回答

  • Voted
  1. Best Answer
    Mark Amerine Turner
    2009-07-22T11:13:34+08:002009-07-22T11:13:34+08:00

    使用 linux softraid,您可以制作一个只有两个磁盘的 RAID 10 阵列。

    下面使用的设备名称:

    • md0是类型/级别 RAID1 的旧阵列。
    • md1是类型/级别 RAID10 的新阵列。
    • sda1并且sdb2是新的空分区(没有数据)。
    • sda2并且sdc1是旧分区(带有关键数据)。

    替换名称以适合您的用例。使用例如lsblk查看您当前的布局。

    0)备份,备份,备份,备份哦和备份

    1)创建新阵列(4 个设备:2 个现有,2 个缺失):

    mdadm -v --create /dev/md1 --level=raid10 --raid-devices=4 /dev/sda1 missing /dev/sdb2 missing
    

    请注意,在此示例中,布局sda1缺少对应项,并且sdb2缺少另一个对应项。此时您的数据md1不安全(在您添加缺失成员之前,它实际上是 RAID0)。

    要查看创建数组的布局和其他详细信息,请使用:

    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
    
    • 11
  2. user31229
    2010-01-10T04:59:03+08:002010-01-10T04:59:03+08:00

    遵循与 Mark Turner 相同的过程,但在创建 RAID 阵列时,请提及 2 个丢失的磁盘

    mdadm -v --create /dev/md1 --level=raid10 --raid-devices=4 /dev/sda1 missing /dev/sdb2 missing
    

    然后继续其他步骤。

    简而言之,创建总共 4 个磁盘(其中 2 个丢失)的 RAID10,重新同步,然后添加另外两个磁盘。

    • 9
  3. user75601
    2011-03-24T15:04:17+08:002011-03-24T15:04:17+08:00

    刚刚完成从两个 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
    

    上面的代码给出了一个缺少两个磁盘的可用阵列(如果您不使用整个磁盘,请添加分区号)。添加第三个磁盘后,它将开始同步。我在第三个完成同步之前添加了第四个磁盘。它显示为备用,直到第三个磁盘完成然后它开始同步。

    我的情况的步骤:

    1. 做好备份。

    2. 创建具有两个缺失磁盘的降级 4 磁盘 RAID 10 阵列(我们将缺失的磁盘称为 #2 和 4)。

    3. 告诉妻子不要更改/添加她关心的任何文件

    4. 故障并从 RAID 1 阵列中移除一个磁盘(磁盘 4)。

    5. 将物理盘区从 RAID 1 阵列移动到 RAID 10 阵列,使磁盘 2 为空。

    6. 终止活动的 RAID 1 阵列,将现在的空磁盘(磁盘 2)添加到 RAID 10 阵列,然后等待重新同步完成。

    7. 将从 RAID 1 中移除的第一个磁盘(磁盘 4)添加到 RAID 10 阵列。

    8. 让老婆去吧。

    在第 7 步,我认为驱动器 1、2或4 可能会失败(在磁盘 4 的重新同步期间)而不会终止阵列。如果驱动器 3 发生故障,则阵列上的数据将被吐司。

    • 6
  4. undefine
    2015-01-30T08:46:52+08:002015-01-30T08:46:52+08:00

    我用LVM做的。初始配置: - sda2、sdb2 - 并在顶部创建了 raid1 md1。sda1 和 sdb1 用于 /boot 分区的第二个 raid1。- md1 是卷组空间中的 pv,上面有一些 lvm。

    我添加了磁盘 sdc 和 sdd 并在 sda/sdb 上创建了分区。

    所以:

    1. 创建 md10 为:

      mdadm --create /dev/md10 --level raid10 --raid-devices=4 /dev/sdc2 缺少 /dev/sdd2

    2. 在其上扩展 vg:

      pvcreate /dev/md10 vgextend 空间 /dev/md10

    3. 将卷从 md1 移动到 md10:

      pvmove -v /dev/md1 /dev/md10

    (等待完成) 4. 减少卷组:

    vgreduce space /dev/md1
    pvremove /dev/md1
    
    1. 停止数组 md1:

      mdadm -S /dev/md1

    2. 将旧 md1 的磁盘添加到 md10:

      mdadm -a /dev/md10 /dev/sda2 /dev/sdb2

    3. 更新 /etc/mdadm/mdadm.conf 中的配置:

      mdadm -E --scan >>/dev/mdadm/mdadm.conf

    (并删除旧的 md1)

    一切都在实时系统上完成,活动卷用于 kvm ;)

    • 2
  5. Summer-Sky
    2016-07-09T22:34:58+08:002016-07-09T22:34:58+08:00

    我现在已将我的 raid1 移至 raid10,虽然此页面对我有所帮助,但上面的答案中缺少一些内容。特别是我的目标是保留 ext4 的出生时间。

    设置是:

    • 每种类型的 2 个 raid1 磁盘 msdos 和带有 ext4 分区的 md0 和带有 msdos 的 mbr
    • 2 个新磁盘成为新的主磁盘(大小相同)
    • 导致 4 个磁盘 raid md127 ext4 但由于大小我不得不从mbr 切换到 gpt
    • 它是我的主磁盘,因此不需要或不打算设置 bootmanager
    • 使用我的日常 ubuntu(所以:不使用外部救援光盘)
    • 使用 gparted、dd 和 mdadm

    正如任何人之前所说:零步骤应该是备份,并且在这个过程中总是会出现问题,导致极端的数据丢失

    1. 备份

    2. 新突袭的设置

      1. 创建一个新的团队

        mdadm -v --create /dev/md127 --level=raid10 --raid-devices=4 /dev/sdb1 missing /dev/sde1 missing
        

        (我发现布局很重要.. 第 2 和第 4 似乎是默认“近”突袭中的重复项)

      2. 设置 RAID 的分区我使用 gparted 在 md127 上设置 gpt,然后添加旧分区或更大大小的新分区 (ext4)
    3. 迁移

      1. 现在获取数据...我第一次尝试使用 rsync 工作但未能保持出生时间...使用 dd从旧的raid克隆到新的raid

        dd if=/dev/md0 of=/dev/md127p1 bs=1M conv=notrunc,noerror,sync
        

        等待它
        ,您可以通过将 USR1 发送到该进程来检查

        kill -s USR1 <pid>
        
      2. 修复raid
        gparted 是一个很棒的工具:你告诉它检查和修复分区,只需点击几下鼠标就可以将其调整到该磁盘的完整大小;)

      3. 为该分区设置一个新的 uuid 并用它更新您的 fstab(更改 uuid)

      4. 将您的团队存储在 conf 中

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

        并删除旧的

        vim /etc/mdadm/mdadm.conf 
        
      5. 如果您不在救援系统上,请重新启动
    4. 摧毁旧的

      1. 第一个失败并将其添加到新的团队中

        mdadm /dev/md0 --fail /dev/sdc1 --remove /dev/sdc1
        

        然后在该设备上制作 gpt 并设置一个新的空分区

        mdadm /dev/md127 --add /dev/sdc1
        

        等待它
        ,你可以检查

        cat /proc/mdstat
        
      2. 停止第二个

        mdadm --stop /dev/md0 
        

        然后在最后一个设备上制作 gpt 并再次设置一个新的空分区

        mdadm /dev/md127 --add /dev/sdd1
        

        再次等待

    • 1

相关问题

  • 多操作系统环境的首选电子邮件客户端

  • 你最喜欢的 Linux 发行版是什么?[关闭]

  • 更改 PHP 的默认配置设置?

  • 保护新的 Ubuntu 服务器 [关闭]

  • (软)Ubuntu 7.10 上的 RAID 6,我应该迁移到 8.10 吗?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve