4

使用mdadm设置RAID

 3 years ago
source link: https://www.lujun9972.win/blog/2018/09/10/%E4%BD%BF%E7%94%A8mdadm%E8%AE%BE%E7%BD%AEraid/index.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

使用mdadm设置RAID

RAID简介

RAID是一种使用磁盘驱动器的方法,它将一组磁盘驱动器用某种逻辑方式联系起来,作为一个逻辑磁盘驱动器来使用的.

比较常用的的RAID级别包括:

级别 说明 RAID0 条带化,数据被拆分到多个驱动器中,但并没有数据镜像或校验信息 RAID1 镜像化,完全磁盘镜像,在独立的磁盘上创建数据的两份拷贝。这个级别提供最好的数据安全,但写速度慢,接代价最昂贵 RAID5 分布式奇偶校验,将奇偶校验信息分布在多个磁盘上,每个磁盘上的校验信息都通过其他磁盘上的数据来构建 RAID6 双分布式奇偶校验,和 RAID 5 相似但它有两个分布式奇偶校验。大多用在大数量的阵列中。我们最少需要4个驱动器,即使有2个驱动器发生故障,我们依然可以更换新的驱动器后重建数据。 RAID10 镜像+条带,RAID 10 可以被称为1 + 0或0 +1。它将做镜像+条带两个工作。在 RAID 10 中首先做镜像然后做条带。在 RAID 01 上首先做条带,然后做镜像。RAID 10 比 01 好。

mdadm: RAID设置工具

madam命令是Linux下用于构建、管理和监控RAID阵列(也被称为md设备)的工具. 它的语法为

mdadm [模式] [设备] [选项]

其中模式有下面几个:

--create使用空闲设备创建新阵列,每个设备具有元数据快 --assemble将设备加入一个已经定义好的磁盘阵列 --build创建一个没有元数据块的磁盘阵列 --manage管理已经存储在阵列中的设备 --misc查询或修改磁盘阵列中相关设备的信息 --grow改变阵列中每个设备使用的容量或阵列中设备的数量 --incremental根据需要在阵列中添加/删除设备 --monitor监控一个或多个阵列,上报指定事件

mdadm操作说明

创建RAID阵列

我们可以通过 mdadm 命令来创建软件RAID,比如下面命令可以创建一个RAID5

sudo mdadm --create /dev/md0 -a yes -l 5 -n 3 /dev/sdb /dev/sdc /dev/sdd

--create /dev/md0创建一个新RAID,名字叫做 /dev/md0 -a yes自动在/dev/下创建对应的RAID阵列设备 -l 5指定RAID级别为5 -n 3指定硬盘数量。表示用三块硬盘来创建RAID5,分别为 /dev/sdb, /dev/sdc, /dev/sdd

我们会发现 /dev 下出现了一个名为 md0 的设备

ls -l /dev/md0
brw-rw----. 1 root disk 9, 0 Sep 11 09:40 /dev/md0

自动启用RAID

在创建好RAID以后,可以将RAID信息保存到 /etc/mdadm.conf 文件中,这样在下次操作系统重新启动时,系统会自动加载这个文件来启用RAID

sudo mdadm -D --scan >/etc/mdadm.conf
cat /etc/mdadm.conf
ARRAY /dev/md0 metadata=1.2 name=MiWiFi-R3-srv:0 UUID=ece6c656:c9999ff6:9d17c0ec:08a0e3af

查看RAID阵列信息

创建好RAID阵列后,我们可以通过 mdadm --misc 模式来查看刚创建好的RAID的详细信息

mdadm --misc --detail /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Tue Sep 11 09:40:45 2018
        Raid Level : raid5
        Array Size : 16758784 (15.98 GiB 17.16 GB)
     Used Dev Size : 8379392 (7.99 GiB 8.58 GB)
      Raid Devices : 3
     Total Devices : 3
       Persistence : Superblock is persistent

       Update Time : Tue Sep 11 10:03:35 2018
             State : clean 
    Active Devices : 3
   Working Devices : 3
    Failed Devices : 0
     Spare Devices : 0

            Layout : left-symmetric
        Chunk Size : 512K

Consistency Policy : resync

              Name : MiWiFi-R3-srv:0  (local to host MiWiFi-R3-srv)
              UUID : ece6c656:c9999ff6:9d17c0ec:08a0e3af
            Events : 18

    Number   Major   Minor   RaidDevice State
       0       8       16        0      active sync   /dev/sdb
       1       8       32        1      active sync   /dev/sdc
       3       8       48        2      active sync   /dev/sdd

