UNIXETC

树莓派配置使用RAID阵列 第一章

树莓派配置使用RAID阵列

RAID存储系统可用作故障率较低的备份系统,搭建这样一个系统并非难事,与市面上的成品NAS系统相比,基于树莓派的软RAID系统成本相对较低,本文所采用的解决方案基于mdadm的软RAID。

选择使用软RAID而非硬RAID一个主要原因是,万一RAID控制器出现硬件故障,无需使用完全相同的RAID控制器,就能利用硬盘重新安装RAID且不丢失数据。此外,也能轻松更换主机硬件而不会丢失RAID中的所有数据。

本系列文章的第一部分将介绍软RAID组建的步骤,后续部分将介绍RAID的使用方法,以及诸如更换磁盘、RAID扩展等管理实例。

设置概述

本系统使用USB硬盘盒,USB硬盘盒价格相当便宜,但要记住为RAID选择硬盘时需挑选耐用型的例如,西部数据红盘增强版(Western Digital WD Red Plus)或希捷酷狼(Seagate Ironwolf)可能是不错的选择。由于固态硬盘(SSD)与机械硬盘相比,通常写入循环能力较低,所以不推荐使用。

作者使用的是2.5英寸的希捷酷鱼小硬盘,其最大容量可达2TB。容量更大的硬盘通常是3.5英寸,尺寸更大且更耐用。3.5英寸规格中也有专门的NAS硬盘(如希捷酷狼)可供选择。鉴于目标应用场景是备份系统,硬盘大多处于自旋停止模式,所以2.5英寸硬盘在7天24小时不间断运行的情况下,其使用寿命被认为是可以接受的。

2.5英寸硬盘还有一个优势,即功耗更低。配备4块硬盘(RAID 5)和ODROID N2+单板计算机(SBC)的系统,空闲时仅耗电10瓦,备份时耗电11瓦,硬盘自旋停止时耗电8瓦。

这些硬盘安装在梵泰克(Fantec)USB 3.0双盘盒中,并通过USB直接连接到ODROID N2 +。有源USB集线器仅为硬盘供电,以避免给ODROID主板带来过大的USB供电负担。

请注意,所使用的USB集线器的电源必须能够为USB驱动器供电。一般来说,一块2.5英寸硬盘的最大电流消耗约为1安(相当于5瓦)。这意味着,在四盘RAID设置中,USB集线器至少需要20瓦的电源供应。

设备连接图示

本示例中,共使用了4快硬盘设置了一个RAID5系统,RAID5是一个合理的冗余级别。如果超过4个或更多硬盘,则建议使用RAID6。在RAID5或RAID6的情况下,硬盘应该具有相同的容量,因为最小的容量限制了整个RAID的容量。因此,最好使用相同的硬盘型号。

RAID系统的设置步骤如下:

  1. 连接硬盘和系统识别
  2. 准备驱动器
  3. 构建、格式化和挂载RAID

连接硬盘和系统识别

首先使硬盘在系统中可访问,并能够识别每个硬盘。为正在运行的RAID系统贴上标签,便于管理。

使用lsblk命令可以查看所有磁盘设备:

NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0   1,8T  0 disk
sdb      8:16   0   1,8T  0 disk
└─sdb1   8:17   0   1,8T  0 part
sdc      8:32   0   1,8T  0 disk
├─sdc1   8:33   0  18,6G  0 part
├─sdc2   8:34   0 184,4G  0 part
└─sdc3   8:35   0   1,6T  0 part
sdd      8:48   0   1,8T  0 disk

如上显示了/dev/sda/dev/sdb/dev/sdc/dev/sdd四块硬盘,每个容量都是1.8T;并且sdb包含sdb1一个分区,sdc包含了sdc1sdc2sdc3三个分区。

如果是新组装的四个硬盘,lsblk应该如下显示:

NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0   1,8T  0 disk
sdb      8:16   0   1,8T  0 disk
sdc      8:32   0   1,8T  0 disk
sdd      8:48   0   1,8T  0 disk

为了方便识别标记设备,建议将硬盘一个一个接入系统,然后用blkid /dev/sdb来查看具体硬盘信息,如下:

/dev/sdb: PTUUID="b28fec86-3f2a-4128-97bf-7c512e66bbe9" PTTYPE="gpt"

以上为/dev/sdb的详细信息,其中PTUUID为统一标识,具有唯一性;我们可以使用其中第一节字段b28fec86来标记每个设备。

/dev/sda: PTUUID="7a4748ea" PTTYPE="dos"
/dev/sdb: PTUUID="b28fec86-3f2a-4128-97bf-7c512e66bbe9" PTTYPE="gpt"
/dev/sdc: PTUUID="6ea6187e-6aa4-4f55-9936-47cb4f20e6d4" PTTYPE="gpt"
/dev/sdd: PTUUID="cb11bb4e-bd0a-4067-b8ff-f715f525df4c" PTTYPE="gpt"

准备驱动器

下来我们修改具体的磁盘配置,为RAID系统做准备。

首先删除已存在分区,使用parted命令来操作,以下为/dev/sdc操作实例:

parted /dev/sdc print #查看当前信息

