很多时候,在物理机上装系统之前有必要做个磁盘安全,对于机械盘来说买个好点的raid卡不算太贵,但是对于SSD来说这就不是钱的问题了,而是性能的瓶颈,更别提新的NVme型SSD,目前几乎没有支持这种借口的raid卡;

SSD虽然比机械盘的随机寻址和IOPS高很多,但是单盘终究不够安全,使用软raid倒是个不错的办法,在一些生成环境也是推荐的;

raid属于硬件冗余,并非数据冗余
raid信息是存在硬盘上的,和系统没有关系,换系统导入原先的raid即可

lvm配合软raid

lvm是逻辑卷管理,简单点就是把多个磁盘租到一块使用,让你忽略因为分区容量不足带来的问题,它可以实现在无损数据的情况下弹性分配分区的空间(xfs不支持缩小)

实验环境

  • OS:hyper-v centos 7 minimal
  • 硬盘:127GB、100GB * 3
[hai@centos7-2 ~]$ df -hl
文件系统                 容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root   50G  1.5G   49G    3% /
devtmpfs                 2.0G     0  2.0G    0% /dev
tmpfs                    2.0G     0  2.0G    0% /dev/shm
tmpfs                    2.0G  9.3M  2.0G    1% /run
tmpfs                    2.0G     0  2.0G    0% /sys/fs/cgroup
/dev/sda2               1014M  151M  864M   15% /boot
/dev/sda1                200M  9.8M  191M    5% /boot/efi
/dev/mapper/centos-home   72G   33M   72G    1% /home
tmpfs                    392M     0  392M    0% /run/user/1000
[hai@centos7-2 ~]$ lsblk
NAME            MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda               8:0    0   127G  0 disk 
├─sda1            8:1    0   200M  0 part /boot/efi
├─sda2            8:2    0     1G  0 part /boot
└─sda3            8:3    0 125.8G  0 part 
  ├─centos-root 253:0    0    50G  0 lvm  /
  ├─centos-swap 253:1    0   3.9G  0 lvm  [SWAP]
  └─centos-home 253:2    0  71.9G  0 lvm  /home
sdb               8:16   0   100G  0 disk 
sdc               8:32   0   100G  0 disk 
sdd               8:48   0   100G  0 disk 
sr0              11:0    1  1024M  0 rom

sda默认硬盘,为centOS安装时创建的lvm
sdb/sdc/sdd为新添加的三块100G硬盘

初始化硬盘

[hai@centos7-2 ~]$ sudo fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。

更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。

Device does not contain a recognized partition table
使用磁盘标识符 0x89343748 创建新的 DOS 磁盘标签。

The device presents a logical sector size that is smaller than
the physical sector size. Aligning to a physical sector (or optimal
I/O) size boundary is recommended, or performance may be impacted.

命令(输入 m 获取帮助):m
命令操作
   a   toggle a bootable flag
        #切换可引导标识
   b   edit bsd disklabel
        #编辑bsd磁盘标签
   c   toggle the dos compatibility flag
        #切换dos兼容标识
   d   delete a partition
        #删除分区
   g   create a new empty GPT partition table
        #创建一个新的空的GPT分区表
   G   create an IRIX (SGI) partition table
        #创建一个IRIX(SGI)分区表
   l   list known partition types
        #列出已有的分区类型
   m   print this menu
        #显示(帮助)菜单
   n   add a new partition
        #创建一个新分区
   o   create a new empty DOS partition table
        #创建一个新DOS分区表
   p   print the partition table
        #显示分区表
   q   quit without saving changes
        #不保存退出
   s   create a new empty Sun disklabel
        #创建一个新的Sun磁盘标签
   t   change a partition's system id
        #更改分区系统的ID
   u   change display/entry units
        #切换显示/输入单位
   v   verify the partition table
        #验证分区表
   w   write table to disk and exit
        #写入分区表到硬盘
   x   extra functionality (experts only)
        #额外功能(仅限专家)
命令(输入 m 获取帮助):

n #创建一个新分区
p #创建一个主分区
命令(输入 m 获取帮助):n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
分区号 (1-4,默认 1):
起始 扇区 (2048-209715199,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-209715199,默认为 209715199):
将使用默认值 209715199
分区 1 已设置为 Linux 类型,大小设为 100 GiB