或者我们也可以通过 /proc/mdstat 文件来查看RAID的简洁信息

cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4] 
md0 : active raid5 sdd[3] sdc[1] sdb[0]
      16758784 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]
      
unused devices: <none>

使用RAID阵列

在创建好RAID阵列后,我们就不能直接操作组成阵列的磁盘了,否则会损坏刚创建好的RAID阵列。 我们通过 /dev/md0 这个设备来进行文件格式化和挂载

set -x
exec 2>&1
mkfs.xfs -f /dev/md0
mount /dev/md0 /mnt
mount |grep md0
+ mkfs.xfs -f /dev/md0
meta-data=/dev/md0               isize=512    agcount=16, agsize=261760 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=4188160, imaxpct=25
         =                       sunit=128    swidth=256 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=8 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
+ mount /dev/md0 /mnt
+ mount
+ grep md0
/dev/md0 on /mnt type xfs (rw,relatime,seclabel,attr2,inode64,sunit=1024,swidth=2048,noquota)

关闭RAID

我们可以通过 mdadm --misc 模式来关闭RAID。这会释放所有资源

在关闭RAID之前需要先卸载RAID:

sudo umount /mnt

然后关闭RAID

sudo mdadm --misc --stop /dev/md0

关闭RAID后,我们可以通过 mdadm --misc --zero-superblock 来清空磁盘中RAID阵列的超级块信息。 清空就能够正常使用这些磁盘了

mdadm --misc --zero-superblock /dev/sdb
mdadm --misc --zero-superblock /dev/sdc
mdadm --misc --zero-superblock /dev/sdd

模拟RAID故障

我们可以通过 mdadm --manage /dev/md0 --fail 来将某块磁盘设置成故障状态

sudo mdadm /dev/md0 -f /dev/sdd 2>&1
mdadm: set /dev/sdd faulty in /dev/md0

然后我们再来查一下这个RAID的信息

sudo mdadm --misc --detail /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Tue Sep 11 10:32:21 2018
        Raid Level : raid5
        Array Size : 16758784 (15.98 GiB 17.16 GB)
     Used Dev Size : 8379392 (7.99 GiB 8.58 GB)
      Raid Devices : 3
     Total Devices : 3
       Persistence : Superblock is persistent

       Update Time : Tue Sep 11 10:35:12 2018
             State : clean, degraded 
    Active Devices : 2
   Working Devices : 2
    Failed Devices : 1
     Spare Devices : 0

            Layout : left-symmetric
        Chunk Size : 512K

Consistency Policy : resync

              Name : MiWiFi-R3-srv:0  (local to host MiWiFi-R3-srv)
              UUID : c031d0c9:998a4e86:5cf90e71:52b229cd
            Events : 20

    Number   Major   Minor   RaidDevice State
       0       8       16        0      active sync   /dev/sdb
       1       8       32        1      active sync   /dev/sdc
       -       0        0        2      removed

       3       8       48        -      faulty   /dev/sdd

你会发现 /dev/sdd 的状态现在变成了 faulty, 但是RAID5这个级别是允许一块磁盘损坏而不造成数据损坏的。

移除RAID阵列中的磁盘

sudo mdadm --manage /dev/md0 --remove /dev/sdd

更换新磁盘

set -x
exec 2>&1
sudo mdadm --manage /dev/md0 --add /dev/sdd
sudo mdadm --misc --detail /dev/md0
+ sudo mdadm --manage /dev/md0 --add /dev/sdd
mdadm: added /dev/sdd
+ sudo mdadm --misc --detail /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Tue Sep 11 10:32:21 2018
        Raid Level : raid5
        Array Size : 16758784 (15.98 GiB 17.16 GB)
     Used Dev Size : 8379392 (7.99 GiB 8.58 GB)
      Raid Devices : 3
     Total Devices : 3
       Persistence : Superblock is persistent

       Update Time : Tue Sep 11 10:40:41 2018
             State : clean, degraded 
    Active Devices : 2
   Working Devices : 3
    Failed Devices : 0
     Spare Devices : 1

            Layout : left-symmetric
        Chunk Size : 512K

Consistency Policy : resync

              Name : MiWiFi-R3-srv:0  (local to host MiWiFi-R3-srv)
              UUID : c031d0c9:998a4e86:5cf90e71:52b229cd
            Events : 22

    Number   Major   Minor   RaidDevice State
       0       8       16        0      active sync   /dev/sdb
       1       8       32        1      active sync   /dev/sdc
       -       0        0        2      removed

       3       8       48        -      spare   /dev/sdd

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK