RAID | mdadm
我被MBP的小硬盘逼急了。一个笔记本只有256G存储,把常用的软件装一遍基本上就占了一半的空间。
没办法了,在路由器上配一个RAID吧。
ABC | 基础知识
我们的硬盘:块设备
Linux下的所有东西都是文件,而磁盘是一种块设备,以块设备文件的形式展示在/dev下
[guochao@router-centos ~]$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdd 8:48 0 2.7T 0 disk
└─md127 9:127 0 5.5T 0 raid5
└─md127p1 259:0 0 5.5T 0 md /data
sdb 8:16 0 2.7T 0 disk
└─data-docker 253:0 0 838.4G 0 lvm
sde 8:64 0 2.7T 0 disk
└─md127 9:127 0 5.5T 0 raid5
└─md127p1 259:0 0 5.5T 0 md /data
sdc 8:32 0 2.7T 0 disk
└─md127 9:127 0 5.5T 0 raid5
└─md127p1 259:0 0 5.5T 0 md /data
sda 8:0 0 29.8G 0 disk
├─sda4 8:4 0 25.7G 0 part /
├─sda2 8:2 0 1G 0 part /boot
├─sda3 8:3 0 3G 0 part [SWAP]
└─sda1 8:1 0 200M 0 part /boot/efi
[guochao@router-centos ~]$ ls /dev/ -lh
总用量 0
...
crw-------. 1 root root 10, 227 9月 20 09:06 mcelog
drwxr-xr-x. 2 root root 80 9月 20 09:06 md
brw-rw----. 1 root disk 9, 127 9月 20 09:06 md127
brw-rw----. 1 root disk 259, 0 9月 20 09:06 md127p1
crw-r-----. 1 root kmem 1, 1 9月 20 09:06 mem
...
brw-rw----. 1 root disk 8, 0 9月 20 09:06 sda
brw-rw----. 1 root disk 8, 1 9月 20 09:06 sda1
brw-rw----. 1 root disk 8, 2 9月 20 09:06 sda2
brw-rw----. 1 root disk 8, 3 9月 20 09:06 sda3
brw-rw----. 1 root disk 8, 4 9月 20 09:06 sda4
brw-rw----. 1 root disk 8, 16 9月 20 09:06 sdb
brw-rw----. 1 root disk 8, 32 9月 20 09:06 sdc
brw-rw----. 1 root disk 8, 48 9月 20 09:06 sdd
brw-rw----. 1 root disk 8, 64 9月 20 09:06 sde
crw-rw----. 1 root disk 21, 0 9月 20 09:06 sg0
crw-rw----. 1 root disk 21, 1 9月 20 09:06 sg1
...
lrwxrwxrwx. 1 root root 15 9月 20 09:06 stderr -> /proc/self/fd/2
lrwxrwxrwx. 1 root root 15 9月 20 09:06 stdin -> /proc/self/fd/0
lrwxrwxrwx. 1 root root 15 9月 20 09:06 stdout -> /proc/self/fd/1
crw-rw-rw-. 1 root tty 5, 0 9月 20 09:06 tty
crw--w----. 1 root tty 4, 0 9月 20 09:06 tty0
...
crw-rw-rw-. 1 root root 1, 5 9月 20 09:06 zero
[guochao@router-centos ~]$ ls /dev/mapper/ -lh
总用量 0
crw-------. 1 root root 10, 236 9月 20 09:06 control
lrwxrwxrwx. 1 root root 7 9月 20 09:06 data-docker -> ../dm-0
lsblk是输出一个系统里面所有块设备的命令。可以看到块设备在/dev下都有一个设备文件。具体使用嘛,无非就是格式化、挂载卸载。
参考
多个硬盘拼起来:LVM
LVM中文名叫逻辑卷管理器。特点就是可以把几块块设备拼起来拼成一个大的块设备。
比如说我有一个1T硬盘做home,但是后来发现不大够。那怎么办呢?拓展。
但是块设备本身是不能扩展的,怎么办?
Linux提供了一个工具叫lvm,在其他块设备基础上,增加一层逻辑并且模拟出来一个新的块设备。分为pv、vg、lv三层逻辑,其中pv是作为底层的存储设备,而lv是模拟出来的新的块设备。lv可以动态、实时、在线调整大小,可伸可缩非常方便。
但是LVM并不能提供冗余。你的一块盘有数据坏了,整个lv就作废了,怎么办呢?
为存储增加冗余:
工程师们设计出了RAID这种东西。
和LVM类似,RAID也是在块设备上模拟出新的块设备。不一样的是,RAID要么可以提高冗余程度,要么可以提高读写速度,但是不能随时增减空间。
RAID分为不同的等级(其实叫类型更合适些),比如说有RAID0/1/5/6/10(读一零)。有不同的特性,根据自己选择就好。
一般RAID只有两层逻辑: member partition 和 array。member partitions 作为底层的存储设备,array是新模拟出的设备。
差别和组合
参考: https://wiki.archlinux.org/index.php/Software_RAID_and_LVM
在CentOS上配置一个RAID5 Array
硬件需求
后面的内容需要有几个块设备来完成,用fallocate生成三个文件也可以
[guochao@router-centos ~]$ for i in {1..3}; do fallocate -l 1000000000 test$i; done
[guochao@router-centos ~]$ ls -lh
总用量 2.9G
-rw-rw-r--. 1 guochao guochao 954M 9月 26 23:22 test1
-rw-rw-r--. 1 guochao guochao 954M 9月 26 23:22 test2
-rw-rw-r--. 1 guochao guochao 954M 9月 26 23:22 test3
[guochao@router-centos ~]$ ls -l
总用量 2936488
-rw-rw-r--. 1 guochao guochao 1000000000 9月 26 23:22 test1
-rw-rw-r--. 1 guochao guochao 1000000000 9月 26 23:22 test2
-rw-rw-r--. 1 guochao guochao 1000000000 9月 26 23:22 test3
不过还是建议挂几块硬盘,或者买一个带供电的硬盘座,我从京东买的一个可以热插拔硬盘、Type-C的大约是350RMB。
mdadm
Linux下组建软RAID需要mdadm,这是一个各个发行版都有的工具。抄起你手里的apt/yum/dnf/pacman,装上就行。
建立array一把梭
先选出来你要用来建立array的几块硬盘,比如说sdX sdY sdZ,我们在这里要建一个RAID5阵列md127,所以至少需要三个硬盘
# mdadm create /dev/Array名 --level=RAID等级 --raid-devices=磁盘的数量 磁盘文件A 文件B 文件C ……
mdadm create /dev/md127 --level=5 --raid-devices=3 /dev/sd{X,Y,Z}
(可选)再次分区
parted /dev/dm127
# 跟着提示走就ok
格式化和挂载
https://wiki.archlinux.org/index.php/File_systems
配置别的网络存储的服务
未完待续
附录
假设有N块性能相同的盘做RAID,用N做单位衡量的数值
RAID level | 别名 | 最少磁盘数 | 最大容错量 | 写入速度/IOPS |
---|---|---|---|---|
0 | Stripe | 2 | 0 | N |
1 | Mirror/Redundant | 2 | N-1 | 1 |
5 | - | 3 | N-2 | N-1 |
6 | - | 4 | N-2 | N-2 |
10 | Nested | 4 | N/2(不在同一个RAID1 Array中) | N/2 |