命令(输入 m 获取帮助):t
已选择分区 1
Hex 代码(输入 L 列出所有代码):fd
已将分区“Linux”的类型更改为“Linux raid autodetect”

命令(输入 m 获取帮助):w
The partition table has been altered!

Calling ioctl() to re-read partition table.
正在同步磁盘。

sudo fdisk /dev/sdc
#同上操作
sudo fdisk /dev/sdd
#同上操作

创建raid会破坏磁盘里面的全部数据,包括分区表和分区的数据,注意磁盘数据备份

创建raid0

sudo mdadm --create --verbose /dev/md0 --level=stripe --raid-devices=3 /dev/sdb /dev/sdc /dev/sdd

--create #创建阵列
--verbose #详细过程
/dev/md0 #创建阵列的名称
--level=stripe #raid0是条带,没有冗余
--raid-devices=3 #3是磁盘数量,后面跟磁盘路径 /dev/sdb
[hai@kvm ~]$ sudo mdadm --create --verbose /dev/md0 --level=stripe --raid-devices=3 /dev/sdb /dev/sdc /dev/sdd
mdadm: chunk size defaults to 512K
mdadm: partition table exists on /dev/sdb
mdadm: partition table exists on /dev/sdb but will be lost or
       meaningless after creating array
mdadm: partition table exists on /dev/sdc
mdadm: partition table exists on /dev/sdc but will be lost or
       meaningless after creating array
mdadm: partition table exists on /dev/sdd
mdadm: partition table exists on /dev/sdd but will be lost or
       meaningless after creating array
Continue creating array?
Continue creating array? (y/n) y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.

查看创建后的raid0信息

[hai@kvm ~]$ cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4] [raid0]
md0 : active raid0 sdd[2] sdc[1] sdb[0]
      1464763392 blocks super 1.2 512k chunks

unused devices: <none>
#md0 活动 raid0 磁盘顺序

查看创建raid0之后的磁盘结构

[hai@centos7-2 ~]$ lsblk
NAME            MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
sda               8:0    0   127G  0 disk  
├─sda1            8:1    0   200M  0 part  /boot/efi
├─sda2            8:2    0     1G  0 part  /boot
└─sda3            8:3    0 125.8G  0 part  
  ├─centos-root 253:0    0    50G  0 lvm   /
  ├─centos-swap 253:1    0   3.9G  0 lvm   [SWAP]
  └─centos-home 253:2    0  71.9G  0 lvm   /home
sdb               8:16   0   100G  0 disk  
└─md0             9:0    0 299.8G  0 raid0 
sdc               8:32   0   100G  0 disk  
├─sdc1            8:33   0   100G  0 part  
└─md0             9:0    0 299.8G  0 raid0 
sdd               8:48   0   100G  0 disk  
├─sdd1            8:49   0   100G  0 part  
└─md0             9:0    0 299.8G  0 raid0 
sr0              11:0    1  1024M  0 rom
[hai@centos7-2 ~]$ df -hl
文件系统                 容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root   50G  1.5G   49G    3% /
devtmpfs                 2.0G     0  2.0G    0% /dev
tmpfs                    2.0G     0  2.0G    0% /dev/shm
tmpfs                    2.0G  9.4M  2.0G    1% /run
tmpfs                    2.0G     0  2.0G    0% /sys/fs/cgroup
/dev/sda2               1014M  151M  864M   15% /boot
/dev/sda1                200M  9.8M  191M    5% /boot/efi
/dev/mapper/centos-home   72G   33M   72G    1% /home
tmpfs                    392M     0  392M    0% /run/user/1000
tmpfs                    392M     0  392M    0% /run/user/0

此时raid虽然创建完成了,但是没有挂载,也没有分区,所以df并没有识别;
现在raid0已经成为一个逻辑硬盘,可以使用sudo fdisk /dev/md0进行分区、挂载即可使用

创建raid1

sudo mdadm --create --verbose /dev/md1 --level=mirror --raid-devices=2 /dev/sdb /dev/sdc
#--level=mirror#镜像,磁盘数必须为双数

