Ubuntu 创建 RAID1 阵列

概述

目标:

  • 将两个,或两个以上的磁盘,创建 RAID 1 磁盘阵列

前置条件:

  • Ubuntu 20.04
  • 两个或以上物理硬盘,所有硬盘的容量最好保持一致

创建磁盘阵列

  1. 使用 fdisk 工具分别格式化这些硬盘(本例里,是 sdb 和 sdc)
# 列出所有磁盘信息
$ sudo fdisk -l 

# 建立分区
$ sudo fdisk /dev/sdb

# 然后依次输入
$ n (新建分区表)
$ p (主分区,然后根据提示操作)
$ w (保存分区信息)
  1. 创建 RAID1
    使用 mdadm 工具创建 RAID 陈列
$ sudo mdadm --create  --verbose /dev/md0 --level=1 --raid-devices=2 /dev/sdb1 /dev/sdc1
mdadm: Note: this array has metadata at the start and
    may not be suitable as a boot device.  If you plan to
    store '/boot' on this device please ensure that
    your boot-loader understands md/v1.x metadata, or use
    --metadata=0.90
mdadm: size set to 20953088K
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.

命令解释:

  • --create: 创建阵列
  • --verbose: 输入详细信息
  • /dev/md0: 创建后的阵列的设备名
  • level: 要创建的 RAID 的级别,这里使用模式 1
  • raid-devices: 指定 RAID 副本的磁盘数,在这里指定了 2 ,意思是平时有两个磁盘在工作。如果以后添加了第三块硬盘,那么第三块硬盘将作为备用磁盘。当工作中的两块磁盘有一块坏了,第三块将立刻启动,并将完好的一块的内容复制到新的盘中。

更多命令的参数,可以参考文件[链接]

以上命令完成磁盘阵列的创建。可以通过以下命令查看创建的进度:

$ cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] 
md0 : active raid1 sdc1[1] sdb1[0]
      20953088 blocks super 1.2 [2/2] [UU]
      [=======>.............]  resync = 35.3% (7397120/20953088) finish=1.1min speed=195512K/sec
      
unused devices: <none>

创建完毕后,信息如下,sdb1、sdc1 两个都在工作中。

$ cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] 
md0 : active raid1 sdc1[1] sdb1[0]
      20953088 blocks super 1.2 [2/2] [UU]
      
unused devices: <none>

也可以通过以下命令查看工作状态:

$ sudo mdadm --detail /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Wed Dec  2 16:11:51 2020
        Raid Level : raid1
        Array Size : 20953088 (19.98 GiB 21.46 GB)
     Used Dev Size : 20953088 (19.98 GiB 21.46 GB)
      Raid Devices : 2
     Total Devices : 2
       Persistence : Superblock is persistent

       Update Time : Wed Dec  2 16:13:40 2020
             State : clean 
    Active Devices : 2
   Working Devices : 2
    Failed Devices : 0
     Spare Devices : 0

Consistency Policy : resync

              Name : raid:0  (local to host raid)
              UUID : f326d47f:8b40c971:b1f17002:afe3a918
            Events : 17

    Number   Major   Minor   RaidDevice State
       0       8       17        0      active sync   /dev/sdb1
       1       8       33        1      active sync   /dev/sdc1
  1. 创建文件系统并挂载
    使用上面的命令创建完阵列了之后,就可以当普通存储使用了。
# 创建文件系统
$ sudo mkfs.ext4 -F /dev/md0

# 挂载存储到 /opt/data 目录
$ sudo mount /dev/md0 /opt/data
  1. 保存阵列布局
    完成以上步骤后,将阵列保存下来,在下次启动的时候自动加载,因此需要将阵列信息保存到 /etc/mdadm/mdadm.conf 文件中。可以通过以下命令来自动扫描活动阵列并追加文件:
$ sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf

更新初始RAM文件系统(initramfs)

$ sudo update-initramfs -u
  1. 保存挂截信息,修改 /etc/fstab 文件,在文件最后加入以下内容:
/dev/md0    /opt/data   ext4    defaults    0    0

更换磁盘阵列硬盘

一般情况下,如果磁盘阵列坏了一块,那么另一块的寿命应该也不长了,因此最好两块都换。更换的过程如下:

  1. 查看磁盘工作状态