Model: JMicron Generic (scsi)
Disk /dev/sdc: 2000GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start   End     Size    File system  Name                  Flags
 1      1049kB  20,0GB  20,0GB  ntfs         Basic data partition  msftdata
 2      20,0GB  218GB   198GB   ntfs         Basic data partition  msftdata
 3      218GB   2000GB  1782GB  ntfs         Basic data partition  msftdata
 
 #删除1/2/3三个分区
 parted /dev/sdc rm 1
 parted /dev/sdc rm 2
 parted /dev/sdc rm 3

参考以上步骤,将/dev/sdb中的分区也删除了,最后磁盘信息如下:

NAME MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda    8:0    0  1,8T  0 disk
sdb    8:16   0  1,8T  0 disk
sdc    8:32   0  1,8T  0 disk
sdd    8:48   0  1,8T  0 disk

安装所需软件

首先安装RAID软件包mdadmsmartmontools

apt install mdadm smartmontools

如果需要格式化为特殊格式,如btrfsxf,则需要安装对应软件包。

apt install apt install btrfs-progs xfsprogs

后续通过nfs访问raid的话,还需要安装nfs server相关软件。

格式化并且挂载RAID分区

创建RAID

使用mdadm创建RAID

root@raid:~# mdadm --create /dev/md0 --level=5 --raid-devices=4 /dev/sda /dev/sdb /dev/sdc /dev/sdd
mdadm: partition table exists on /dev/sda
mdadm: partition table exists on /dev/sda but will be lost or
       meaningless after creating array
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? yes
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.

在此使用创建了一个RAID5设备,名为/dev/md0,RAID构建过程作耗时较长,这个过程可能会被重新启动或关闭中断,在下一次重新启动时,它会自动在中断的位置重新启动。

这个过程可以通过cat /proc/mdstatwatch -n1 cat /proc/mdstat来查看。

root@raid:~#cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 sdd[4] sdc[2] sdb[1] sda[0]
      5860144128 blocks super 1.2 level 5, 512k chunk, algorithm 2 [4/3] [UUU_]
      [>....................]  recovery =  1.5% (30243876/1953381376) finish=671.9min speed=47703K/sec
      bitmap: 0/15 pages [0KB], 65536KB chunk
unused devices: <none>

RAID5创建完成后状态如下:

root@raid:~#cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 sdd[4] sdc[2] sdb[1] sda[0]
      5860144128 blocks super 1.2 level 5, 512k chunk, algorithm 2 [4/4] [UUUU]
      bitmap: 0/15 pages [0KB], 65536KB chunk

unused devices: <none>

最后将创建好的配置写入mdadm配置文件中

mdadm --examine --scan --verbose >> /etc/mdadm/mdadm.conf

格式化RAID

RAID常用文件系统

Btrfs具有较高的数据丢失安全性,通常会建议使用Btrfs。对于NAS来说,文件系统的性能不是主要原因,大多数情况下,网络连接才是整体性能的瓶颈。

在此没有提到F2FS是因为此次使用机械硬盘而不是固态硬盘,如果使用固态硬盘(SSD)则推荐F2FS文件系统。

使用mkfs命令结合特定文件系统来格式化RAID分区。

mkfs.btrfs -L "myRAID" /dev/md0
#或
mkfs.xfs -L "myRAID" /dev/md0

XFS和Btrfs自动确定最佳格式化参数,因此在mkfs.xfsmkfs.btrfs 命令中不需要提供额外的参数。

格式化为ext4类型的文件系统时,需要通过参数设置磁盘对齐,过程如下。

检查RAID的chunk大小

mdadm --detail /dev/md0 | grep "Chunk Size"

检查磁盘扇区大小

smartctl -i /dev/sda | grep "Sector Sizes"

接下来访问stride计算进行参数计算,确定-b XX -E stride=XX,stripe-width=XX参数部分,然后格式化即可。

mkfs stride

mkfs.ext4 -v -m 1 -b 4096 -E stride=128,stripe-width=384 -L "myRAID" /dev/md0

挂载RAID分区

mount /dev/md0 /mnt/raid
chown -R root:root /mnt/raid

检查挂载后的效果

#查看设备
#lsblk 

NAME        MAJ:MIN RM  SIZE RO TYPE  MOUNTPOINT
sda           8:0    0  1,8T  0 disk
└─md0         9:0    0  5,5T  0 raid5 /mnt/raid
sdb           8:16   0  1,8T  0 disk
└─md0         9:0    0  5,5T  0 raid5 /mnt/raid
sdc           8:32   0  1,8T  0 disk
└─md0         9:0    0  5,5T  0 raid5 /mnt/raid
sdd           8:48   0  1,8T  0 disk
└─md0         9:0    0  5,5T  0 raid5 /mnt/raid

#查看挂载分区
#mount | grep md0
/dev/md0 on /mnt/raid type ext4 (rw,noatime,lazytime,stripe=384,x-systemd.automount)

#查看容量使用情况
#df -h | grep 'system\|md0'
Filesystem      Size     Used  Avail  Use%  Mounted on
/dev/md0        5,5T     28K   5,4T     1%  /mnt/raid

#检查权限设置
#ls -l /mnt | grep raid
drwxr-xr-x 3 root root 4096 17. Sep 12:23 raid

散装IT人公众号

#Raspi #Raid #Raid5 #Mdadm #Parted