sudo mdadm --create --verbose /dev/md1 --level=mirror --raid-devices=2 /dev/sdb /dev/sdc --spare-devices=1 /dev/sdd

#添加备用磁盘,如果有一块磁盘故障,备用自动加入
#三块额外硬盘组成带一块热备的软raid
#/dev/md1;这里的md1只是磁盘标签的意义,1也没有特别的意义,只是一种序列标识,可以使用任意合法标识;
[hai@centos7-2 ~]$ sudo mdadm --create --verbose /dev/md1 --level=mirror --raid-devices=2 /dev/sdb /dev/sdc --spare-devices=1 /dev/sdd
mdadm: /dev/sdb appears to be part of a raid array:
       level=raid0 devices=3 ctime=Sun Dec 23 14:12:31 2018
mdadm: partition table exists on /dev/sdb but will be lost or
       meaningless after creating array
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: /dev/sdc appears to be part of a raid array:
       level=raid0 devices=3 ctime=Sun Dec 23 14:12:31 2018
mdadm: partition table exists on /dev/sdc but will be lost or
       meaningless after creating array
mdadm: /dev/sdd appears to be part of a raid array:
       level=raid0 devices=3 ctime=Sun Dec 23 14:12:31 2018
mdadm: partition table exists on /dev/sdd but will be lost or
       meaningless after creating array
mdadm: size set to 104791040K
Continue creating array? y
mdadm: Fail create md1 when using /sys/module/md_mod/parameters/new_array
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md1 started.

查看创建后的磁盘结构

type列显示了sdb/sdc/sdd的类型是raid1

[hai@centos7-2 ~]$ lsblk
NAME            MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
sda               8:0    0   127G  0 disk  
├─sda1            8:1    0   200M  0 part  /boot/efi
├─sda2            8:2    0     1G  0 part  /boot
└─sda3            8:3    0 125.8G  0 part  
  ├─centos-root 253:0    0    50G  0 lvm   /
  ├─centos-swap 253:1    0   3.9G  0 lvm   [SWAP]
  └─centos-home 253:2    0  71.9G  0 lvm   /home
sdb               8:16   0   100G  0 disk  
└─md1             9:1    0   100G  0 raid1 
sdc               8:32   0   100G  0 disk  
└─md1             9:1    0   100G  0 raid1 
sdd               8:48   0   100G  0 disk  
└─md1             9:1    0   100G  0 raid1 
sr0              11:0    1  1024M  0 rom

df -hl依旧没有任何显示,同上,磁盘没有分区

创建5/6

raid5/6在常规使用中的区别就是raid5允许坏1块硬盘,raid6允许坏2快硬盘
raid5 最少需要三块硬盘
raid6 最少需要四块硬盘

sudo mdadm --create --verbose /dev/md0 --level=5 --raid-devices=3 /dev/sdb /dev/sdc /dev/sdd --spare-devices=1 /dev/sde
#如果没有备用盘的话,--spare-devices就不需要了

[hai@centos7-2 ~]$  sudo mdadm --create --verbose /dev/md5 --level=5 --raid-devices=3 /dev/sdb /dev/sdc /dev/sdd
mdadm: layout defaults to left-symmetric
mdadm: layout defaults to left-symmetric
mdadm: chunk size defaults to 512K
mdadm: /dev/sdb appears to be part of a raid array:
       level=raid1 devices=2 ctime=Sun Dec 23 14:34:07 2018
mdadm: partition table exists on /dev/sdb but will be lost or
       meaningless after creating array
mdadm: /dev/sdc appears to be part of a raid array:
       level=raid1 devices=2 ctime=Sun Dec 23 14:34:07 2018
mdadm: partition table exists on /dev/sdc but will be lost or
       meaningless after creating array
mdadm: /dev/sdd appears to be part of a raid array:
       level=raid1 devices=2 ctime=Sun Dec 23 14:34:07 2018
mdadm: partition table exists on /dev/sdd but will be lost or
       meaningless after creating array
mdadm: size set to 104791040K
Continue creating array? y
mdadm: Fail create md0 when using /sys/module/md_mod/parameters/new_array
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.

查看创建后的磁盘结构