$ cat /proc/mdstat

Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10] 
md0 : active raid1 sdc1[1]
      20953088 blocks super 1.2 [2/1] [_U]
      
unused devices: <none>

可以看到,原本 sdb1、sdc1 两个磁盘,只有 sdc1 在工作了。

为了演示,可以通过命令 sudo mdadm --manage /dev/md0 --fail /dev/sdb1 将指定的磁盘设为已失败。

  1. 删除损坏硬盘
$ sudo mdadm --manage /dev/md0 --remove /dev/sdb1
  1. 添加新硬盘
$ sudo mdadm --manage /dev/md0 --add /dev/sdd1

添加完新硬盘之后,RAID 会将原来完好的那块硬盘的所有资料镜像拷贝到新的硬盘,组成新 RAID。这个过程可能比较长,可以通过以下命令查看进度:

$ cat /proc/mdstat
Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10] 
md0 : active raid1 sdd1[2] sdc1[1]
      20953088 blocks super 1.2 [2/1] [_U]
      [===================>.]  recovery = 99.6% (20883392/20953088) finish=0.0min speed=59703K/sec

等待同步完毕后,再次查看状态,可以看到两个已经在工作了:

$ cat /proc/mdstat
Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10] 
md0 : active raid1 sdd1[2] sdc1[1]
      20953088 blocks super 1.2 [2/2] [UU]
  1. 继续添加新硬盘

可以向这个阵列布局再添加一块新硬盘:

$ sudo mdadm --manage /dev/md0 --add /dev/sdb1

此时阵列的工作状态如下:

$ cat /proc/mdstat
Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10] 
md0 : active raid1 sdb1[3](S) sdd1[2] sdc1[1]
      20953088 blocks super 1.2 [2/2] [UU]
      
unused devices: <none>

或者通过以下命令查看更详细的状态:

$ sudo mdadm --detail /dev/md0

/dev/md0:
           Version : 1.2
     Creation Time : Mon Nov 30 14:22:01 2020
        Raid Level : raid1
        Array Size : 20953088 (19.98 GiB 21.46 GB)
     Used Dev Size : 20953088 (19.98 GiB 21.46 GB)
      Raid Devices : 2
     Total Devices : 3
       Persistence : Superblock is persistent

       Update Time : Mon Nov 30 23:43:58 2020
             State : clean 
    Active Devices : 2
   Working Devices : 3
    Failed Devices : 0
     Spare Devices : 1

Consistency Policy : resync

              Name : raid:0  (local to host raid)
              UUID : 2cd8dc59:68e81ae4:7b2635e8:096721b5
            Events : 65

    Number   Major   Minor   RaidDevice State
       2       8       49        0      active sync   /dev/sdd1
       3       8       17        1      active sync   /dev/sdc1

       4       8       33        -      spare   /dev/sdb1

可以看到 sdb1 处于 spare 状态,也就是备用状态。平时向 md0 写入数据的时候,只会备份到 sdc1、sdd1 里,不会写入到 sdb1 里。当 sdc1 和 sdd1 其中有一块硬盘损坏时,系统会自动启用 sdb1,并将所有资料同步到 sdb1 里。

迁移阵列

如果新组装了一台服务器,想将上一个服务器的阵列迁移到新服务器里,可以通过以下方法完成。

  1. 将硬件添加到新服务器上,然后使用 fdisk 查看磁盘状态。
$ sudo fdisk -l

Disk /dev/md127: 19.101 GiB, 21455962112 bytes, 41906176 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

可以看到系统已经识别了磁盘阵列信息,但是阵列的标识不对。

  1. 保存磁盘阵列信息
$ sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf
ARRAY /dev/md/raid:0 metadata=1.2 name=raid:0 UUID=6b08dfa9:ece3957c:f92bcf78:fd2f450f

修改 /etc/mdadm/mdadm.conf 文件,把 /dev/md/raid:0 改成 /dev/md0,保存。

  1. 更新初始RAM文件系统(initramfs)
$ sudo update-initramfs -u
  1. 挂载磁盘

保存挂截信息,修改 /etc/fstab 文件,在文件最后加入以下内容:

/dev/md0    /opt/data   ext4    defaults    0    0
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,491评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,856评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,745评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,196评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,073评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,112评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,531评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,215评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,485评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,578评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,356评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,215评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,583评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,898评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,497评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,697评论 2 335

推荐阅读更多精彩内容