树莓派配置使用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系统的设置步骤如下:
- 连接硬盘和系统识别
- 准备驱动器
- 构建、格式化和挂载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
包含了sdc1
、sdc2
和sdc3
三个分区。
如果是新组装的四个硬盘,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软件包mdadm
和smartmontools
apt install mdadm smartmontools
如果需要格式化为特殊格式,如btrfs
或xf
,则需要安装对应软件包。
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/mdstat
或watch -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常用文件系统
- ext4: Linux标准文件系统类型
- Btrfs:现代文件系统,有时用于NAS系统
- XFS:现代文件系统
Btrfs具有较高的数据丢失安全性,通常会建议使用Btrfs。对于NAS来说,文件系统的性能不是主要原因,大多数情况下,网络连接才是整体性能的瓶颈。
在此没有提到F2FS是因为此次使用机械硬盘而不是固态硬盘,如果使用固态硬盘(SSD)则推荐F2FS文件系统。
使用mkfs
命令结合特定文件系统来格式化RAID分区。
mkfs.btrfs -L "myRAID" /dev/md0
#或
mkfs.xfs -L "myRAID" /dev/md0
XFS和Btrfs自动确定最佳格式化参数,因此在mkfs.xfs
和mkfs.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.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
