C02S09-Linux磁盘管理之RAID磁盘阵列管理

一、RAID

1. RAID概述

RAID(独立磁盘冗余阵列)是一种将多个硬盘驱动器组合成一个逻辑单元的数据存储虚拟化技术。RAID的主要目的是提高数据的可靠性、容错能力和性能。它通过将数据分散存储在多个硬盘上,来实现数据的冗余备份和性能提升;当其中一个磁盘损坏,不会影响整个阵列的使用。RAID有多种不同的级别,每种级别都有其特定的优势和用途:

  • RAID 0(条带化):将数据分散存储在两个或多个硬盘上,提高读写速度,但没有冗余,任何一个硬盘损坏都会导致数据丢失。需要定期备份数据。
    • 条带化存储技术就是将数据分成多个部分,并存储到不同磁盘上去;缺点是一个硬盘损坏,就会导致数据丢失;但读写性能好,可以并发读写数据。
    • 适用场景:数据安全要求较低的场景。
    • 硬盘数量:N块硬盘。但实际上,1块硬盘做RAID 0没有实际意义。
    • 硬盘利用率:100%,即可用容量是N块硬盘的容量。
  • RAID 1(镜像):数据在两个硬盘上完全复制,提供冗余,如果一个硬盘损坏,另一个硬盘上的数据仍然可用。写数据性能较低。可以使用不同容量大小的硬盘组RAID 1,可用容量取决于容量最小的硬盘。
    • 镜像存储技术是指对存储数据实现副本复制,原数据和副本数据具有一致性,并支持存储系统对源数据和副本数据的独立访问。
    • 适用场景:对数据冗余和高可用性要求较高的场景。
    • 硬盘数量:2N块硬盘。
    • 硬盘利用率:50%,即可用容量是N块硬盘的容量。
  • RAID 5(奇偶校验的条带化):数据被分散存储在多个磁盘驱动器上,通过分布式奇偶校验实现数据的冗余备份。也就是说,奇偶校验位并不是单独存储在一个硬盘上的,而是存储在除了数据所在硬盘的其他硬盘上。允许损坏一块硬盘,系统通过重新计算奇偶校验位来恢复丢失的数据。
    • 数据、校验位数据分散存入各个硬盘。当一个硬盘损坏时,系统可以根据同一条带的其他数据和对应的校验数据来重建损坏的数据。
    • 适用场景:性能增强和数据冗余的场景。
    • 硬盘数量:N块硬盘(N >= 3)。
    • 硬盘利用率:(N-1)/N%,可用容量是N-1块硬盘的容量。
  • RAID 6(双奇偶校验的条带化):与RAID 5类似,但有两个奇偶校验位,允许两个硬盘同时损坏。
    • 适用场景:更高级别的数据冗余和性能增强的场景。
    • 硬盘数量:N块硬盘(N >= 4)。
    • 硬盘利用率:(N-2)/N%,可用容量是N-2块硬盘的容量。
  • RAID 10(也叫做RAID 1+0):结合了RAID 1和RAID 0,实现了数据的条带化存储和镜像存储。先做数据的镜像存储(RAID 1),再做数据的条带化存储(RAID 0)。每个组里可用损坏一块硬盘。
    • 比如有4块硬盘做RAID 10,是先将硬盘分为两个镜像组(RAID1),再对这两个镜像组做条带化(RAID 0)。
    • 硬盘数量:2N块硬盘(2N >= 4)。
    • 硬盘利用率:50%,即可用容量是N块硬盘的容量。
  • RAID 01(也叫做RAID 0+1):与RAID 10类似,但是先做数据的条带化存储(RAID 0),再做数据的镜像存储(RAID 1)。只能有一个镜像组的硬盘损坏。
    • 比如有4块硬盘做RAID 01,是先将两个硬盘做条带化(RAID 0),再对这两个硬盘做镜像(RAID 1)。
    • 硬盘数量:2N块硬盘(2N >= 4)。
    • 硬盘利用率:50%,即可用容量是N块硬盘的容量。
RAID级别硬盘数量硬盘利用率冗余能力读写性能容错能力
RAID 0N100%读写性能最好不能损坏
RAID 12N50%读取性能好,写入性能低只能损坏一块硬盘
RAID 5N(N>=3)(N-1)/N%读取性能中,写入性能低只能损坏一块硬盘
RAID 6N(N>=4)(N-2)/N%读取性能中,写入性能低只能损坏两块硬盘
RAID 102N(2N>=4)50%读取性能高,写入性能中每个镜像组只能损坏一块硬盘

2. mdadm命令 – 管理RAID设备

mdadm命令来自英文词组multiple devices admin的缩写,功能是管理RAID设备,mdadm命令可以进行创建、调整、监控、删除等全套管理操作。

mdadm 选项 设备

常见的选项:

选项功能
-C创建RAID
-D显示RAID信息
-l设置RAID级别
-n设置RAID的硬盘数量
-x设置RAID的热备份硬盘数量

3. 创建RAID的基本流程

  1. 准备硬盘(或分区、逻辑卷)。
  2. 创建RAID。
  3. 格式化RAID的文件系统。
  4. 挂载。

