Linux磁盘阵列

简介: Linux磁盘阵列

Linux磁盘阵列

一、磁盘列阵(RAID

1.1 RAID磁盘阵列介绍

把多块独立的物理硬盘按不同的方式组成一个逻辑硬盘,从而提供比单个硬盘更高的存储性能和提供数据备份技术

常用的RAID级别:

  • RAID0、RAID1、RAID5、RAID6、RAID1+0 等

1.2 RAID级别详细说明

1.2.1 RAID 0(条带化存储)

特点:

  • 读写性能最强
  • 没有数据备份功能
  • 需要n(n≥1)个硬盘
  • 磁盘利用率为n(100%)
  • 任意一块硬盘损坏,数据就全部异常

image.png

1.2.2 RAID 1(镜像存储)

特点:

  • 互为备份
  • 写性能差一些,读性能一般
  • 高可用,坏了其中一块硬盘不影响数据
  • 需要偶数个硬盘
  • 磁盘利用率为n/2(50%)

image.png

1.2.3 RAID 5

特点:

  • 读性能强,写性能一般
  • 允许一块硬盘损坏,不影响数据
  • 拥有数据校验机制(这是写性能慢的原因)
  • 需要n(n≥3)个硬盘
  • 在成本控制的前提下,追求最大容量,速度及高可用性
  • 磁盘利用率(n-1)/n


image.png

1.2.4 RAID 6

特点:

  • 需要n(n≥4)个硬盘
  • 增加了奇偶校验
  • 读性能与RAID5相当,写性能比RAID5差
  • 允许损坏两块硬盘,不影响数据
  • 磁盘利用率(n-2)/n

image.png

1.2.5 RAID 1+0(先做镜像,再做条带)

特点:

  • 硬盘数n为偶数,且n≥4
  • 读性能很高,写性能稍差
  • 理论上可以损坏三块硬盘,但再实际业务中允许两个基组中各坏一个,数据不会收到影响
  • 磁盘利用率n/2(50%)

image.png

1.2.6 RAID 0+1(先做条带,再做镜像)

特点:

  • 硬盘数n为偶数,且n≥4
  • 读写性能与RAID 1+0相同;
  • 数据可靠性比RAID 1+0要更差。 实际使用较少。

image.png

1.3 RAID级别比较

image.png

二、磁盘阵列配置实验(RAID 5)

2.1 配置RAID 5

2.1.1 检测软件是否安装

[root@localhost ~]# rpm -q mdadm
mdadm-4.0-5.el7.x86_64      //已有,无需安装软件

2.1.2 创建分区

[root@localhost ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
Device does not contain a recognized partition table
使用磁盘标识符 0x140ee0a2 创建新的 DOS 磁盘标签。
命令(输入 m 获取帮助):n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
分区号 (1-4,默认 1):
起始 扇区 (2048-62914559,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-62914559,默认为 62914559):+10G
分区 1 已设置为 Linux 类型,大小设为 10 GiB
命令(输入 m 获取帮助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。
[root@localhost ~]# fdisk /dev/sdc
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
Device does not contain a recognized partition table
使用磁盘标识符 0xebf36733 创建新的 DOS 磁盘标签。
命令(输入 m 获取帮助):n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
分区号 (1-4,默认 1):
起始 扇区 (2048-41943039,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-41943039,默认为 41943039):+10G
分区 1 已设置为 Linux 类型,大小设为 10 GiB
命令(输入 m 获取帮助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。
[root@localhost ~]# fdisk /dev/sdd
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
Device does not contain a recognized partition table
使用磁盘标识符 0x323399f5 创建新的 DOS 磁盘标签。
命令(输入 m 获取帮助):n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
分区号 (1-4,默认 1):
起始 扇区 (2048-41943039,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-41943039,默认为 41943039):+10G
分区 1 已设置为 Linux 类型,大小设为 10 GiB
命令(输入 m 获取帮助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。
[root@localhost ~]# fdisk /dev/sde
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
Device does not contain a recognized partition table
使用磁盘标识符 0xe13e3a01 创建新的 DOS 磁盘标签。
命令(输入 m 获取帮助):n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
分区号 (1-4,默认 1):
起始 扇区 (2048-41943039,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-41943039,默认为 41943039):+10G
分区 1 已设置为 Linux 类型,大小设为 10 GiB
命令(输入 m 获取帮助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。
[root@localhost ~]# lsblk 
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   60G  0 disk 
├─sda1            8:1    0  953M  0 part /boot
└─sda2            8:2    0 51.2G  0 part 
  ├─centos-root 253:0    0 46.6G  0 lvm  /
  └─centos-swap 253:1    0  4.7G  0 lvm  [SWAP]
sdb               8:16   0   30G  0 disk 
└─sdb1            8:17   0   10G  0 part 
sdc               8:32   0   20G  0 disk 
└─sdc1            8:33   0   10G  0 part 
sdd               8:48   0   20G  0 disk 
└─sdd1            8:49   0   10G  0 part 
sde               8:64   0   20G  0 disk 
└─sde1            8:65   0   10G  0 part 
sdf               8:80   0   20G  0 disk 
sr0              11:0    1 1024M  0 rom  

2.1.3 创建RAID磁盘

-C:创建
-v:列出详细信息
-l:指定raid级别
-n:指定用几块硬盘做raid
-x:指定几块硬盘作为热备份
[root@localhost ~]# mdadm -C -v /dev/md5 -l5 -n3 /dev/sd[b-d]1 -x1 /dev/sde1
mdadm: layout defaults to left-symmetric
mdadm: layout defaults to left-symmetric
mdadm: chunk size defaults to 512K
mdadm: size set to 10477568K
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md5 started.
[root@localhost ~]# mdadm -D /dev/md5         //查看详细信息
/dev/md5:
           Version : 1.2
     Creation Time : Tue May  9 19:53:05 2023
        Raid Level : raid5
        Array Size : 20955136 (19.98 GiB 21.46 GB)
     Used Dev Size : 10477568 (9.99 GiB 10.73 GB)
      Raid Devices : 3
     Total Devices : 4
       Persistence : Superblock is persistent
       Update Time : Tue May  9 19:53:57 2023
             State : clean 
    Active Devices : 3                //由此可知创建成功
   Working Devices : 4
    Failed Devices : 0
     Spare Devices : 1
            Layout : left-symmetric
        Chunk Size : 512K
Consistency Policy : resync
              Name : localhost.localdomain:5  (local to host localhost.localdomain)
              UUID : 36391dbd:dd031c90:7c0be78f:ed388e64
            Events : 18
    Number   Major   Minor   RaidDevice State
       0       8       17        0      active sync   /dev/sdb1
       1       8       33        1      active sync   /dev/sdc1
       4       8       49        2      active sync   /dev/sdd1
       3       8       65        -      spare   /dev/sde1

2.1.4 格式化

[root@localhost ~]# mkfs.xfs /dev/md5
meta-data=/dev/md5               isize=512    agcount=16, agsize=327296 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=5236736, 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

2.1.5 挂载

[root@localhost /]# mkdir /data         //创建data目录
[root@localhost /]# ls              //查看data目录是否创建成功
bin  boot  data  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[root@localhost /]# mount /dev/md5 /data/   //临时挂载/dev/md5到/data/
[root@localhost /]# lsblk             //查看是否挂载成功
NAME            MAJ:MIN RM  SIZE RO TYPE  MOUNTPOINT
sda               8:0    0   60G  0 disk  
├─sda1            8:1    0  953M  0 part  /boot
└─sda2            8:2    0 51.2G  0 part  
  ├─centos-root 253:0    0 46.6G  0 lvm   /
  └─centos-swap 253:1    0  4.7G  0 lvm   [SWAP]
sdb               8:16   0   30G  0 disk  
└─sdb1            8:17   0   10G  0 part  
  └─md5           9:5    0   20G  0 raid5 /data
sdc               8:32   0   20G  0 disk  
└─sdc1            8:33   0   10G  0 part  
  └─md5           9:5    0   20G  0 raid5 /data
sdd               8:48   0   20G  0 disk  
└─sdd1            8:49   0   10G  0 part  
  └─md5           9:5    0   20G  0 raid5 /data
sde               8:64   0   20G  0 disk  
└─sde1            8:65   0   10G  0 part  
  └─md5           9:5    0   20G  0 raid5 /data
sdf               8:80   0   20G  0 disk  
sr0              11:0    1 1024M  0 rom   

2.1.5 挂载

[root@localhost /]# mkdir /data         //创建data目录
[root@localhost /]# ls              //查看data目录是否创建成功
bin  boot  data  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[root@localhost /]# mount /dev/md5 /data/   //临时挂载/dev/md5到/data/
[root@localhost /]# lsblk             //查看是否挂载成功
NAME            MAJ:MIN RM  SIZE RO TYPE  MOUNTPOINT
sda               8:0    0   60G  0 disk  
├─sda1            8:1    0  953M  0 part  /boot
└─sda2            8:2    0 51.2G  0 part  
  ├─centos-root 253:0    0 46.6G  0 lvm   /
  └─centos-swap 253:1    0  4.7G  0 lvm   [SWAP]
sdb               8:16   0   30G  0 disk  
└─sdb1            8:17   0   10G  0 part  
  └─md5           9:5    0   20G  0 raid5 /data
sdc               8:32   0   20G  0 disk  
└─sdc1            8:33   0   10G  0 part  
  └─md5           9:5    0   20G  0 raid5 /data
sdd               8:48   0   20G  0 disk  
└─sdd1            8:49   0   10G  0 part  
  └─md5           9:5    0   20G  0 raid5 /data
sde               8:64   0   20G  0 disk  
└─sde1            8:65   0   10G  0 part  
  └─md5           9:5    0   20G  0 raid5 /data
sdf               8:80   0   20G  0 disk  
sr0              11:0    1 1024M  0 rom   

2.2 模拟故障

root@localhost /]# cd /data
[root@localhost data]# touch aa bb cc
[root@localhost data]# ls
aa  bb  cc
##表明现在读写是正常的
[root@localhost data]# mdadm /dev/md5 -f /dev/sdb1        //强制下线sdb1
mdadm: set /dev/sdb1 faulty in /dev/md5
[root@localhost data]# mdadm -D /dev/md5            //查看md5的详细信息
/dev/md5:
           Version : 1.2
     Creation Time : Tue May  9 19:53:05 2023
        Raid Level : raid5
        Array Size : 20955136 (19.98 GiB 21.46 GB)
     Used Dev Size : 10477568 (9.99 GiB 10.73 GB)
      Raid Devices : 3
     Total Devices : 4
       Persistence : Superblock is persistent
       Update Time : Tue May  9 23:03:43 2023
             State : clean 
    Active Devices : 3
   Working Devices : 3
    Failed Devices : 1
     Spare Devices : 0
            Layout : left-symmetric
        Chunk Size : 512K
Consistency Policy : resync
              Name : localhost.localdomain:5  (local to host localhost.localdomain)
              UUID : 36391dbd:dd031c90:7c0be78f:ed388e64
            Events : 37
    Number   Major   Minor   RaidDevice State
       3       8       65        0      active sync   /dev/sde1
       1       8       33        1      active sync   /dev/sdc1
       4       8       49        2      active sync   /dev/sdd1
       0       8       17        -      faulty   /dev/sdb1
##此时sdb1被下线,由热备盘sde1顶上
[root@localhost data]# ls
aa  bb  cc
[root@localhost data]# echo 123 > aa
[root@localhost data]# cat aa
123
##下线sdb1后读写功能依然正常,说明热备盘起作用了
[root@localhost data]# mdadm /dev/md5 -f /dev/sdc1
mdadm: set /dev/sdc1 faulty in /dev/md5
[root@localhost data]# mdadm /dev/md5 -f /dev/sdd1
mdadm: set /dev/sdd1 faulty in /dev/md5
[root@localhost data]# ls
ls: 无法打开目录.: 输入/输出错误
[root@localhost data]# cat aa
cat: aa: 输入/输出错误
[root@localhost data]# touch dd
touch: 无法创建"dd": 输入/输出错误
##由于RAID5只允许损坏一个硬盘,上面我下线了两个硬盘,所以此时无法输入输出,模拟故障验证成功

2.3 删除RAID

[root@localhost data]# umount /dev/md5 /data 
umount: /data:未挂载
[root@localhost data]# df -h
文件系统                 容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root   47G  4.9G   42G   11% /
devtmpfs                 969M     0  969M    0% /dev
tmpfs                    984M     0  984M    0% /dev/shm
tmpfs                    984M  9.2M  975M    1% /run
tmpfs                    984M     0  984M    0% /sys/fs/cgroup
/dev/sda1                950M  179M  772M   19% /boot
tmpfs                    197M  4.0K  197M    1% /run/user/42
tmpfs                    197M   48K  197M    1% /run/user/0
[root@localhost data]# mdadm -S /dev/md5 
mdadm: stopped /dev/md5
[root@localhost data]# mdadm --misc --zero-superblock /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1
[root@localhost /]# lsblk                 //查看是否删除成功
NAME            MAJ:MIN RM  SIZE RO TYPE  MOUNTPOINT
sda               8:0    0   60G  0 disk  
├─sda1            8:1    0  953M  0 part  /boot
└─sda2            8:2    0 51.2G  0 part  
  ├─centos-root 253:0    0 46.6G  0 lvm   /
  └─centos-swap 253:1    0  4.7G  0 lvm   [SWAP]
sdb               8:16   0   30G  0 disk  
└─sdb1            8:17   0   10G  0 part  
sdc               8:32   0   20G  0 disk  
└─sdc1            8:33   0   10G  0 part  
sdd               8:48   0   20G  0 disk  
└─sdd1            8:49   0   10G  0 part 
sde               8:64   0   20G  0 disk  
└─sde1            8:65   0   10G  0 part  
sdf               8:80   0   20G  0 disk  
sr0              11:0    1 1024M  0 rom   


目录
相关文章
|
3月前
|
Ubuntu Linux Shell
Linux系统中如何查看磁盘情况
【9月更文挑战第3天】在Linux系统中,有多种方式查看磁盘情况。可通过命令行工具`df`查看文件系统磁盘使用情况,选项`-h`以人类可读格式显示,`-T`显示文件系统类型;`du`命令显示目录或文件磁盘使用情况,`-h`以人类可读格式显示,`-s`仅显示总计;`fdisk -l`列出磁盘和分区信息。此外,图形界面的磁盘管理工具和文件管理器也可用于查看磁盘使用情况。这些方法有助于更好地管理磁盘空间。
612 4
|
4月前
|
存储 监控 安全
在Linux中,⼀个EXT3的文件分区,当使用touch test.file命令创建⼀个新文件时报错,报错的信息是提示磁盘已满,但是采用df -h命令查看磁盘大小时,只使用了,60%的磁盘空间,为什么会出现这个情况?
在Linux中,⼀个EXT3的文件分区,当使用touch test.file命令创建⼀个新文件时报错,报错的信息是提示磁盘已满,但是采用df -h命令查看磁盘大小时,只使用了,60%的磁盘空间,为什么会出现这个情况?
|
2月前
|
Unix Linux 对象存储
Linux 磁盘管理
Linux 磁盘管理
38 1
|
3月前
|
存储 Linux 5G
Linux 基于 LVM 逻辑卷的磁盘管理【简明教程】
这篇文章介绍了LVM(逻辑卷管理)如何提供灵活的磁盘管理方式,允许动态调整逻辑卷的大小而不会丢失数据。
Linux 基于 LVM 逻辑卷的磁盘管理【简明教程】
|
2月前
|
监控 Linux 测试技术
Linux系统命令与网络,磁盘和日志监控总结
Linux系统命令与网络,磁盘和日志监控总结
59 0
|
2月前
|
监控 Linux 测试技术
Linux系统命令与网络,磁盘和日志监控三
Linux系统命令与网络,磁盘和日志监控三
42 0
|
4月前
|
存储 监控 Linux
|
4月前
|
Prometheus 监控 Ubuntu
在Linux中,如何进行磁盘性能监控?
在Linux中,如何进行磁盘性能监控?
|
4月前
|
存储 监控 Linux
在Linux中,如何管理磁盘配额?
在Linux中,如何管理磁盘配额?
|
4月前
|
监控 Linux
在Linux中,如何监控磁盘I/O性能?
在Linux中,如何监控磁盘I/O性能?