[hai@centos7-2 ~]$ sudo mdadm --stop /dev/md0 
mdadm: stopped /dev/md0
[hai@centos7-2 ~]$  sudo mdadm --create --verbose /dev/md5 --level=5 --raid-devices=3 /dev/sdb /dev/sdc /dev/sdd
mdadm: layout defaults to left-symmetric
mdadm: layout defaults to left-symmetric
mdadm: chunk size defaults to 512K
mdadm: /dev/sdb appears to be part of a raid array:
       level=raid5 devices=3 ctime=Sun Dec 23 14:58:11 2018
mdadm: partition table exists on /dev/sdb but will be lost or
       meaningless after creating array
mdadm: /dev/sdc appears to be part of a raid array:
       level=raid5 devices=3 ctime=Sun Dec 23 14:58:11 2018
mdadm: partition table exists on /dev/sdc but will be lost or
       meaningless after creating array
mdadm: /dev/sdd appears to be part of a raid array:
       level=raid5 devices=3 ctime=Sun Dec 23 14:58:11 2018
mdadm: partition table exists on /dev/sdd but will be lost or
       meaningless after creating array
mdadm: size set to 104791040K
Continue creating array? y
mdadm: Fail create md5 when using /sys/module/md_mod/parameters/new_array
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md5 started.

查看创建过程

[hai@centos7-2 ~]$ cat /proc/mdstat
Personalities : [raid0] [raid1] [raid6] [raid5] [raid4] 
md5 : active raid5 sdd[3] sdc[1] sdb[0]
      209582080 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [UU_]
      [=======>.............]  recovery = 37.6% (39406336/104791040) finish=5.2min speed=206835K/sec

unused devices: <none>

raid6同上

保存配置

#ubuntu
sudo mdadm --detail --scan >> /etc/mdadm/mdadm.conf
#centos7
sudo mdadm --detail --scan >> /etc/mdadm.conf #使用sudo可能提示权限不够,需要切换到root执行

停用/拆除raid

#停止raid
sudo mdadm --stop /dev/md0

#恢复raid,如果想用
sudo mdadm --run /dev/md0 
#停用后md0就不存在了,在执行md0就只能呵呵了,没有这个设备(命令)~~
#如果已经创建过raid,则可以使用导入,否则需要执行创建命令,不存在 --run /dev/md0的操作

#如果记得磁盘的名称或数量,则可以指定导入,否则使用自动扫描
sudo mdadm --assemble /dev/md0 /dev/sdb /dev/sdc /dev/sdc

#扫描导入
sudo mdadm --assemble --scan

#如果从其它机器拿过来的硬盘,为了防止在导入过程中盘符发生变化等问题为了安全建议使用UUID导入

#查看UUID命令,冒号分割

blkid /dev/sdb #方法1

ls -l /dev/disk/by-uuid #方法2(推荐)

[hai@centos7-2 ~]$ ls -l /dev/disk/by-uuid/
总用量 0
lrwxrwxrwx 1 root root 10 9月  27 13:42 5b592c8f-06de-4494-a670-b4260ebcc9e3 -> ../../dm-1
lrwxrwxrwx 1 root root 10 9月  27 13:42 69b670bb-4fde-49a2-a6f8-5308aa2eaeea -> ../../dm-0
lrwxrwxrwx 1 root root 10 9月  27 13:42 85c08b50-0085-4c45-a344-98370d6bc51b -> ../../sda2
lrwxrwxrwx 1 root root 10 9月  27 13:42 A69C-990D -> ../../sda1
lrwxrwxrwx 1 root root 10 9月  27 13:42 d7ba01b7-71fb-49b7-944b-a6955db76f3a -> ../../dm-2

# 按照UUID扫描导入raid
sudo mdadm --assemble --scan --uuid=69b670bb-4fde-49a2-a6f8-5308aa2eaeea:5b592c8f-06de-4494-a670-b4260ebcc9e3:d7ba01b7-71fb-49b7-944b-a6955db76f3a

添加到lvm并挂载

扩展阅读

man mdadm
RAID setup – Linux Raid Wiki

发表评论

电子邮件地址不会被公开。 必填项已用*标注

5 × 4 =