二、创建RAID

  1. 准备硬盘,这里使用6个逻辑卷。

    vgcreate vg01 /dev/sdb1
      Physical volume "/dev/sdb1" successfully created.
      Volume group "vg01" successfully created
      
    lvcreate -n lv01 -L 3G vg01
      Logical volume "lv01" created.
      
    lvcreate -n lv02 -L 3G vg01
      Logical volume "lv02" created.
      
    lvcreate -n lv03 -L 3G vg01
      Logical volume "lv03" created.
      
    lvcreate -n lv04 -L 3G vg01
      Logical volume "lv04" created.
      
    lvcreate -n lv05 -L 3G vg01
      Logical volume "lv05" created.
      
    lvcreate -n lv06 -L 3G vg01
      Logical volume "lv06" created.
    
  2. 使用4个逻辑卷组RAID 10,并设置两个逻辑卷做热备份。

    mdadm -C -v /dev/md10 -l 10 -n 4 /dev/vg01/lv0{1..4} -x 2 /dev/vg01/lv0{5,6}
    

    这个命令的意思是创建一个名为md10的 RAID 10 设备,使用 /dev/vg01/lv01 到 /dev/vg01/lv04 这四个逻辑卷作为数据磁盘,并且使用 /dev/vg01/lv05 和 /dev/vg01/lv06 作为热备磁盘。

  3. 格式化创建好的磁盘阵列md10的文件系统,并挂载。

    mkfs.xfs /dev/md10
    
    mkdir /mnt/md10 && mount /dev/md10 /mnt/md10
    
  4. 查看挂载情况。

    df -h
    
    文件系统        大小  已用  可用 已用% 挂载点
    ……
    /dev/md10       6.0G   76M  6.0G    2% /mnt/md10
    
在执行 `make` 命令时遇到错误提示 `arm-v01c02-linux-musleabi-gcc: Command not found`,通常意味着系统无法找到指定的交叉编译器。以下是几种可能的原因及对应的解决方法: ### 1. 检查交叉编译工具链是否已正确安装 确认交叉编译工具链 `arm-v01c02-linux-musleabi-` 是否已经安装在系统中。可以通过以下命令检查是否存在该编译器: ```bash which arm-v01c02-linux-musleabi-gcc ``` 如果没有输出路径,则表示该工具链未安装或未正确配置。需要下载并安装该工具链,例如从官方或第三方提供的预编译包中获取。 ### 2. 配置环境变量 PATH 确保交叉编译工具链的可执行文件路径已添加到系统的 `PATH` 环境变量中。可以编辑 `~/.bashrc` 或 `/etc/profile` 文件,添加如下内容: ```bash export PATH=/path/to/arm-v01c02-linux-musleabi/bin:$PATH ``` 然后执行以下命令使配置生效: ```bash source ~/.bashrc ``` 替换 `/path/to/arm-v01c02-linux-musleabi` 为实际的工具链安装路径。 ### 3. 检查 Makefile 中的编译器名称 确保 `Makefile` 中使用的编译器名称与系统中安装的工具链名称一致。例如,如果工具链的前缀是 `arm-v01c02-linux-musleabi-`,则 `Makefile` 中的 `CC` 变量应设置为: ```makefile CC = arm-v01c02-linux-musleabi-gcc ``` 如果名称不匹配,修改为正确的编译器名称。 ### 4. 创建符号链接(Symbolic Link) 如果工具链已经安装,但名称与 `Makefile` 中使用的不一致,可以创建符号链接。例如,如果实际的编译器名称为 `arm-none-linux-gnueabi-gcc`,可以执行以下命令创建符号链接: ```bash sudo ln -s /usr/bin/arm-none-linux-gnueabi-gcc /usr/bin/arm-v01c02-linux-musleabi-gcc ``` 这样,系统就能识别 `arm-v01c02-linux-musleabi-gcc` 命令并将其映射到实际存在的编译器。 ### 5. 权限问题 如果使用了 `sudo` 执行 `make` 命令,但提示找不到编译器,可能是由于 `sudo` 的环境变量与普通用户的环境变量不同。可以通过以下方式解决: - 使用 `sudo su` 切换到 root 用户,然后手动设置 `PATH`。 - 修改 `sudoers` 文件,确保 `PATH` 包含交叉编译工具链的路径。 ### 6. 检查工具链依赖项 某些交叉编译工具链依赖于特定的库文件(如 `libstdc++`、`glibc` 等)。如果缺少这些依赖项,可能导致编译器无法运行。可以通过以下命令安装缺失的依赖: ```bash sudo apt-get install libstdc++6 ``` ### 7. 验证工具链的完整性 如果工具链已经安装,但仍然无法找到编译器,可能是工具链文件损坏或未完整安装。尝试重新安装工具链,确保所有文件完整。 ### 8. 使用容器或虚拟机 如果在主机环境中配置工具链遇到困难,可以考虑使用容器(如 Docker)或虚拟机(如 VirtualBox)来运行一个已经配置好工具链的开发环境。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值