Linux 软 RAID 配置

2020/06/09 Linux

Linux 软 RAID 配置

最近出了个 PCIe 3.1 x16 转 4 个 X4 M.2 SSD NVME 固态硬盘转接卡,正好一般的主板上只有一个 m.2 接口,难以扩展容量,将整了个转接卡,上面配上 4 个 nvme 的固态盘。

安装好了,在系统内识别成四块独立的 nvme 盘,不便于管理,就想着用软 RAID 实现加速和扩展。单盘理论速度是 3500MB/s,希望 RAID0 之后会有提升。

在 Linux 中通常是使用 md 模块来实现软件 RAID,这个模块系统在 Linux 3.6 之后集成,但是需要手动安装它的管理工具。

  • 安装 mdadm 工具
  • 建立分区表(默认msdos)
  • 指定磁盘分区类型
  • 创建软 raid 盘
  • 格式化磁盘
$ sudo apt install mdadm
$ fdisk /dev/nvme0n1
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0x7bfec905.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').
# 添加新分区
Command (m for help): n 
Command action
   e   extended
   p   primary partition (1-4)
# 选择分区类型
p
# 设置分区号
Partition number (1-4): 1 
First cylinder (1-5221, default 1): 
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-5221, default 5221): 
Using default value 5221

# 打印支持的分区格式类型
Command (m for help): l

 0  Empty           24  NEC DOS         81  Minix / old Lin bf  Solaris        
 1  FAT12           39  Plan 9          82  Linux swap / So c1  DRDOS/sec (FAT-
 2  XENIX root      3c  PartitionMagic  83  Linux           c4  DRDOS/sec (FAT-
 3  XENIX usr       40  Venix 80286     84  OS/2 hidden C:  c6  DRDOS/sec (FAT-
 4  FAT16 <32M      41  PPC PReP Boot   85  Linux extended  c7  Syrinx         
 5  Extended        42  SFS             86  NTFS volume set da  Non-FS data    
 6  FAT16           4d  QNX4.x          87  NTFS volume set db  CP/M / CTOS / .
 7  HPFS/NTFS       4e  QNX4.x 2nd part 88  Linux plaintext de  Dell Utility   
 8  AIX             4f  QNX4.x 3rd part 8e  Linux LVM       df  BootIt         
 9  AIX bootable    50  OnTrack DM      93  Amoeba          e1  DOS access     
 a  OS/2 Boot Manag 51  OnTrack DM6 Aux 94  Amoeba BBT      e3  DOS R/O        
 b  W95 FAT32       52  CP/M            9f  BSD/OS          e4  SpeedStor      
 c  W95 FAT32 (LBA) 53  OnTrack DM6 Aux a0  IBM Thinkpad hi eb  BeOS fs        
 e  W95 FAT16 (LBA) 54  OnTrackDM6      a5  FreeBSD         ee  GPT            
 f  W95 Ext'd (LBA) 55  EZ-Drive        a6  OpenBSD         ef  EFI (FAT-12/16/
10  OPUS            56  Golden Bow      a7  NeXTSTEP        f0  Linux/PA-RISC b
11  Hidden FAT12    5c  Priam Edisk     a8  Darwin UFS      f1  SpeedStor      
12  Compaq diagnost 61  SpeedStor       a9  NetBSD          f4  SpeedStor      
14  Hidden FAT16 <3 63  GNU HURD or Sys ab  Darwin boot     f2  DOS secondary  
16  Hidden FAT16    64  Novell Netware  af  HFS / HFS+      fb  VMware VMFS    
17  Hidden HPFS/NTF 65  Novell Netware  b7  BSDI fs         fc  VMware VMKCORE 
18  AST SmartSleep  70  DiskSecure Mult b8  BSDI swap       fd  Linux raid auto
1b  Hidden W95 FAT3 75  PC/IX           bb  Boot Wizard hid fe  LANstep        
1c  Hidden W95 FAT3 80  Old Minix       be  Solaris boot    ff  BBT            
1e  Hidden W95 FAT1

# 更改分区类型
Command (m for help): t
Selected partition 1
Hex code (type L to list codes): fd # 设置分区类型为RAID
Changed system type of partition 1 to fd (Linux raid autodetect)

Command (m for help): p # 打印信息

Disk /dev/sdb: 42.9 GB, 42949672960 bytes
255 heads, 63 sectors/track, 5221 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x7bfec905

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1        5221    41937651   fd  Linux raid autodetect

Command (m for help): w # 保存分区信息
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

至此,准备工作完成了。

创建软 RAID

创建

# 创建一个包含四 nvme 盘的 raid0 盘
$ mdadm --create /dev/md0 --auto yes --level 0 -n4 /dev/nvme{0,1,2,3}n1p1 
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
参数 说明
-C/–create 新建阵列
-a/–auto 允许mdadm创建设备文件,一般常用参数-a yes一次性创建
-l/–levle RAID模式,支持RAID0/1/4/5/6/10等
-n/–raid-devices= 创建阵列中活动磁盘的数量
/dev/md0 阵列的设备名称
/dev/nvme{0,1,2,3}n1p1 创建阵列中的物理磁盘分区信息

查看 RAID 信息

$ cat /proc/mdstat
Personalities : [raid0] [linear] [multipath] [raid1] [raid6] [raid5] [raid4] [raid10]
md127 : active raid0 nvme1n1p1[0] nvme3n1p1[3] nvme4n1p1[2] nvme2n1p1[1]
      3906516992 blocks super 1.2 512k chunks

$ mdadm -D /dev/md127
/dev/md127:
           Version : 1.2
     Creation Time : Mon Jun  8 15:03:03 2020
        Raid Level : raid0
        Array Size : 3906516992 (3725.54 GiB 4000.27 GB)
      Raid Devices : 4
     Total Devices : 4
       Persistence : Superblock is persistent

       Update Time : Mon Jun  8 15:03:03 2020
             State : clean
    Active Devices : 4
   Working Devices : 4
    Failed Devices : 0
     Spare Devices : 0

        Chunk Size : 512K

Consistency Policy : none

              Name : ff-206:0  (local to host ff-206)
              UUID : 3d6648e7:26309fe3:3d56a600:c7fcc279
            Events : 0

    Number   Major   Minor   RaidDevice State
       0     259        6        0      active sync   /dev/nvme1n1p1
       1     259        4        1      active sync   /dev/nvme2n1p1
       2     259        9        2      active sync   /dev/nvme4n1p1
       3     259        7        3      active sync   /dev/nvme3n1p1

写入配置文件

$ echo DEVICE /dev/sd{b,c,d}1 >> /etc/mdadm.conf
$ mdadm -Evs >> /etc/mdadm.conf 
$ cat /etc/mdadm.conf 
DEVICE /dev/sdb1 /dev/sdc1 /dev/sdd1
ARRAY /dev/md/0  level=raid0 metadata=1.2 num-devices=3 UUID=2c8da2fd:7729efbd:5e414dd0:9cfb9f5f name=Wine:0
   devices=/dev/sdb1,/dev/sdc1,/dev/sdd1

格式化分区以及挂载

$ mkfs.ext4 /dev/md0
$ mount /dev/md0 /your/path

把挂载信息写入 fstab (可选)

$ echo '/dev/md0 /SoftRAID ext4 defaults 0 0' >> /etc/fstab

删除软 RAID

  • 卸载挂载点
  • 停止软件RAID设备
  • 删除RAID中的磁盘
  • 删除mdadm配置文件
  • 删除/etc/fstab中的挂载信息
$ umount /dev/md0
$ mdadm -S /dev/md0
$ mdadm --misc --zero-superblock /dev/nvme{0,1,2,3}n1p1
$ rm -f /etc/mdadm.conf
$ vi /etc/fstab

参考

Search

    Table of Contents