Linux-Software-RAID
介绍
什么是 RAID
RAID (Redundant Arrays of Inexpensive Disk, 容错式廉价磁盘阵列), 指一种硬件/软件技术, 将多个较小的磁盘整合成一个较大的磁盘设备. 用于数据存储以及保护.
RAID 分为多个 level, 分别对应不同的功能, 各 level 之间互有优劣:
RAID-0, 性能最佳
RAID-0 模式下, 数据会被等量的放置在各个磁盘中.
如有两个磁盘组成 RAID-0, 当要写入 100MB 数据时, 每个磁盘会分配到 50MB 的存储量.
读取数据时也是从 RAID-0 中所有磁盘读取.
如果 RAID-0 中所有的磁盘为相同型号以及容量, 此时效果最好.
其缺点就在于, 只要其中一块磁盘损坏, 则所有的数据都无法被读取 (因为一份数据是均匀分散到所有磁盘上的).
且当组成 RAID-0 磁盘容量不一致时, 如 200G 和 500G 的两块磁盘, 当 200G 的磁盘被用完之后, 新增的所有数据都会写入 500G 的磁盘中.
RAID-1, 完整备份
RAID-1 模式下, 会让同一份数据完整的保存在两块磁盘上:
如有两块磁盘组成 RAID-1, 当写入一个 100MB 的文件时, 两块磁盘都会同步写入 100MB 的数据.
RAID-1 模式也最好是使用一样的磁盘来组建. 但如果容量不同, 则以总容量最小的一块磁盘为主.
缺点在与 RAID 的容量相当于只有 50%. 且文件写入时性能较差. (主要是软件磁盘阵列比较差, 会占用系统 I/O 总线)
但优点就是任何一块磁盘损坏时, 数据还是能完整保存, 且读取性能还行 (当多个 process 读取同一笔数据时, RAID 会自行平衡).
RAID 1+0, RAID 0+1
RAID 1+0 指, 先将磁盘组成 RAID-1 阵列, 在将多个 RAID-1 阵列组成 RAID-0 阵列:
(RAID 0+1 就是先组 RAID-0 再组 RAID-1)
RAID-5, 性能和数据备份的均衡考虑
RAID-5 至少需要三块以上的磁盘才能组成, 在数据写入时类似 RAID-0, 不过在均匀循环写入的过程中, 会在每块磁盘中写入一个 Parity, 用以记录其他磁盘的备份数据, 用于当有磁盘损毁时修复.
由于 Parity 的存在, RAID-5 实际上的总体容量是整体磁盘数量减一块. 如由 3 块磁盘组成 RAID-5, 就只会剩下 2 块的存储容量.
RAID-5 仅支持一块磁盘损毁, 如果损毁的磁盘数量大于等于两块, 整组的数据都会被损毁.
优点在与读取性能和 RAID-0 接近, 但写入时由于要计算 parity, 则几乎没有性能的提升.
RAID-6, 使用两块磁盘存储 parity
RAID-6 和 RAID-5 类似, 只是会使用两块磁盘来存储 parity, 也即整体磁盘容量会减少两块.
此时容错的磁盘数量为 2.
Spare Disk
Spare Disk 指一块或多块没有包含在原本磁盘阵列中的磁盘, 平时不会被磁盘阵列使用, 但当阵列中有磁盘损毁时, spare disk 会被主动拉进磁盘阵列中, 并将损坏的磁盘移除磁盘阵列.
software, hardware RAID
Hardware RAID, 指通过磁盘阵列卡来达成阵列. 磁盘阵列卡上有一块专门的芯片处理 RAID 的任务, 因此在性能上会比较好. (毕竟不消耗系统 I/O 了) 且一般的中高阶磁盘阵列卡都支持热插拔, 即在不关机的情况下抽换损坏的磁盘.
但好的磁盘阵列卡价格比较贵, 而低端的磁盘阵列卡仅支持低端功能. 且需要操作系统有磁盘阵列卡的驱动.
Software RAID 则是用软件来仿真阵列, 因此会消耗较多系统资源, 如 CPU 算力和 I/O 总线的资源.
软件磁盘阵列的设置
使用 mdadm
(“Multiple Device Administration”) 命令.
常用参数有:
--create
, 表示当前是创建 RAID--auto=yes
, 表明创建软件磁盘阵列设备--chunk=Nk
, 决定设备的chunk
,stripe
大小, 一般是 64K 或 512K--raid-devices=N
, 使用几个磁盘作为磁盘阵列--spare-devices=N
, 使用几个磁盘作为 spare disk--level=[015]
, 设置磁盘阵列的等级 (这里建议用0, 1, 5)--detail
, 查看一个阵列的详细信息
语法如:
1 |
|
命令最后接的是设备文件名, 其可以是一整块磁盘, 也可以是分区, 注意提供的数量要与 --raid-devices
和 --spare-devices
指定数目的和相同.
创建和挂载示例
假设要创建一个 RAID 5 环境:
- 利用 4 个 partition 组成 RAID 5
- 每个 partition 大小为 1G
- 再用 1 个 partition 作为 spare disk, 也是 1G
- chunk 设置为 256K
- 将 RAID 5 设备挂载到
/srv/raid
目录下
创建 5 个分区以供使用
这里通过一个 loop 设备来模拟:
1 |
|
创建出的分区结构大概为:
1 |
|
创建 RAID
1 |
|
查看 RAID 信息
1 |
|
也可以通过:
1 |
|
来查看阵列信息.
格式化与挂载使用 RAID
1 |
|
RAID 的救援模式
语法为:
1 |
|
--add
, 指添加 device 到 md 中--remove
, 指将指定 device 从 md 中移除--fail
, 将指定 device 设置为出错的状态
将一个 device 标记为 fail
之后, RAID 会自动用 spare disk 进行重建.
标记一个 device 为 fail
1 |
|
将一个 device 移出 RAID
1 |
|
将一个 device 添加回 RAID
1 |
|
开机自动启动 RAID 并自动挂载
大多数 Linux 发行版都会自己搜寻 /dev/md[0-9]
并在开机时设置好所需的功能.
也可以自行配置 software RAID, 其配置文件为 /etc/mdadm.conf
.
只需要知道 RAID 设备的 UUID 即可设置:
1 |
|
修改 /etc/mdadm.conf
内容来自动启动 RAID:
1 |
|
修改 /etc/fstab
自动挂载 RAID:
1 |
|
关闭 RAID
1 |
|
之后注释掉写在 /etc/fstab
以及 /etc/mdadm.conf
中的条目.
覆盖掉 RAID 中的 metadata:
1 |
|
关闭 RAID:
1 |
|
覆盖掉各分区中的 RAID 的 metadata:
1 |
|