Linux命令-mdadm管理磁盘阵列组
文章目录
概要
一 磁盘阵列是什么?
二 RAID的级别
RAID 0
RAID 1
RAID 5
RAID10
三 命令介绍
四 语法格式
五 基本参数
六 参考实例
创建RAID 0磁盘阵列组
创建RAID 1磁盘阵列组
创建RAID 5磁盘阵列组
创建RAID 10磁盘阵列组
删除磁盘阵列
停止磁盘阵列
激活磁盘阵列
命令总结
概要
在linux里,mdadm是制作软raid的命令,这里我们就先了解一下什么是磁盘阵列以及几个RAID的级别,然后再聊命令,这样就更容易理解命令的各个参数是代表着什么含义。
一 磁盘阵列是什么?
磁盘阵列的英文是Redundant Arrays of Independent Disks,缩写既是RAID,有“独立磁盘构成具有冗余能力的阵列”之意。磁盘阵列是由很多磁盘,以硬件(RAID卡)或软件(MDADM)形式组合成一个容量巨大的磁盘组,利用多个磁盘组合在一起,提升整个磁盘系统效能。
二 RAID的级别
这里只介绍比较常用的RAID 0、RAID 1、RAID 5、和RAID 10的概念。
注意RAID10并不是读作RAID(十),而是RAID(一零)
RAID 0
RAID 0原理是把多块物理磁盘设备(至少需要两块)通过硬件和软件的方式串联到一起,组成一个大的卷组,并将数据依次写入各个物理磁盘中。这样一来,磁盘设备的读写性能将会提升数倍(取决于磁盘数量);若有任意一块磁盘发生故障,将会导致整个系统的数据都受到了破坏。简单来说,RAID 0 技术能够有效提升磁盘数据的吞吐速度(读写),但不具备数据备份和修复磁盘的能力。如下图所示,数据被分别写入到不同的磁盘设备中,最终实现提升读取和写入速度的效果。
RAID 1
RAID 1也被称为磁盘镜像(至少需要两块),原理是把一个磁盘的数据镜像到另一个磁盘上,也就是说数据在写入一块磁盘的同时,会在另一块闲置的磁盘上生成镜像文件,在不影响性能情况下最大限度的保证系统的可靠性和可修复性上,只要系统中任何一对镜像盘中至少有一块磁盘可以使用,甚至可以在一半数量的硬盘出现问题时系统都可以正常运行,当一块硬盘失效时,系统会忽略该硬盘,转而使用剩余的镜像盘读写数据,具备很好的磁盘冗余能力。虽然这样对数据来讲绝对安全,但是成本也会明显增加,磁盘利用率为50%,以四块80GB容量的硬盘来讲,可利用的磁盘空间仅为160GB。
RAID 5
RAID 5技术是把磁盘设备的数据奇偶校验信息保存到每个磁盘设备中。这样的优势是就算有一块磁盘设备损坏了,也可通过奇偶校验信息尝试恢复重建损坏的数据。RAID 5这样的技术特性兼顾了磁盘设备的读写速度,数据安全性以及存储成本问题。而RAID 5至少是由三块磁盘组成的,使用的是磁盘切割技术,相比于RAID 1级别,RAID 5的磁盘使用率有三分之二;效率更高,存储成本也随之降低,需要注意的是无论有多少块磁盘组RAID 5,最大程度只能存在坏一块的可能。
如下图所示,Parity就是存储数据时的奇偶校验信息。
RAID10
RIAD 10原理实际上是RAID 1+RAID 0技术的一个结合,RAID 10是至少需要到四块磁盘组成的,其中先分别将两两制成RAID 1的磁盘阵列,以保证数据的安全性;然后再对两个RAID 1磁盘阵列实施RAID 0技术,进一步提高磁盘设备的读写速度。从理论方面来说,只要坏的位置不是同个阵列的磁盘,那么最多可以损坏一半的磁盘设备而不丢失数据。由于RAID 10技术继承了RAID 0的高读写速度和RAID 1的数据安全性,在不考虑成本的情况下RAID 10的性能也超过了RAID 5,因此当前成为较为广泛的一种存储技术。
三 命令介绍
先来看下mdadm的帮助文档
NAME
mdadm - manage MD devices aka Linux Software RAID
mdadm(multiple devices admin)命令的主要功能是用来管理RAID磁盘阵列组,linux系统中实现软RAID设备的命令,可以进行创建,调整,监控,删除等全套管理操作。
四 语法格式
mdadm命令的格式是:mdadm 【模式】【磁盘阵列】【参数】设备名
SYNOPSIS
mdadm [mode] <raiddevice> [options] <component-devices>
五 基本参数
mdadm的参数有以下内容,因为此命令的参数较多,以表格形式呈现
-A | 激活预先配置的磁盘阵列 |
-B | 创建一个没有超级快的RAID设备 |
-C | 创建一个新的阵列组 |
-F | 选择监控模式 |
-G | 改变RAID设备的大小或形态 |
-s | 扫描配置文件或/proc/mdstat得到阵列缺失部分 |
-D | 打印磁盘阵列设备的详细信息 |
-f | 将设备状态定为故障 |
-a | 添加新的设备到阵列组 |
-r | 移除设备 |
-l | 设定磁盘阵列的级别 |
-n | 指定阵列成员(分区/磁盘)的数量 |
-x | 指定阵列中备用盘的数量 |
-c | 设定阵列的块大小,单位为kb |
-S | 停止阵列组 |
六 参考实例
创建RAID 0磁盘阵列组
需求:创建一个RAID 0的磁盘阵列组,使用两块磁盘,不使用备用盘;
模拟过程:需要先把虚拟机的磁盘添加两块。
[root@localhost ~]# ll /dev/sd*
brw-rw----. 1 root disk 8, 0 3月 1 13:03 /dev/sda
brw-rw----. 1 root disk 8, 1 3月 1 13:03 /dev/sda1
brw-rw----. 1 root disk 8, 2 3月 1 13:03 /dev/sda2
brw-rw----. 1 root disk 8, 16 3月 1 13:03 /dev/sdb
brw-rw----. 1 root disk 8, 32 3月 1 13:03 /dev/sdc
[root@localhost ~]# mdadm -Cv /dev/md0 -l 0 -n 2 /dev/sdb /dev/sdc #创建磁盘阵列组
mdadm: chunk size defaults to 512K
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
[root@localhost ~]# mdadm -D /dev/md0 #查看状态
/dev/md0:
......Number Major Minor RaidDevice State0 8 16 0 active sync /dev/sdb1 8 32 1 active sync /dev/sdc
[root@localhost ~]# mdadm -Ds > /etc/mdadm.conf #生成配置文件
[root@localhost ~]# ll /dev/md0
brw-rw----. 1 root disk 9, 0 3月 1 13:06 /dev/md0
[root@localhost ~]# mkfs.xfs /dev/md0 #格式化设备
[root@localhost ~]# mkdir /raid0
[root@localhost ~]# mount /dev/md0 /raid0 #挂载到/raid0目录
[root@localhost ~]# df -h /raid0/
文件系统 容量 已用 可用 已用% 挂载点
/dev/md0 40G 33M 40G 1% /raid0
创建RAID 1磁盘阵列组
需求:创建RAID 1磁盘阵列组,添加三块盘,两块作为RAID 1镜像使用,一块作为备用盘,模拟磁盘出现故障,备用盘自动替换故障盘,将故障盘移除,并添加新的磁盘恢复到2+1的状态。
[root@localhost ~]# mdadm -Cv /dev/md1 -l 1 -n 2 -x 1 /dev/sd[b-d] #创建raid 1阵列
......
mdadm: array /dev/md1 started.
#将raid1信息写入到配置文件中
[root@localhost ~]# mdadm -Ds /dev/md1> /etc/mdadm.conf
#查看md1的状态
[root@localhost ~]# mdadm -D /dev/md1
/dev/md1:
......Number Major Minor RaidDevice State0 8 16 0 active sync /dev/sdb1 8 32 1 active sync /dev/sdc2 8 48 - spare /dev/sdd
#将设备格式化,发现有现有的xfs文件系统,可以直接加个-f参数强制格式化
[root@localhost ~]# mkfs.xfs /dev/md1
mkfs.xfs: /dev/md1 appears to contain an existing filesystem (xfs).
mkfs.xfs: Use the -f option to force overwrite.
[root@localhost ~]# mkfs.xfs -f /dev/md1
[root@localhost ~]# mkdir /raid1
#挂载设备
[root@localhost ~]# mount /dev/md1 /raid1
#提前准备测试文件
[root@localhost ~]# touch /raid1/{1..6}.txt
[root@localhost ~]# cp /etc/passwd /raid1/passwd.txt
模拟损坏一块磁盘,让备用盘自动备份好数据 ;
#模拟损坏了一块磁盘
[root@localhost ~]# mdadm -f /dev/md1 /dev/sdb
mdadm: set /dev/sdb faulty in /dev/md1
#查看状态,发现备用盘正在恢复数据
[root@localhost ~]# mdadm -D /dev/md1
/dev/md1:
......
Consistency Policy : resyncRebuild Status : 10% complete #正在重新一对一恢复Name : localhost.localdomain:1 (local to host localhost.localdomain)UUID : 12b2442b:3c9cc994:501eee5f:e8de8a15Events : 20Number Major Minor RaidDevice State2 8 48 0 spare rebuilding /dev/sdd1 8 32 1 active sync /dev/sdc0 8 16 - faulty /dev/sdb
#重新将扫描后的设备信息写入到文件
[root@localhost ~]# mdadm -Dsv > /etc/mdadm.conf
#查看数据是否出现丢失
[root@localhost ~]# ll /raid1/
总用量 4
-rw-r--r--. 1 root root 0 3月 1 13:35 1.txt
-rw-r--r--. 1 root root 0 3月 1 13:35 2.txt
-rw-r--r--. 1 root root 0 3月 1 13:35 3.txt
-rw-r--r--. 1 root root 0 3月 1 13:35 4.txt
-rw-r--r--. 1 root root 0 3月 1 13:35 5.txt
-rw-r--r--. 1 root root 0 3月 1 13:35 6.txt
-rw-r--r--. 1 root root 2317 3月 1 13:35 passwd.txt
[root@localhost ~]# head -10 /raid1/passwd.txt
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
......
移除损坏的磁盘,并且重新添加一块热备盘到raid 1磁盘阵列中;
#移除损坏数据的磁盘
[root@localhost ~]# mdadm -r /dev/md1 /dev/sdb
mdadm: hot removed /dev/sdb from /dev/md1
[root@localhost ~]# mdadm -D /dev/md1
/dev/md1:
......Number Major Minor RaidDevice State2 8 48 0 active sync /dev/sdd1 8 32 1 active sync /dev/sdc
#重新添加一块热备盘
[root@localhost ~]# mdadm -a /dev/md1 /dev/sde
mdadm: added /dev/sde
#查看状态
[root@localhost ~]# mdadm -D /dev/md1
/dev/md1:
......Number Major Minor RaidDevice State2 8 48 0 active sync /dev/sdd1 8 32 1 active sync /dev/sdc3 8 64 - spare /dev/sde
到这里raid 1阵列已经配置好了。
创建RAID 5磁盘阵列组
需求:创建RIAD 5磁盘阵列组,使用3块磁盘+1块备用盘,并且模拟后续还需要多加1块磁盘到阵列组。
[root@localhost ~]# mdadm -Cv /dev/md5 -l 5 -n 3 -x 1 -c 32 /dev/sd[b-e] #创建磁盘阵列
......
mdadm: array /dev/md5 started.
[root@localhost ~]# mdadm -D /dev/md5 #查看状态
/dev/md5:
......Number Major Minor RaidDevice State0 8 16 0 active sync /dev/sdb1 8 32 1 active sync /dev/sdc4 8 48 2 spare rebuilding /dev/sdd3 8 64 - spare /dev/sde
[root@localhost ~]# mdadm -Ds > /etc/mdadm.conf #写入配置文件
#格式化设备
[root@localhost ~]# mkfs.xfs -f /dev/md5
[root@localhost ~]# mkdir /raid5
#挂载到/raid5目录
[root@localhost ~]# mount /dev/md5 /raid5
#添加一些数据进去
[root@localhost ~]# cp /etc/passwd /raid5/passwd
[root@localhost ~]# cp /etc/hosts /raid5/hosts
加一块磁盘 扩展raid 5磁盘阵列;
#取消挂载开始扩展raid5
[root@localhost ~]# umount /dev/md5
[root@localhost ~]# mdadm -G /dev/md5 -n 4 -c 32
#重新写入信息到配置文件中
[root@localhost ~]# mdadm -Ds > /etc/mdadm.conf
[root@localhost ~]# mdadm -D /dev/md5
/dev/md5:
......Layout : left-symmetricChunk Size : 32KConsistency Policy : resyncReshape Status : 16% complete #正在扩展中Delta Devices : 1, (3->4)Name : localhost.localdomain:5 (local to host localhost.localdomain)UUID : 5b3697cf:57b4eb6d:8828ec0f:5ce38181Events : 48Number Major Minor RaidDevice State0 8 16 0 active sync /dev/sdb1 8 32 1 active sync /dev/sdc4 8 48 2 active sync /dev/sdd3 8 64 3 active sync /dev/sde
#使用这个命令可以看到是哪几个磁盘组了阵列
[root@localhost ~]# lsblk
......
sdb 8:16 0 20G 0 disk
└─md5 9:5 0 40G 0 raid5
sdc 8:32 0 20G 0 disk
└─md5 9:5 0 40G 0 raid5
sdd 8:48 0 20G 0 disk
└─md5 9:5 0 40G 0 raid5
sde 8:64 0 20G 0 disk
└─md5 9:5 0 40G 0 raid5
#重新挂载后,数据还存在,并且可以继续写入内容
[root@localhost ~]# mount /dev/md5 /raid5
[root@localhost ~]# ll /raid5/
总用量 8
-rw-r--r--. 1 root root 158 3月 1 13:59 hosts
-rw-r--r--. 1 root root 2317 3月 1 13:59 passwd
[root@localhost ~]# touch /raid5/{1..5}.txt
[root@localhost ~]# !ll
ll /raid5/
总用量 8
到这里raid 5的配置实验已经结束了。
创建RAID 10磁盘阵列组
需求:创建RAID 10磁盘阵列,需要用到四块磁盘,并且增加一块备用盘,模拟如果坏掉了一块磁盘,将磁盘移除后,重新添加一块备用盘。
[root@localhost ~]# mdadm -Cv /dev/md10 -l 10 -n 4 -x 1 /dev/sd[b-f] #创建raid10
mdadm: layout defaults to n2
mdadm: layout defaults to n2
mdadm: chunk size defaults to 512K
mdadm: size set to 20954112K
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md10 started.
[root@localhost ~]# mdadm -Ds > /etc/mdadm.conf #将信息写入到配置文件里
[root@localhost ~]# mkfs.xfs /dev/md10
meta-data=/dev/md10 isize=512 agcount=16, agsize=654720 blks= sectsz=512 attr=2, projid32bit=1= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=10475520, imaxpct=25= sunit=128 swidth=256 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=5120, version=2= sectsz=512 sunit=8 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@localhost ~]# mkdir /raid10
[root@localhost ~]# mount /dev/md10 /raid10 #挂载
模拟损坏了一块磁盘,让备份盘自动恢复数据;
[root@localhost ~]# mdadm -f /dev/md10 /dev/sdb #模拟损坏一块盘
mdadm: set /dev/sdb faulty in /dev/md10
[root@localhost ~]# mdadm -D /dev/md10
/dev/md10:Version : 1.2Creation Time : Wed Mar 1 14:21:12 2023Raid Level : raid10Array Size : 41908224 (39.97 GiB 42.91 GB)Used Dev Size : 20954112 (19.98 GiB 21.46 GB)Raid Devices : 4Total Devices : 5Persistence : Superblock is persistentUpdate Time : Wed Mar 1 14:24:25 2023State : clean, degraded, recovering Active Devices : 3Working Devices : 4Failed Devices : 1Spare Devices : 1Layout : near=2Chunk Size : 512KConsistency Policy : resyncRebuild Status : 12% complete #备用盘正在自动恢复中Name : localhost.localdomain:10 (local to host localhost.localdomain)UUID : 5d88661b:3c2b4c65:066fefe1:e3a6ce41Events : 26Number Major Minor RaidDevice State4 8 80 0 spare rebuilding /dev/sdf1 8 32 1 active sync set-B /dev/sdc2 8 48 2 active sync set-A /dev/sdd3 8 64 3 active sync set-B /dev/sde0 8 16 - faulty /dev/sdb
移除磁盘后重新添加一块备用盘;
[root@localhost ~]# mdadm -r /dev/md10 /dev/sdb
mdadm: hot removed /dev/sdb from /dev/md10
#重新添加一块备用盘
[root@localhost ~]# mdadm -a /dev/md10 /dev/sdb
mdadm: added /dev/sdb
#重新写入到配置文件里
[root@localhost ~]# mdadm -Ds > /etc/mdadm.conf
[root@localhost ~]# mdadm -D /dev/md10
/dev/md10:
......Number Major Minor RaidDevice State4 8 80 0 active sync set-A /dev/sdf1 8 32 1 active sync set-B /dev/sdc2 8 48 2 active sync set-A /dev/sdd3 8 64 3 active sync set-B /dev/sde5 8 16 - spare /dev/sdb
停止阵列,再重新激活;
[root@localhost ~]# umount /dev/md10
[root@localhost ~]# mdadm -Ss /dev/md10
mdadm: stopped /dev/md10
[root@localhost ~]# mdadm -A /dev/md10
mdadm: /dev/md10 has been started with 4 drives and 1 spare.
[root@localhost ~]# mount /dev/md10 /raid10
到这里raid10的配置已经结束了。
删除磁盘阵列
删除磁盘阵列的过程中需要注意的是,得先取消挂载后,将磁盘停止了,然后再逐个清空磁盘的数据,这个操作建议只在实验中进行,生产环境请勿随意删除磁盘阵列!
[root@localhost ~]# umount /dev/md10
[root@localhost ~]# rm -rf /etc/mdadm.conf
[root@localhost ~]# mdadm -Ss /dev/md10
mdadm: stopped /dev/md10
[root@localhost ~]# mdadm --zero-superblock /dev/sdb
[root@localhost ~]# mdadm --zero-superblock /dev/sdc
[root@localhost ~]# mdadm --zero-superblock /dev/sde
[root@localhost ~]# mdadm --zero-superblock /dev/sdf
[root@localhost ~]# mdadm --zero-superblock /dev/sdd
停止磁盘阵列
在创建好在磁盘阵列后,若不使用,可以使用-S参数停止。
[root@localhost ~]# mdadm -Ss /dev/md10
mdadm: stopped /dev/md10
激活磁盘阵列
需要用到磁盘阵列时,将之前配置好的,重新激活就行了。
[root@localhost ~]# mdadm -A /dev/md10
mdadm: /dev/md10 has been started with 4 drives and 1 spare.
命令总结
mdadm的内容其实是很多的,因为主要还是用来创建RAID和管理的,所以需要将几个RAID级别都演示一下,当然可以选择自己需要用到的raid去反复观看。若觉得内容还行的,可以点赞支持一下!
Linux命令-mdadm管理磁盘阵列组相关推荐
- Linux命令-磁盘管理(二)
Linux命令-磁盘管理(二) Linux mmount命令 Linux mmount命令用于挂入MS-DOS文件系统. mmount为mtools工具指令,可根据[mount参数]中的设置,将磁盘内 ...
- linux命令行模式kvm,Linux命令行管理KVM虚拟机【一】 | C/C++程序员之家
Linux命令行管理KVM虚拟机,几个常见的Linux-KVM虚拟机 管理命令,保存备用,方便快速部署搭建Linux开发环境,搞来搞去还是Linux下虚拟化好使,方便Linux和Win! virsh ...
- linux命令 权限管理 chown 改变文件的所有者,组,
**只能是管理员root去操作这个命令 ** 改变文件的所属用户 chown命令 chown lyj /usr/local/a.txt 将a.txt改为属于lyj这个用户 改变文件的所属组 chgrp ...
- linux 命令行管理,Linux命令行界面下的用户和组的管理
-r 此 参数是用来建立系统帐号.的 UID 会比定义在系统档上/etc/login.defs. 的 UID_MIN 来的小.注意 useradd 此法所建立的帐号 groupadd创建用户组: # ...
- Linux命令----用户管理
修改用户密码: sudo passwd (当前)用户名 [sudo是super user do的简写,passwd是password的简写] 显示当前正在操作系统的用户:whoami 显示当前登录系统 ...
- linux命令-文件目录管理
一.文件/目录查询结果显示 ls 显示文件/目录基本列表 **常用的选项有: ** $ ls -F #轻松区分文件和目录,目录的最后有"/" $ ls -a #显示隐藏文件 $ l ...
- 如何用Linux命令行管理网络:11个你必须知道的命令
本文由 极客范 - jerrylee 翻译自 Chris Hoffman.欢迎加入极客翻译小组,同我们一道翻译与分享.转载请参见文章末尾处的要求. 无论你是要下载文件.诊断网络问题.管理网络接口,还是 ...
- Linux命令 磁盘管理——了解磁盘、磁盘分区
了解磁盘 电脑硬盘是计算机最主要的存储设备.硬盘(港台称之为硬碟,英文名:Hard Disk Drive, 简称HDD 全名温彻斯特式硬盘)由一个或者多个铝制或者玻璃制的碟片组成.这些碟片外覆盖有铁磁 ...
- 实施工程师常用linux命令,009Linux管理日常使用的基本命令
一.日常基本的命令 1.date 显示日期 2.cal 日历 3.bc 计算器 4.ctrl+c 中断当前操作 5.ctrl+d 结束输入 6.wc 列出文件字节数,类似于微软的txt文档里面编入数据 ...
最新文章
- 开发日记-20190915 关键词 汇编语言王爽版 第九章
- PL/SQL Developer如何修改表数据
- android 获得屏幕的大小
- 菜单权限管理怎么实现_Java第58讲——极简的权限管理实现方案
- 工作99:任务加1逻辑
- signal(SIGPIPE, SIG_IGN);
- Go VSCode配置编译task
- 分布式事务处理--消息发送一致性的异常流程处理
- 六、基于UDP的服务器端/客户端
- Linux 中断总结
- 一个超好用的笔记编辑器
- 微信公众号H5页面:禁止分享操作
- python3 Python.h No such file or directory
- Android 圆形头像的两种实现方式
- 【调剂】上海海洋大学物理海洋学专业招收理学调剂硕士生
- 如何通过 Apple Watch 解锁 Mac !
- 六爻排盘php源码,六爻排盘-六爻在线排盘-六爻在线起卦-纳甲六爻起局-六爻在线摇卦-元亨利贞网在线六爻排盘系统...
- java腾讯地图根据经纬度获取具体位置
- 收音机磁棒天线4根接法_收音机磁性天线绕制方法
- 【计算机组成原理】补天
热门文章
- MT6589_Tuning SOP - OTPCalibration - MTK物联网在线解答 - 技术论坛
- IIS 创建FTP站点外网连接报错
- 分布式医疗云平台(项目功能简介截图)【药品进销存管理 (生产厂家维护、药品信息维护、供应商维护 、采购入库 、入库审核 、库存查询 )】(五)-全面详解(学习总结---从入门到深化)
- 隐式类型转换——C语言中的整型提升
- 信息安全铁人三项赛真题解析_信息安全铁人三项赛二进制部分题解
- 太原网络营销师郭文军揭秘淘宝标题的撰写思路
- 如何通俗地理解基于查找表的DDS、相位累加器、相位调制器?
- xp系统打开itunes显示服务器失败,win7系统打开iTunes显示Apple Mobile Device Service无法启动怎么解决...
- 计算机等级节日综合症,如何超越节日综合症
- 智图临摹作业(西安交大国家艺术基金数据可视化培训第22天)