第 7 章 Linux Raid 存储管理
RAID 独立磁盘冗余阵列(Redundant Array of Independent Disks),RAID 技术是将许多块硬盘设备组合成一个容量更大、更安全的硬盘组。
RAID 可以将数据切割成多个区段后分别存放在各个不同物理硬盘设备上,然后利用分散读写需求来提升硬盘组整体的性能,同时将重要数据同步保存多份到不同的物理硬盘设备上,可以有非常好的数据备份效果。
由于对成本和技术两方面的考虑,因此需要针对不同的需求在数据可靠性及读写性能上做权衡,制定出各自不同的合适方案,目前已有的 RAID 硬盘组的方案至少有十几种,RAID0、RAID1、RAID5、RAID10 和 RAID01 是五种最常见的方案。
7.1、常用 RAID 组
7.1.1、RAID 0
RAID0 硬盘组是将 2 块或更多物理硬盘设备通过硬件或软件的方式串联在一起,成为一个大的卷组,有时它称为条带卷(striping)。
RAID0 将数据依次分别写入到各个物理硬盘中,这样最理想的状态会使得读写性能提升数倍,但若任意一块硬盘故障则会让整个系统的数据都受到破坏。
RAID0 模型如下图:

7.1.2、RAID 1
RAID1 硬盘组技术是将 2 块或更多的存储设备进行绑定,目的是让数据被多块硬盘同时写入,类似于把数据再制作出多份镜像,当有某一块硬盘损坏后,一般可以立即通过热交换方式来恢复数据的正常使用。
RAID1 注重了数据的安全性,但因为是将多块硬盘中写入相同的数据,也就是说硬盘空间的真实可用率在理论上只有 50%(利用率是1/n,n是阵列中的磁盘数量,不分奇偶),因此会明显的提高硬盘组成本。
RAID1 需要将数据同时写入到两块以上的硬盘设备中,这无疑也会增加一定系统负载。
RAID1 因为同一份数据保存了多份,所以读性能和 RAID0 是一样的(粗略的说是一样。更细致的要分随机读、顺序读,这时不一定和 raid0 一样)。
RAID1 模型如下图:

7.1.3、RAID 5
RAID5 需要 3 块或更多硬盘组成硬盘组,一份数据按照一定大小拆开,并且按照特定的算法,每 N-1 份数据计算一份校验数据,拆分的数据和校验数据平均分散存储在组成 RAID 5 的各个磁盘上。
RAID5 容量是单个硬盘的 N-1 倍,持续读取速度是单个硬盘的 N-1 倍,持续写入速度要看 RAID 控制器的性能和写入策略,理论上最高写入速度可以达到单个硬盘的 N-1 倍。
RAID5 数据安全方面,如果一个硬盘坏了,阵列会降级为 RAID0 运行;用新硬盘替换旧硬盘可以重建 RAID5。
RAID5 模型如下图:

7.1.4、RAID 10
RAID10 需要至少 4 块硬盘,先分别两两制作成 RAID1,保证数据的安全性,然后再对两个 RAID1 实施 RAID0 技术,进一步的提高存储设备的读写速度。
RAID10 理论上只要坏的不是同一组中的所有硬盘,那么最多可以损坏 50% 的硬盘设备而不丢失数据。
RAID10 硬盘组技术继承了 RAID0 更高的读写速度和 RAID1 更安全的数据保障,在不考虑成本的情况下 RAID10 在读写速度和数据保障性方面都超过了 RAID5,是较为广泛使用的存储技术。
RAID10 模型如下图:根据数据复制的偏移方式不同,分如下图三种方式。

7.1.5、RAID 01
RAID 10 是 RAID1+RAID0,而 RAID01 则是 RAID0+RAID1。看起来它们是相同的,但实际上它们的差别在安全性上差很大。
RAID 01 模型如下图:

从图中可以看出,在 RAID01 正常工作的时候,它的性能和 RAID10 是一样的,都是条带一份,镜像一份。但是区别就在于安全性上。
如果 RAID0 组中的一块磁盘坏了,对于这一个 RAID0 组来说,它已经失效了,并不是还可以从该组中的另一块磁盘中读取一半数据。
也就是说,RAID01 只要坏了一块盘后,该 RAID0 组就失效,IO 的压力就只在另一个 RAID0 组上,这很容易导致这一个 RAID0 组也损坏磁盘,只要这时再坏一块盘,所有数据就丢失了。
RAID01 基本无人使用,太不安全。
7.2、Linux 软 raid 管理
在生产应用环境当中,绝大多数用的是 RAID 卡组成的硬 RAID 阵列;少数情况下因为成本原因,选择了软 RAID 方式,这种方式可靠性也是相当不错的。
7.2.1、实现 RAID10
实验环境:我们使用一台 ARM64 架构的飞腾 2000+ 的物理服务器做实验,64 核 256G内存,6 块 SSD,20 块 HDD,Logic MegaRAID SAS-3 3108 硬 RAID 卡,板载 2 口千兆,2 张 82599ES 10-Gigabit SFI/SFP+ 双万兆口网卡。当然这台服务器配置很高,目前只需使用 4 个 SSD 硬盘实现软 RAID。
mdadm 工具用于在 Linux 系统中创建和管理软 RAID。
mdadm 命令语法格式为:
mdadm [模式] <RAID设备名称> [选项] [成员设备名称]
选项说明:
【创建模式】
-C:创建(create a new array)
-l:指定raid级别(Set RAID level,0,1,5,10)
-c:指定chunk大小(Specify chunk size of kibibytes,default 512KB)
-a:检测设备名称(--auto=yes),yes表示自动创建设备文件/dev/mdN
-n:指定设备数量(--raid-devices:Specify the number of active devices in the array)
-x:指定备用设备数量(--spare-devices:Specify the number of spare (eXtra) devices in the initial array)
-v:显示过程
-f:强制行为
-r:移除设备(remove listed devices)
-S:停止阵列(--stop:deactivate array, releasing all resources)
-A:装配阵列,将停止状态的阵列重新启动起来
【监控模式】
-Q:查看摘要信息(query)
-D:查看详细信息(Print details of one or more md devices)
    mdadm -D --scan >/etc/mdadm.conf,以后可以直接mdadm -A进行装配这些阵列
【管理模式】
mdadm --manage /dev/md[0-9] [--add 设备名] [--remove 设备名] [--fail 设备名]
--manage :mdadm使用manage模式,此模式下可以做--add/--remove/--fail/--replace动作
-add     :将后面列出的设备加入到这个md
--remove :将后面列出的设备从md中移除,相当于硬件raid的拔出动作
--fail   :将后面列出的设备设定为错误状态,即人为损坏,损坏后该设备放在raid中已经是无意义状态的
- 
我们选择其中的 4 块未使用的 SSD,另外 2 块 SSD 已经做了硬 RAID1 装系统了。通过系统查看,这 4 块未使用的 SSD 分别为 /dev/sdb、/dev/sdc、/dev/sdd 和 /dev/sde,单盘容量为 447.130GB。
[root@arm64v8 ~]# storcli /c0 show PD LIST : ======= --------------------------------------------------------------------------------- EID:Slt DID State DG Size Intf Med SED PI SeSz Model Sp Type --------------------------------------------------------------------------------- 18:0 30 JBOD - 447.130 GB SATA SSD N N 512B INTEL SSDSC2KB480G8 U - 18:1 33 JBOD - 447.130 GB SATA SSD N N 512B INTEL SSDSC2KB480G8 U - 18:2 31 JBOD - 447.130 GB SATA SSD N N 512B INTEL SSDSC2KB480G8 U - 18:3 34 JBOD - 447.130 GB SATA SSD N N 512B INTEL SSDSC2KB480G8 U - 18:4 10 JBOD - 2.182 TB SAS HDD N N 512B AL15SEB24EQ U - 18:5 27 JBOD - 2.182 TB SAS HDD N N 512B AL15SEB24EQ U - 18:6 14 JBOD - 2.182 TB SAS HDD N N 512B AL15SEB24EQ U - 18:7 12 JBOD - 2.182 TB SAS HDD N N 512B AL15SEB24EQ U - 18:8 17 JBOD - 2.182 TB SAS HDD N N 512B AL15SEB24EQ U - 18:9 8 JBOD - 2.182 TB SAS HDD N N 512B AL15SEB24EQ U - 18:10 21 JBOD - 2.182 TB SAS HDD N N 512B AL15SEB24EQ U - 18:11 22 JBOD - 2.182 TB SAS HDD N N 512B AL15SEB24EQ U - 18:12 9 JBOD - 2.182 TB SAS HDD N N 512B AL15SEB24EQ U - 18:13 23 JBOD - 2.182 TB SAS HDD N N 512B AL15SEB24EQ U - 18:14 15 JBOD - 2.182 TB SAS HDD N N 512B AL15SEB24EQ U - 18:15 24 JBOD - 2.182 TB SAS HDD N N 512B AL15SEB24EQ U - 18:16 11 JBOD - 2.182 TB SAS HDD N N 512B AL15SEB24EQ U - 18:17 28 JBOD - 2.182 TB SAS HDD N N 512B AL15SEB24EQ U - 18:18 26 JBOD - 2.182 TB SAS HDD N N 512B AL15SEB24EQ U - 18:19 20 JBOD - 2.182 TB SAS HDD N N 512B AL15SEB24EQ U - 18:20 13 JBOD - 2.182 TB SAS HDD N N 512B AL15SEB24EQ U - 18:21 16 JBOD - 2.182 TB SAS HDD N N 512B AL15SEB24EQ U - 18:22 19 JBOD - 2.182 TB SAS HDD N N 512B AL15SEB24EQ U - 18:23 25 JBOD - 2.182 TB SAS HDD N N 512B AL15SEB24EQ U - 252:0 29 Onln 0 446.625 GB SATA SSD N N 512B INTEL SSDSC2KB480G8 U - 252:1 32 Onln 0 446.625 GB SATA SSD N N 512B INTEL SSDSC2KB480G8 U - --------------------------------------------------------------------------------- - 
使用 mdadm 命令创建 RAID10,名称为 "/dev/md0"。
[root@arm64v8 ~]# mdadm -C /dev/md0 -n 4 -l 10 -a yes /dev/sd{b,c,d,e} mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md0 started. [root@arm64v8 ~]#- -C 参数代表创建一个 RAID 阵列卡
 - -a yes 参数代表自动创建设备文件
 - -n 4 参数代表使用 4 块硬盘来制作这个 RAID 组
 - -l 10 参数则代表 RAID10
 - -v 参数来显示出创建的过程,同时在后面追加一个设备名称
 
查看 RAID 设备信息
[root@arm64v8 ~]# mdadm -D /dev/md0 /dev/md0: Version : 1.2 Creation Time : Thu Jun 24 16:25:51 2021 Raid Level : raid10 Array Size : 937438208 (894.01 GiB 959.94 GB) # 总共能使用的空间,因为是raid10,所以总可用空间为894GiB左右 Used Dev Size : 468719104 (447.01 GiB 479.97 GB) # 每个raid组或设备上的可用空间,也即每个RAID1组可用大小为447GiB左右 Raid Devices : 4 # raid中设备的个数 Total Devices : 4 # 总设备个数,包括raid中设备个数,备用设备个数等 Persistence : Superblock is persistent Intent Bitmap : Internal Update Time : Thu Jun 24 16:29:00 2021 State : clean, resyncing # 当前raid状态,有clean/degraded(降级)/recovering/resyncing Active Devices : 4 Working Devices : 4 Failed Devices : 0 Spare Devices : 0 Layout : near=2 # RAID10数据分布方式,有near/far/offset,默认为near,即数据的副本存储在相邻设备的相同偏移上。near=2表示要备份2份数据 Chunk Size : 512K Consistency Policy : bitmap Resync Status : 4% complete Name : arm64v8:0 (local to host arm64v8) UUID : f9f70e82:7bd3a018:57bccfcb:e699365d Events : 36 Number Major Minor RaidDevice State 0 8 16 0 active sync set-A /dev/sdb # 第一个raid1组A成员 1 8 32 1 active sync set-B /dev/sdc # 第一个raid1组B成员 2 8 48 2 active sync set-A /dev/sdd # 第二个raid1组A成员 3 8 64 3 active sync set-B /dev/sde # 第二个raid1组B成员 [root@arm64v8 ~]#raid 创建好后,它的运行状态信息放在 /proc/mdstat 中。
[root@arm64v8 ~]# cat /proc/mdstat Personalities : [raid10] md0 : active raid10 sde[3] sdd[2] sdc[1] sdb[0] 937438208 blocks super 1.2 512K chunks 2 near-copies [4/4] [UUUU] [=====>...............] resync = 25.3% (237395968/937438208) finish=56.1min speed=207803K/sec bitmap: 1/1 pages [64KB], 65536KB chunk unused devices:[root@arm64v8 ~]# - "md0 : active raid10 sde[3] sdd[2] sdc[1] sdb[0]" 表示 md0 是 raid10 级别的 raid,且是激活状态,sdX[N] 表示该设备在 raid 组中的位置是 N,如果有备用设备,则表示方式为 sdX[N][S],S 就表示 spare 的意思。
 - "937438208 blocks super 1.2 512K chunks 2 near-copies [4/4] [UUUU]" 表示该 raid 可用总空间为 937438208 个 blocks,chunks 的大小 512K,[m/n] 表示此 raid10 阵列需要 m 个设备,且 n 个设备正在正常运行,[UUUU] 分别表示 m 个的每一个运行状态,这里表示这 4 个设备都是正常工作的,如果是不正常的,则以 "_" 显示。
 - "[===>.........]" 这一行表示数据正在同步已完成多少,还需要多少分钟,同步速度是多少。
 
再看看lsblk的结果
[root@arm64v8 ~]# lsblk -f NAME FSTYPE LABEL UUID FSAVAIL FSUSE% MOUNTPOINT sda ├─sda1 vfat 3A6D-9E42 194.1M 3% /boot/efi ├─sda2 ext4 d533f939-91c7-481a-a460-ddbea8197c6b 743.8M 17% /boot ├─sda3 ext4 29df12e4-805b-44a7-9550-078075a521c1 408.6G 1% / └─sda4 swap c1507076-744d-4a85-9a29-ff49e5659a3d [SWAP] sdb linux_raid_me arm64v8:0 f9f70e82-7bd3-a018-57bc-cfcbe699365d └─md0 sdc linux_raid_me arm64v8:0 f9f70e82-7bd3-a018-57bc-cfcbe699365d └─md0 sdd linux_raid_me arm64v8:0 f9f70e82-7bd3-a018-57bc-cfcbe699365d └─md0 sde linux_raid_me arm64v8:0 f9f70e82-7bd3-a018-57bc-cfcbe699365d └─md0 ...... - 
将制作好的 RAID 组格式化创建文件系统。
[root@arm64v8 ~]# mke2fs -t ext4 /dev/md0 - 
挂载 raid 设备,挂载成功后可看到可用空间为879G,因为 RAID 在创建文件系统时也消耗了一部分空间存储文件系统的元数据。
[root@arm64v8 ~]# mount /dev/md0 /mnt/ [root@arm64v8 ~]# df -hT Filesystem Type Size Used Avail Use% Mounted on devtmpfs devtmpfs 127G 0 127G 0% /dev tmpfs tmpfs 127G 0 127G 0% /dev/shm tmpfs tmpfs 127G 17M 127G 1% /run tmpfs tmpfs 127G 0 127G 0% /sys/fs/cgroup /dev/sda3 ext4 434G 2.9G 409G 1% / tmpfs tmpfs 127G 0 127G 0% /tmp /dev/sda2 ext4 976M 165M 744M 19% /boot /dev/sda1 vfat 200M 5.8M 195M 3% /boot/efi tmpfs tmpfs 26G 0 26G 0% /run/user/0 /dev/md0 ext4 879G 72M 835G 1% /mnt [root@arm64v8 ~]# 
7.2.2、磁盘阵列损坏及修复
通过 manage 模式可以模拟阵列中的设备损坏。
mdadm --manage /dev/md[0-9] [--add 设备名] [--remove 设备名] [--fail 设备名]
选项说明:
--manage :mdadm使用manage模式,此模式下可以做--add/--remove/--fail/--replace动作
--add    :将后面列出的设备加入到这个md
--remove :将后面列出的设备从md中移除
--fail   :将后面列出的设备设定为错误状态,即人为损坏
模拟 /dev/sde 损坏。
[root@arm64v8 ~]# mdadm --manage /dev/md0 --fail /dev/sde 
mdadm: set /dev/sde faulty in /dev/md0
[root@arm64v8 ~]# 
再查看 raid 状态。
[root@arm64v8 ~]# mdadm -D /dev/md0 
/dev/md0:
           Version : 1.2
     Creation Time : Thu Jun 24 16:25:51 2021
        Raid Level : raid10
        Array Size : 937438208 (894.01 GiB 959.94 GB)
     Used Dev Size : 468719104 (447.01 GiB 479.97 GB)
      Raid Devices : 4
     Total Devices : 4
       Persistence : Superblock is persistent
     Intent Bitmap : Internal
       Update Time : Thu Jun 24 20:22:44 2021
             State : active, degraded 
    Active Devices : 3
   Working Devices : 3
    Failed Devices : 1
     Spare Devices : 0
            Layout : near=2
        Chunk Size : 512K
Consistency Policy : bitmap
              Name : arm64v8:0  (local to host arm64v8)
              UUID : f9f70e82:7bd3a018:57bccfcb:e699365d
            Events : 893
    Number   Major   Minor   RaidDevice State
       0       8       16        0      active sync set-A   /dev/sdb
       1       8       32        1      active sync set-B   /dev/sdc
       2       8       48        2      active sync set-A   /dev/sdd
       -       0        0        3      removed
       3       8       64        -      faulty   /dev/sde
[root@arm64v8 ~]#
- 由于 4 块磁盘组成的 raid10 允许损坏一块盘,且还允许坏第二块非对称盘。所以这里损坏了一块盘后 raid10 是可以正常工作的。
 
现在可以将损坏的磁盘拔出,然后向 raid 中加入新的磁盘即可。
[root@arm64v8 ~]# mdadm --manage /dev/md0 --remove /dev/sde
mdadm: hot removed /dev/sde from /dev/md0
[root@arm64v8 ~]#
再修复时,可以将新磁盘加入到 raid 中。
[root@arm64v8 ~]# mdadm --manage /dev/md0 --add /dev/sde
mdadm: re-added /dev/sde
[root@arm64v8 ~]# cat /proc/mdstat 
Personalities : [raid10] 
md0 : active raid10 sde[3] sdd[2] sdc[1] sdb[0]
      937438208 blocks super 1.2 512K chunks 2 near-copies [4/3] [UUU_]
      [=========>...........]  recovery = 49.9% (233898048/468719104) finish=0.2min speed=19491504K/sec
      bitmap: 1/1 pages [64KB], 65536KB chunk
unused devices: <none>
[root@arm64v8 ~]#
7.2.3、raid 备用盘
使用 mdadm 的 "-x" 选项可以指定备用盘的数量,备用盘的作用是自动顶替 raid 组中坏掉的盘。
实验环境中还有大量的磁盘没有使用,我们取 /dev/sdf、/dev/sdg、/dev/sdh、/dev/sdi、/dev/sdj 和 /dev/sdk 做备用盘实验。
[root@arm64v8 ~]# fdisk -l | grep "Disk /dev/sd[fghijk]"
Disk /dev/sdf: 2.19 TiB, 2400476553216 bytes, 4688430768 sectors
Disk /dev/sdg: 2.19 TiB, 2400476553216 bytes, 4688430768 sectors
Disk /dev/sdh: 2.19 TiB, 2400476553216 bytes, 4688430768 sectors
Disk /dev/sdi: 2.19 TiB, 2400476553216 bytes, 4688430768 sectors
Disk /dev/sdj: 2.19 TiB, 2400476553216 bytes, 4688430768 sectors
Disk /dev/sdk: 2.19 TiB, 2400476553216 bytes, 4688430768 sectors
[root@arm64v8 ~]#
根据前面实验的基础,直接使用一行命令实现创建 raid10 的同时创建两个备用盘。
[root@arm64v8 ~]# mdadm -C /dev/md1 -l10 -n4 -x2 -a yes /dev/sd{f,g,h,i,j,k}
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md1 started.
[root@arm64v8 ~]#
- 此行命令等效于 mdadm --create --auto=yes /dev/md1 --level=10 --raid-devices=4 --spare-devices=2 /dev/sd{f,g,h,i,j,k}
 
查看刚创建的 raid10 状态
[root@arm64v8 ~]# cat /proc/mdstat 
Personalities : [raid10] 
md1 : active raid10 sdk[5](S) sdj[4](S) sdi[3] sdh[2] sdg[1] sdf[0]
      4688165888 blocks super 1.2 512K chunks 2 near-copies [4/4] [UUUU]
      [=>...................]  resync =  7.0% (329351168/4688165888) finish=361.4min speed=201003K/sec
      bitmap: 3/3 pages [192KB], 65536KB chunk
unused devices: <none>
[root@arm64v8 ~]#
- sdk[5](S) sdj[4](S) 这两个盘就是备用盘。
 - 从进度条来看,要完成 100% 数据同步,大概需要 6 个小时,当前实验用的是生产环境服务器,6 个盘都是 2.19 TiB,容量较大。
 - 对于生产环境来说,raid 中坏一块盘,恢复数据是极慢的,本人经历过无数这种痛苦时期,这里的软 raid 是这样,硬 raid 也是如此。
- 建议生产环境中使用 1 到 2 块盘用作备用盘,raid 阵列中有坏盘时,备用盘可以自动顶上,然后手动更换坏盘并设为备用盘,如此循环运维,方便很多。
 
 
模拟 /dev/sdi 盘故障,然后看备用盘是否自动顶上。
# 模拟 /dev/sdi 盘故障
[root@arm64v8 ~]# mdadm --manage /dev/md1 --fail /dev/sdi
mdadm: set /dev/sdi faulty in /dev/md1
[root@arm64v8 ~]# 
# 查看发现 /dev/sdk 备用盘自动顶上
[root@arm64v8 ~]# mdadm -D /dev/md1 | grep "/dev"
/dev/md1:
       0       8       80        0      active sync set-A   /dev/sdf
       1       8       96        1      active sync set-B   /dev/sdg
       2       8      112        2      active sync set-A   /dev/sdh
       5       8      160        3      spare rebuilding   /dev/sdk
       3       8      128        -      faulty   /dev/sdi
       4       8      144        -      spare   /dev/sdj
[root@arm64v8 ~]# 
# 查看数据同步进度条依然很慢,但是好在是自动完成
[root@arm64v8 ~]# cat /proc/mdstat 
Personalities : [raid10] 
md1 : active raid10 sdk[5] sdj[4](S) sdi[3](F) sdh[2] sdg[1] sdf[0]
      4688165888 blocks super 1.2 512K chunks 2 near-copies [4/3] [UUU_]
      [>....................]  recovery =  0.5% (13299968/2344082944) finish=194.2min speed=200021K/sec
      bitmap: 0/3 pages [0KB], 65536KB chunk
unused devices: <none>
[root@arm64v8 ~]#
7.2.4、停止和装配 raid
关闭 raid 阵列后,该 raid 组 /dev/md0 就停止工作了。
# 先卸载后停止 raid
[root@arm64v8 ~]# umount /dev/md0 
[root@arm64v8 ~]# mdadm --stop /dev/md0 
mdadm: stopped /dev/md0
[root@arm64v8 ~]# 
[root@arm64v8 ~]# 
# 查看 raid10 的状态
[root@arm64v8 ~]# cat /proc/mdstat 
Personalities : [raid10] 
unused devices: <none>
[root@arm64v8 ~]# 
[root@arm64v8 ~]# mdadm -D -s
[root@arm64v8 ~]# mdadm -D /dev/md0
mdadm: cannot open /dev/md0: No such file or directory
[root@arm64v8 ~]#
- 当停止 raid 10 后,内存中看不到 raid 10 的状态,/dev/md0 字符设备也取消了。
 
如果下次想继续启动它,直接使用 -A 来装配 /dev/md0 是不可以的,需要再次指定该 raid 中的设备成员,且和关闭前的成员一样,不能有任何不同。
[root@arm64v8 ~]# mdadm -A /dev/md0 /dev/sd{b,c,d,e}
mdadm: /dev/md0 has been started with 4 drives.
[root@arm64v8 ~]# cat /proc/mdstat 
Personalities : [raid10] 
md0 : active raid10 sdb[0] sde[3] sdd[2] sdc[1]
      937438208 blocks super 1.2 512K chunks 2 near-copies [4/4] [UUUU]
      bitmap: 0/1 pages [0KB], 65536KB chunk
unused devices: <none>
[root@arm64v8 ~]#
上面做法风险太大,如果盘比较多很容易出错,其实可以在停止 raid 前,扫描 raid,将扫描的结果保存到配置文件中,下次启动的时候直接读取配置文件即可。
# 这是默认配置文件
[root@arm64v8 ~]# mdadm -D --scan >> /etc/mdadm.conf
[root@arm64v8 ~]#
下次直接使用 -A 就可以装置配置文件中的 raid 组。
[root@arm64v8 ~]# mdadm -A /dev/md0
如果不放在默认配置文件中,则装配的时候使用 "-c" 或 "--config" 选项指定配置文件即可。
[root@arm64v8 ~]# mdadm -D --scan >> /tmp/mdadm.conf
[root@arm64v8 ~]# mdadm -A /dev/md0 -c /tmp/mdadm.conf
7.2.5、彻底移除 raid 设备
当已经确定一个磁盘不需要再做为 raid 的一部分,可以将它移除掉。彻底移除一个 raid 设备并非那么简单,因为 raid 控制器已经标记了一个设备,即使将它 "mdadm --remove" 也无法彻底消除 raid 的信息。
所以想要彻底移除 raid 设备,严格执行下面步骤:
- 
确认 raid 阵列由哪些设备组成,需要提前记下来。
[root@arm64v8 ~]# mdadm -D /dev/md0 | grep "/dev/" /dev/md0: 0 8 16 0 active sync set-A /dev/sdb 1 8 32 1 active sync set-B /dev/sdc 2 8 48 2 active sync set-A /dev/sdd 3 8 64 3 active sync set-B /dev/sde [root@arm64v8 ~]# - 
先 umount 组建好的 raid
[root@arm64v8 ~]# umount /dev/md0 [root@arm64v8 ~]# - 
停止 raid 设备
[root@arm64v8 ~]# mdadm --stop /dev/md0 mdadm: stopped /dev/md0 [root@arm64v8 ~]# - 
删除 raid 里的所有硬盘
[root@arm64v8 ~]# mdadm --misc --zero-superblock /dev/sdb [root@arm64v8 ~]# mdadm --misc --zero-superblock /dev/sdc [root@arm64v8 ~]# mdadm --misc --zero-superblock /dev/sdd [root@arm64v8 ~]# mdadm --misc --zero-superblock /dev/sde [root@arm64v8 ~]#- 第 1 步就是为这一步做的准备
 - 这一步很关键,如果不执行这一步,就算 "mdadm --remove" 移除设备,该设备也无法另作它用,因为该设备中还记录了 raid superblock 配置信息,只能使用 0(--zero-superblock) 将其覆盖。
 - 有几块硬盘,就按格式删几次,注意最后面的硬盘名称。
 
 - 
删除配置文件
[root@arm64v8 ~]# rm -rf /etc/mdadm.conf [root@arm64v8 ~]# - 
如果之前将 raid 相关信息写入了 /etc/fstab 配置文件中,还需 vim /etc/fstab,将 raid 相关的内容删除即可。
 
7.3、Linux 硬 raid 管理
说到 linux 硬 raid 管理,可能有人会疑惑,硬 raid 不是使用 raid 卡管理硬盘,在 bios 下进行图形化管理岂不是很方便,并不涉及 linux 系统层啊。
没错,用 bios 层图形化管理 raid 确实非常方便,但是我要说的是,本人职业生涯中绝大多数修复 raid 阵列,甚至是创建 raid 阵列都是在 linux 系统层完成的。
原因在于大多数情况下,硬 raid 出现问题,是因为存储服务器已经使用了 2 - 3 年,甚至更久,磁盘已达生命周期坏掉了,必须换新继续使用。此时,如果想要使用 bios 进行配置,需要重启 linux 操作系统,这是很不明智的选择,本人曾经就有过血的教训,特此警示。
最好的方式,在操作系统里面使用 Megacli 或者 storcli 工具操作 raid。Megacli 是早期使用的 raid 管理工具,晦涩难懂,而且没有 arm64v8 版本。storcli 工具是下一代用来代替 Megacli 的,功能更加强大,使用简单方便,而且支持 arm64v8 版本。

7.3.1、storcli 命令基础
7.3.1.1、基本语法
storcli <[object identifier]> <verb> <[adverb | attributes | properties] > <[key=value]>
参数解释:
| object identifier | 解释 | 例子 | 说明 | 
|---|---|---|---|
| /c | 控制器 | /c0 | 第一个控制器 | 
| /v | VD | /v0 | 第一个 VD | 
| /e | enclosure | /e0 | 第一个 enclosure | 
| /f | 外部配置 | /f0 | 第一个外部配置 | 
| /s | slot | /s0 | 第一个 slot | 
| /d | 磁盘驱动 | /d0 | 第一个磁盘驱动 | 
参数解释:
| verb | 功能描述 | 
|---|---|
| add | 添加虚拟磁盘、JBODs等到对象标识符中 | 
| compare | 将输入值与系统值进行比较 | 
| del | 删除对象标识符的磁盘、值或属性 | 
| download | 下载并将文件闪存到目标 | 
| expand | 扩展虚拟磁盘的大小 | 
| erase | 根据指定的参数擦除控制器上的特定区域 | 
| flush | 刷新控制器缓存或磁盘缓存 | 
| flasherase | 擦除控制器上的闪存 | 
| get | 从控制器获取数据 | 
| import | 将外部配置导入到磁盘中 | 
| insert | 替换标识为缺失的已配置磁盘,并启动自动重修复 | 
| pause | 暂停正在进行的操作 | 
| resume | 继续暂停的操作 | 
| restart | 在不重启系统的情况下重新启动控制器 | 
| set | 设置对象标识符的值 | 
| show | 显示对象标识符的值和属性 | 
| split | 使您能够在磁盘组上执行中断镜像操作 | 
| suspend | 挂起正在执行的特定操作 | 
| start | 开始一个操作 | 
| stop | 停止正在进行的操作。已停止的进程无法恢复 | 
| spinup | 使连接到控制器的磁盘旋转起来 | 
| spindown | 关闭一个未配置的磁盘,并准备移除它 | 
| shutdown | 关闭控制器 | 
| transform | 降级控制器上的固件内存 | 
<[adverb | attributes | properties]> :指定动词修饰或显示的内容
<[key=value]>:如果命令需要一个值,则指定一个值。
举一个小例子:
# 打开第一个控制器的报警设置
[root@arm64v8 ~]# storcli /c0 set alarm=on
CLI Version = 007.1316.0000.0000 Mar 12, 2020
Operating system = Linux 4.19.90-17.ky10.aarch64
Controller = 0
Status = Success
Description = None
Controller Properties :
=====================
----------------
Ctrl_Prop Value 
----------------
Alarm     ON    
----------------
7.3.1.2、系统命令
| 命令 | 说明 | 
|---|---|
| storcli show | 查看 RAID 控制器的摘要信息 | 
| storcli show all | 查看详细的 RAID 控制器信息 | 
| storcli show ctrlcount | 查看 RAID 卡控制器数量 | 
| storcli show help | 查看 Storcli 帮助 | 
| storcli -v | 查看 Storcli 版本 | 
举个小例子:
[root@arm64v8 ~]# storcli show
CLI Version = 007.1316.0000.0000 Mar 12, 2020
Operating system = Linux 4.19.90-17.ky10.aarch64
Status Code = 0
Status = Success
Description = None
Number of Controllers = 1
Host Name = arm64v8
Operating System  = Linux 4.19.90-17.ky10.aarch64
StoreLib IT Version = 07.1400.0200.0200
System Overview :
===============
------------------------------------------------------------------------------------
Ctl Model                   Ports PDs DGs DNOpt VDs VNOpt BBU sPR DS  EHS ASOs Hlth 
------------------------------------------------------------------------------------
  0 AVAGOMegaRAIDSAS9361-8i     8  26   1     0   1     0 N/A On  1&2 Y      3 Opt  
------------------------------------------------------------------------------------
Ctl=Controller Index|DGs=Drive groups|VDs=Virtual drives|Fld=Failed
PDs=Physical drives|DNOpt=Array NotOptimal|VNOpt=LD NotOptimal|Opt=Optimal
Msng=Missing|Dgd=Degraded|NdAtn=Need Attention|Unkwn=Unknown
sPR=Scheduled Patrol Read|DS=DimmerSwitch|EHS=Emergency Spare Drive
Y=Yes|N=No|ASOs=Advanced Software Options|BBU=Battery backup unit/CV
Hlth=Health|Safe=Safe-mode boot
7.3.1.3、控制器命令
| 命令 | 说明 | 
|---|---|
| show | 查看控制器所有属性 | 
| set <properties> | 设置控制器属性 | 
| show <properties> | 查看控制器某个属性 | 
举个小例子:
[root@arm64v8 ~]# storcli /c0 show alarm
CLI Version = 007.1316.0000.0000 Mar 12, 2020
Operating system = Linux 4.19.90-17.ky10.aarch64
Controller = 0
Status = Success
Description = None
Controller Properties :
=====================
----------------
Ctrl_Prop Value 
----------------
Alarm     ON    
----------------
服务器支持的常用属性如下:
| 属性名 | 参数值 | 说明 | 
|---|---|---|
| alarm | on|off|silence | 设置蜂鸣器,开、关、静音 | 
| bgirate | 0 to 100 | 设置后台初始化占用系统百分比 | 
| ccrate | 0 to 100 | 设置一致性校验 cc 占系统资源百分比 | 
| coercion | 0: No coercion 1: 128 MB 2: 1 GB  | 
磁盘强制是一个能强制有多种变化能力的物理磁盘 成为同一尺寸的工具这样变换后这些磁盘就能在阵 列中使用,这些选项有128MB-way,1GB-way. 默认值是无。  | 
| copyback | on|off type = smartssd|smarthdd|all smartssd: Copy back enabled for SSD drives smarthdd: Copy back enabled for HDD drives. all: Copy back enabled for both ssd drives and HDD drives. Example: storcli /cx set copyback=on type=all  | 
控制磁盘的回拷 | 
| foreignautoimport | on|off | 控制是否在启动时导入外部配置 | 
| jbod | on|off | 是否开启 JBOD 模式 | 
| loadbalancemode | on|off | 支持 SAS 与外部端口连接的负载均衡 | 
| patrolread | storcli /cx resume patrolread storcli /cx set patrolread ={{on mode=<auto|manual>}|{off}} storcli /cx set patrolread [starttime=<yyyy/mm/dd hh>] storcli /cx set patrolread delay=<value>  | 
控制磁盘巡读 | 
| pi | on|off | 开启控制器的数据保护功能 | 
| rebuildrate | 0 to 100 | 设置重建占用系统资源百分比 | 
| reconrate | 0 to 100 | 系统扩容占用资源百分比 | 
7.3.1.4、物理磁盘命令
| 命令 | 值 | 说明 | 
|---|---|---|
| set | missing good offline online  | 
设置磁盘状态 | 
| show | all | 显示磁盘信息 | 
查看磁盘命令
[root@arm64v8 ~]# storcli /c0/eall/sall show
CLI Version = 007.1316.0000.0000 Mar 12, 2020
Operating system = Linux 4.19.90-17.ky10.aarch64
Controller = 0
Status = Success
Description = Show Drive Information Succeeded.
Drive Information :
=================
---------------------------------------------------------------------------------
EID:Slt DID State DG       Size Intf Med SED PI SeSz Model               Sp Type 
---------------------------------------------------------------------------------
18:0     30 JBOD  -  447.130 GB SATA SSD N   N  512B INTEL SSDSC2KB480G8 U  -    
18:1     33 JBOD  -  447.130 GB SATA SSD N   N  512B INTEL SSDSC2KB480G8 U  -    
18:2     31 JBOD  -  447.130 GB SATA SSD N   N  512B INTEL SSDSC2KB480G8 U  -    
18:3     34 JBOD  -  447.130 GB SATA SSD N   N  512B INTEL SSDSC2KB480G8 U  -    
18:4     10 JBOD  -    2.182 TB SAS  HDD N   N  512B AL15SEB24EQ         U  -    
18:5     27 JBOD  -    2.182 TB SAS  HDD N   N  512B AL15SEB24EQ         U  -    
18:6     14 JBOD  -    2.182 TB SAS  HDD N   N  512B AL15SEB24EQ         U  -    
18:7     12 JBOD  -    2.182 TB SAS  HDD N   N  512B AL15SEB24EQ         U  -    
18:8     17 JBOD  -    2.182 TB SAS  HDD N   N  512B AL15SEB24EQ         U  -    
18:9      8 JBOD  -    2.182 TB SAS  HDD N   N  512B AL15SEB24EQ         U  -    
18:10    21 JBOD  -    2.182 TB SAS  HDD N   N  512B AL15SEB24EQ         U  -    
18:11    22 JBOD  -    2.182 TB SAS  HDD N   N  512B AL15SEB24EQ         U  -    
18:12     9 JBOD  -    2.182 TB SAS  HDD N   N  512B AL15SEB24EQ         U  -    
18:13    23 JBOD  -    2.182 TB SAS  HDD N   N  512B AL15SEB24EQ         U  -    
18:14    15 JBOD  -    2.182 TB SAS  HDD N   N  512B AL15SEB24EQ         U  -    
18:15    24 JBOD  -    2.182 TB SAS  HDD N   N  512B AL15SEB24EQ         U  -    
18:16    11 JBOD  -    2.182 TB SAS  HDD N   N  512B AL15SEB24EQ         U  -    
18:17    28 JBOD  -    2.182 TB SAS  HDD N   N  512B AL15SEB24EQ         U  -    
18:18    26 JBOD  -    2.182 TB SAS  HDD N   N  512B AL15SEB24EQ         U  -    
18:19    20 JBOD  -    2.182 TB SAS  HDD N   N  512B AL15SEB24EQ         U  -    
18:20    13 JBOD  -    2.182 TB SAS  HDD N   N  512B AL15SEB24EQ         U  -    
18:21    16 JBOD  -    2.182 TB SAS  HDD N   N  512B AL15SEB24EQ         U  -    
18:22    19 JBOD  -    2.182 TB SAS  HDD N   N  512B AL15SEB24EQ         U  -    
18:23    25 JBOD  -    2.182 TB SAS  HDD N   N  512B AL15SEB24EQ         U  -    
252:0    29 Onln  0  446.625 GB SATA SSD N   N  512B INTEL SSDSC2KB480G8 U  -    
252:1    32 Onln  0  446.625 GB SATA SSD N   N  512B INTEL SSDSC2KB480G8 U  -    
---------------------------------------------------------------------------------
EID=Enclosure Device ID|Slt=Slot No.|DID=Device ID|DG=DriveGroup
DHS=Dedicated Hot Spare|UGood=Unconfigured Good|GHS=Global Hotspare
UBad=Unconfigured Bad|Sntze=Sanitize|Onln=Online|Offln=Offline|Intf=Interface
Med=Media Type|SED=Self Encryptive Drive|PI=Protection Info
SeSz=Sector Size|Sp=Spun|U=Up|D=Down|T=Transition|F=Foreign
UGUnsp=UGood Unsupported|UGShld=UGood shielded|HSPShld=Hotspare shielded
CFShld=Configured shielded|Cpybck=CopyBack|CBShld=Copyback Shielded
UBUnsp=UBad Unsupported|Rbld=Rebuild
# 查看控制器 1, enclosure18,4,5 槽位的磁盘信息(注意序号都是从 0 开始)
[root@arm64v8 ~]# storcli /c0/e18/s3,4 show
CLI Version = 007.1316.0000.0000 Mar 12, 2020
Operating system = Linux 4.19.90-17.ky10.aarch64
Controller = 0
Status = Success
Description = Show Drive Information Succeeded.
Drive Information :
=================
---------------------------------------------------------------------------------
EID:Slt DID State DG       Size Intf Med SED PI SeSz Model               Sp Type 
---------------------------------------------------------------------------------
18:3     34 JBOD  -  447.130 GB SATA SSD N   N  512B INTEL SSDSC2KB480G8 U  -    
18:4     10 JBOD  -    2.182 TB SAS  HDD N   N  512B AL15SEB24EQ         U  -    
---------------------------------------------------------------------------------
EID=Enclosure Device ID|Slt=Slot No.|DID=Device ID|DG=DriveGroup
DHS=Dedicated Hot Spare|UGood=Unconfigured Good|GHS=Global Hotspare
UBad=Unconfigured Bad|Sntze=Sanitize|Onln=Online|Offln=Offline|Intf=Interface
Med=Media Type|SED=Self Encryptive Drive|PI=Protection Info
SeSz=Sector Size|Sp=Spun|U=Up|D=Down|T=Transition|F=Foreign
UGUnsp=UGood Unsupported|UGShld=UGood shielded|HSPShld=Hotspare shielded
CFShld=Configured shielded|Cpybck=CopyBack|CBShld=Copyback Shielded
UBUnsp=UBad Unsupported|Rbld=Rebuild
# 查看控制器 1, enclosure18,前4个槽位的磁盘信息(注意序号都是从 0 开始)
[root@arm64v8 ~]# storcli /c0/e18/s0-3 show
设置磁盘状态
storcli /cx[/ex]/sx set jbod
storcli /cx[/ex]/sx set good [force]
storcli /cx[/ex]/sx set offline
storcli /cx[/ex]/sx set online
使用 raid 卡管理的磁盘有两种模式状态,第一种就是 raid 阵列状态,第二种就是 jbod 直通状态。需要说明的是,控制器的 jbod 开关关闭,则只能配置 raid 阵列;控制器的 jbod 开关打开,虽然所有磁盘的 state 会自动变为 jbod,但依然可以配置 raid 阵列,即 jbod 和 raid 阵列共存。
7.3.1.4.1、raid 阵列状态
- 
关闭控制器的 jbod 模式,将自动切回 raid 模式,只能配置 raid 阵列
[root@arm64v8 ~]# storcli /c0 set jbod=off CLI Version = 007.1316.0000.0000 Mar 12, 2020 Operating system = Linux 4.19.90-17.ky10.aarch64 Controller = 0 Status = Success Description = None Controller Properties : ===================== ---------------- Ctrl_Prop Value ---------------- JBOD OFF ---------------- - 
raid 模式下,如果不对磁盘进行 raid 配置,在操作系统里面是看不到磁盘的。
# 一共有26块盘,现在只看到一个系统盘 [root@arm64v8 ~]# fdisk -l | egrep "Disk /dev" Disk /dev/sda: 446.64 GiB, 479559942144 bytes, 936640512 sectors [root@arm64v8 ~]# - 
在 raid 模式下不能再 set jbod,只能配置 raid,设置 good、offline 和 online 等磁盘状态。
[root@arm64v8 ~]# storcli /c0/e18/s0 set jbod CLI Version = 007.1316.0000.0000 Mar 12, 2020 Operating system = Linux 4.19.90-17.ky10.aarch64 Controller = 0 Status = Failure Description = Set Drive JBOD Failed. # 报错,因为控制器关闭了jbod Detailed Status : =============== ------------------------------------------ Drive Status ErrCd ErrMsg ------------------------------------------ /c0/e18/s0 Failure 2 command invalid ------------------------------------------ # 不指明 pdperarray 报错,因为 raid10 里面有两个组,如果创建 raid5 这样的单组就不用指了 [root@arm64v8 ~]# storcli /c0 add vd type=raid10 size=2gb,3gb,4gb name=tmp1,tmp2,tmp3 drives=18:0-3 CLI Version = 007.1316.0000.0000 Mar 12, 2020 Operating system = Linux 4.19.90-17.ky10.aarch64 Controller = 0 Status = Failure Description = operation not possible for current RAID level, Cannot create configuration with 1 span # 使用/e18/s0-s3四个磁盘创建raid10磁盘组,并且创建3个虚拟磁盘。 [root@arm64v8 ~]# storcli /c0 add vd type=raid10 size=2gb,3gb,4gb name=tmp1,tmp2,tmp3 drives=18:0-3 pdperarray=2 CLI Version = 007.1316.0000.0000 Mar 12, 2020 Operating system = Linux 4.19.90-17.ky10.aarch64 Controller = 0 Status = Success Description = Add VD Succeeded. # 其中raid1磁盘组用来装操作系统 [root@arm64v8 ~]# storcli /c0/vall show CLI Version = 007.1316.0000.0000 Mar 12, 2020 Operating system = Linux 4.19.90-17.ky10.aarch64 Controller = 0 Status = Success Description = None Virtual Drives : ============== ---------------------------------------------------------------- DG/VD TYPE State Access Consist Cache Cac sCC Size Name ---------------------------------------------------------------- 0/0 RAID1 Optl RW Yes RWTD - ON 446.625 GB 1/1 RAID10 Optl RW No RWTD - ON 2.000 GB tmp1 1/2 RAID10 Optl RW No RWTD - ON 3.000 GB tmp2 1/3 RAID10 Optl RW No RWTD - ON 4.000 GB tmp3 ---------------------------------------------------------------- VD=Virtual Drive| DG=Drive Group|Rec=Recovery Cac=CacheCade|OfLn=OffLine|Pdgd=Partially Degraded|Dgrd=Degraded Optl=Optimal||dflt=Default|RO=Read Only|RW=Read Write|HD=Hidden|TRANS=TransportReady|B=Blocked| Consist=Consistent|R=Read Ahead Always|NR=No Read Ahead|WB=WriteBack| AWB=Always WriteBack|WT=WriteThrough|C=Cached IO|D=Direct IO|sCC=Scheduled Check Consistency # 磁盘组raid10剩余所有容量都给tmp4 [root@arm64v8 ~]# storcli /c0 add vd type=raid10 size=all name=tmp4 drives=18:0-3 pdperarray=2 CLI Version = 007.1316.0000.0000 Mar 12, 2020 Operating system = Linux 4.19.90-17.ky10.aarch64 Controller = 0 Status = Success Description = Add VD Succeeded. 
7.3.1.4.2、jbod 直通状态
- 
打开控制器的 jbod 模式,将自动从 raid 状态切换至 jbod 状态,并且可以同时配置 raid 阵列,使 jbod 和 raid 共存。
[root@arm64v8 ~]# storcli /c0 set jbod=on CLI Version = 007.1316.0000.0000 Mar 12, 2020 Operating system = Linux 4.19.90-17.ky10.aarch64 Controller = 0 Status = Success Description = None Controller Properties : ===================== ---------------- Ctrl_Prop Value ---------------- JBOD ON ---------------- - 
打开 jbod 直通模式后,在操作系统里面可以直接看到磁盘
[root@arm64v8 ~]# fdisk -l | egrep "Disk /dev" Disk /dev/sda: 446.64 GiB, 479559942144 bytes, 936640512 sectors Disk /dev/sdb: 2.19 TiB, 2400476553216 bytes, 4688430768 sectors Disk /dev/sdc: 2.19 TiB, 2400476553216 bytes, 4688430768 sectors Disk /dev/sdd: 2.19 TiB, 2400476553216 bytes, 4688430768 sectors Disk /dev/sde: 2.19 TiB, 2400476553216 bytes, 4688430768 sectors Disk /dev/sdf: 2.19 TiB, 2400476553216 bytes, 4688430768 sectors Disk /dev/sdg: 2.19 TiB, 2400476553216 bytes, 4688430768 sectors Disk /dev/sdh: 2.19 TiB, 2400476553216 bytes, 4688430768 sectors Disk /dev/sdi: 2.19 TiB, 2400476553216 bytes, 4688430768 sectors Disk /dev/sdj: 2.19 TiB, 2400476553216 bytes, 4688430768 sectors Disk /dev/sdk: 2.19 TiB, 2400476553216 bytes, 4688430768 sectors Disk /dev/sdl: 2.19 TiB, 2400476553216 bytes, 4688430768 sectors Disk /dev/sdm: 2.19 TiB, 2400476553216 bytes, 4688430768 sectors Disk /dev/sdn: 2.19 TiB, 2400476553216 bytes, 4688430768 sectors Disk /dev/sdo: 2.19 TiB, 2400476553216 bytes, 4688430768 sectors Disk /dev/sdp: 2.19 TiB, 2400476553216 bytes, 4688430768 sectors Disk /dev/sdq: 2.19 TiB, 2400476553216 bytes, 4688430768 sectors Disk /dev/sdr: 2.19 TiB, 2400476553216 bytes, 4688430768 sectors Disk /dev/sds: 2.19 TiB, 2400476553216 bytes, 4688430768 sectors Disk /dev/sdt: 2.19 TiB, 2400476553216 bytes, 4688430768 sectors Disk /dev/sdv: 447.13 GiB, 480103981056 bytes, 937703088 sectors Disk /dev/sdu: 2.19 TiB, 2400476553216 bytes, 4688430768 sectors Disk /dev/sdw: 447.13 GiB, 480103981056 bytes, 937703088 sectors Disk /dev/sdx: 447.13 GiB, 480103981056 bytes, 937703088 sectors Disk /dev/sdy: 447.13 GiB, 480103981056 bytes, 937703088 sectors [root@arm64v8 ~]# - 
部分磁盘配置 raid 阵列,与部分 jbod 磁盘共存。
[root@arm64v8 ~]# storcli /c0/e18/s0-4 set good force CLI Version = 007.1316.0000.0000 Mar 12, 2020 Operating system = Linux 4.19.90-17.ky10.aarch64 Controller = 0 Status = Success Description = Set Drive Good Succeeded. [root@arm64v8 ~]# storcli /c0 add vd type=raid5 size=2Gb names=first drives=18:0,1,2 CLI Version = 007.1316.0000.0000 Mar 12, 2020 Operating system = Linux 4.19.90-17.ky10.aarch64 Controller = 0 Status = Success Description = Add VD Succeeded. [root@arm64v8 ~]# fdisk -l | egrep "Disk /dev" Disk /dev/sda: 446.64 GiB, 479559942144 bytes, 936640512 sectors Disk /dev/sdf: 2.19 TiB, 2400476553216 bytes, 4688430768 sectors Disk /dev/sdg: 2.19 TiB, 2400476553216 bytes, 4688430768 sectors Disk /dev/sdh: 2.19 TiB, 2400476553216 bytes, 4688430768 sectors Disk /dev/sdi: 2.19 TiB, 2400476553216 bytes, 4688430768 sectors Disk /dev/sdk: 2.19 TiB, 2400476553216 bytes, 4688430768 sectors Disk /dev/sdl: 2.19 TiB, 2400476553216 bytes, 4688430768 sectors Disk /dev/sdm: 2.19 TiB, 2400476553216 bytes, 4688430768 sectors Disk /dev/sdn: 2.19 TiB, 2400476553216 bytes, 4688430768 sectors Disk /dev/sdo: 2.19 TiB, 2400476553216 bytes, 4688430768 sectors Disk /dev/sdp: 2.19 TiB, 2400476553216 bytes, 4688430768 sectors Disk /dev/sdq: 2.19 TiB, 2400476553216 bytes, 4688430768 sectors Disk /dev/sdr: 2.19 TiB, 2400476553216 bytes, 4688430768 sectors Disk /dev/sds: 2.19 TiB, 2400476553216 bytes, 4688430768 sectors Disk /dev/sdt: 2.19 TiB, 2400476553216 bytes, 4688430768 sectors Disk /dev/sdu: 2.19 TiB, 2400476553216 bytes, 4688430768 sectors Disk /dev/sdv: 2.19 TiB, 2400476553216 bytes, 4688430768 sectors Disk /dev/sdw: 2.19 TiB, 2400476553216 bytes, 4688430768 sectors Disk /dev/sdx: 2.19 TiB, 2400476553216 bytes, 4688430768 sectors Disk /dev/sdy: 2.19 TiB, 2400476553216 bytes, 4688430768 sectors Disk /dev/sdb: 2 GiB, 2147483648 bytes, 4194304 sectors [root@arm64v8 ~]#- 这个过程要体会一下,我把前 5 块配置成了 unconfigured good,所以这 5 块 OS 是不能直接识别的,然后我又把前 3 块配置成了 raid 5 并创建了一个 2Gb 的虚拟磁盘,最终 OS 识别所有的磁盘如上所示。
 
 
磁盘初始化命令
# 查看,开始和停止磁盘初始化操作
storcli /cx[/ex]/sx show initialization
storcli /cx[/ex]/sx start initialization
storcli /cx[/ex]/sx stop initialization
[root@arm64v8 ~]# storcli /c0/e18/s0 start initialization
CLI Version = 007.1316.0000.0000 Mar 12, 2020
Operating system = Linux 4.19.90-17.ky10.aarch64
Controller = 0
Status = Success
Description = Start Drive Initialization Succeeded.
注意:对磁盘进行初始化,必须是在 raid 模式下进行,jbod 模式下会报错。
磁盘定位命令
# 开始、停止定位磁盘,也就是磁盘亮灯
storcli /cx[/ex]/sx start locate
storcli /cx[/ex]/sx stop locate
磁盘挂起,启动命令
# 这两个命令是在准备移除磁盘时使用
storcli /cx[/ex]/sx spindown
storcli /cx[/ex]/sx spinup
磁盘安全擦除命令
storcli /cx[/ex]/sx secureerase [force]
storcli /cx[/ex]/sx show erase
storcli /cx[/ex]/sx start erase [simple|normal|crypto|thorough] [patternA=<value1>] [patternB=<value2>]
storcli /cx[/ex]/sx stop erase
用来执行或控制安全擦除磁盘
| 选项 | 值范围 | 描述 | 
|---|---|---|
| erase | simple : Single pass, single pattern write normal : Three pass, three pattern write thorough : Nine pass, repeats the normal write three times crypto : Performs cryptographic erase for SSD drives  | 
Secures erase type. | 
| patternA | 8-bit value | Erases pattern A to overwrite the data. | 
| patternB | 8-bit value | Erases pattern B to overwrite the data. | 
[root@arm64v8 ~]# storcli /c0/e18/s0 start erase thorough patternA=10010011 patternB=11110000CLI Version = 007.1316.0000.0000 Mar 12, 2020
Operating system = Linux 4.19.90-17.ky10.aarch64
Controller = 0
Status = Success
Description = Start Drive Erase Succeeded.
磁盘重建命令
storcli /cx[/ex]/sx pause rebuild
storcli /cx[/ex]/sx resume rebuild
storcli /cx[/ex]/sx show rebuild
storcli /cx[/ex]/sx start rebuild
storcli /cx[/ex]/sx stop rebuild
- 如果 enclosures 用来连接控制器下的物理磁盘,要在命令行中指定 enclosure ID
 
storcli /cx[/ex]/sx pause rebuild:此命令暂停正在进行的重建进程。您只能对当前正在重建的驱动器运行此命令。
storcli /cx[/ex]/sx resume rebuild:此命令恢复暂停的重建进程。只有当驱动器存在一个暂停的重建进程时,才能执行此命令。
storcli /cx[/ex]/sx show rebuild:该命令以百分比显示重建进程的进度。还显示了完成操作所需的估计时间(以分钟计)。
storcli /cx[/ex]/sx start rebuild:此命令启动驱动器的重建操作。
storcli /cx[/ex]/sx stop rebuild:此命令停止重建操作。您只能对当前正在重建的驱动器运行此命令。
磁盘回拷命令
默认情况下控制器回拷开关是关闭的,回拷发生在,raid 组中有一块盘坏掉了比如 slot0,有另一块热备盘 slot10 直接顶上进行 rebuild;slot0 换新盘后,slot10 恢复好的数据会回拷至 slot0 的新盘,slot10 重新回到热备状态。
由此可见,回拷过程会占用大量的带宽,除非你知道自己在干什么,否则不建议开启回拷。
storcli /cx[/ex]/sx pause copyback
storcli /cx[/ex]/sx resume copyback
storcli /cx show copyback
storcli /cx[/ex]/sx start copyback target=eid:sid
storcli /cx[/ex]/sx stop copyback
storcli /cx set copyback=on type=ctrl
storcli /cx set copyback=on type=smarthdd
storcli /cx set copyback=on type=ssd
storcli /cx set copyback=on type=all
- 回拷命令中,cx[/ex]/sx 表示源驱动器,eid:sid 表示目标驱动器。
 - 当启用回拷操作时,即使重构完成,告警也会继续提示;只有回拷操作完成后,告警才会停止。
 
storcli /cx[/ex]/sx pause copyback:该命令暂停回拷操作。该命令只能在进行回拷操作时使用。
storcli /cx[/ex]/sx resume copyback:此命令恢复暂停的回拷操作。该命令只能在驱动器存在暂停的回拷进程时使用。
storcli /cx show copyback:该命令以百分比显示回拷操作的进度。还显示了完成操作所需的估计时间(以分钟计)。
storcli /cx[/ex]/sx start copyback target=eid:sid:该命令对驱动器启动回拷操作。
storcli /cx[/ex]/sx stop copyback:该命令用于停止回拷操作。该命令只能在运行回拷操作的驱动器上执行。
storcli /cx set copyback=on type=ctrl:该命令设置控制回拷操作。
storcli /cx set copyback=on type=smarthdd:该命令设置智能硬盘回拷操作。
storcli /cx set copyback=on type=smartssd:该命令用于设置智能 SSD 回拷操作。
storcli /cx set copyback=on type=all:该命令用于设置回拷操作。
热备盘命令
storcli /cx[/ex]/sx add hotsparedrive {dgs=<n|0,1,2...>}[enclaffinity][nonrevertible]
storcli /cx/[ex]/sx delete hotsparedrive
- 如果 enclosures 用来连接控制器下的物理磁盘,要在命令行中指定 enclosure ID
 
storcli /cx[/ex]/sx add hotsparedrive [{dgs=<n|0,1,2...>}] [enclaffinity] [nonrevertible]:创建热备盘。可通过以下选项创建热备盘。
| Option | Value Range | Description | 
|---|---|---|
| dgs | Valid drive group number | Specifies the drive group to which the hot spare drive is dedicated. | 
| enclaffinity | Valid enclosure number | Specifies the enclosure with which the hot spare is associated. If this option is specified, affinity is set; if it is not specified, there is no affinity. Affinity cannot be removed after it is set for a hot spare drive.  | 
| nonrevertible | — | Sets the drive as a nonrevertible hot spare. | 
做一个实验:
- 
创建一个磁盘组 raid5
[root@arm64v8 ~]# storcli /c0 add vd type=raid5 size=2gb,3gb,4gb name=tmp1,tmp2,tmp3 drives=18:0-2 CLI Version = 007.1316.0000.0000 Mar 12, 2020 Operating system = Linux 4.19.90-17.ky10.aarch64 Controller = 0 Status = Success Description = Add VD Succeeded. - 
创建 slot3 为热备盘
- 
全局热备盘
[root@arm64v8 ~]# storcli /c0/e18/s3 add hotsparedrive - 
把 slot3 设为 groups 1 的专用热备盘
[root@arm64v8 ~]# storcli /c0/e18/s3 add hotsparedrive dgs=1 CLI Version = 007.1316.0000.0000 Mar 12, 2020 Operating system = Linux 4.19.90-17.ky10.aarch64 Controller = 0 Status = Success Description = Add Hot Spare Succeeded. # slot3 的状变为 DHS,即 Dedicated Hot Spare [root@arm64v8 ~]# storcli /c0/e18/s3 show CLI Version = 007.1316.0000.0000 Mar 12, 2020 Operating system = Linux 4.19.90-17.ky10.aarch64 Controller = 0 Status = Success Description = Show Drive Information Succeeded. Drive Information : ================= --------------------------------------------------------------------------------- EID:Slt DID State DG Size Intf Med SED PI SeSz Model Sp Type --------------------------------------------------------------------------------- 18:3 34 DHS 1 446.625 GB SATA SSD N N 512B INTEL SSDSC2KB480G8 U - --------------------------------------------------------------------------------- 
 - 
 - 
模拟 slot2 坏掉
# 模拟 slot2 坏掉 [root@arm64v8 ~]# storcli /c0/e18/s2 set offline CLI Version = 007.1316.0000.0000 Mar 12, 2020 Operating system = Linux 4.19.90-17.ky10.aarch64 Controller = 0 Status = Success Description = Set Drive Offline Succeeded. # slot3 自动顶上 [root@arm64v8 ~]# storcli /c0/e18/s3 show CLI Version = 007.1316.0000.0000 Mar 12, 2020 Operating system = Linux 4.19.90-17.ky10.aarch64 Controller = 0 Status = Success Description = Show Drive Information Succeeded. Drive Information : ================= --------------------------------------------------------------------------------- EID:Slt DID State DG Size Intf Med SED PI SeSz Model Sp Type --------------------------------------------------------------------------------- 18:3 34 Onln 1 446.625 GB SATA SSD N N 512B INTEL SSDSC2KB480G8 U - --------------------------------------------------------------------------------- 
storcli /cx/[ex]/sx delete hotsparedrive:删除热备盘
[root@arm64v8 ~]# storcli /c0/e18/s3 delete hotsparedrive
CLI Version = 007.1316.0000.0000 Mar 12, 2020
Operating system = Linux 4.19.90-17.ky10.aarch64
Controller = 0
Status = Success
Description = Delete Hot Spare Succeeded.
[root@arm64v8 ~]# storcli /c0/e18/s3 show
CLI Version = 007.1316.0000.0000 Mar 12, 2020
Operating system = Linux 4.19.90-17.ky10.aarch64
Controller = 0
Status = Success
Description = Show Drive Information Succeeded.
Drive Information :
=================
---------------------------------------------------------------------------------
EID:Slt DID State DG       Size Intf Med SED PI SeSz Model               Sp Type 
---------------------------------------------------------------------------------
18:3     34 UGood -  446.625 GB SATA SSD N   N  512B INTEL SSDSC2KB480G8 U  -    
---------------------------------------------------------------------------------
7.3.2、VD 命令
7.3.2.1、创建 VD
storcli /cx add vd raid[0|1|5|6|00|10|50|60][Size=<VD1_Sz>,<VD2_Sz>,..|remaining] [name=<VDNAME1>,..]
drives=e:s|e:s-x,y,e:s-x,y,z [PDperArray=x][SED] [pdcache=on|off|default][pi] [DimmerSwitch(ds)=default|
automatic(auto)| none|maximum(max)|MaximumWithoutCaching(maxnocache)]
[wt|wb|awb] [nora|ra] [direct|cached][cachevd] [Strip=<8|16|32|64|128|256|1024>] [AfterVd=X][EmulationType=0|
1|2] [Spares = [e:]s|[e:]s-x|[e:]s-x,y] [force][ExclusiveAccess][Cbsize=0|1|2 Cbmode=0|1|2|3|4|7]
- MegaRAID 控制器支持的条带大小从最小 64kb 到 1mb 不等,集成 MegaRAID 控制器支持的条带大小仅为 64kb。
 
storcli /cx add vd each raid0 [name=<VDNAME1>,..] [drives=e:s|e:s-x|e:s-x,y] [SED] [pdcache=on|off|default]
[pi] [DimmerSwitch(ds)=default|automatic(auto)| none|maximum(max)|MaximumWithoutCaching(maxnocache)] [wt|wb|
awb] [nora|ra] [direct|cached][EmulationType=0|1|2] [Strip=<8|16|32|64|128|256|1024>][ExclusiveAccess]
- MegaRAID 控制器支持的条带大小从最小 64kb 到 1mb 不等,集成 MegaRAID 控制器支持的条带大小仅为 64kb。
 
storcli /cx add VD cachecade|cc raid[0,1] drives = [e:]s|[e:]s-x|[e:]s-x,y [WT|WB] [assignvds = 0,1,2]
- 该命令用于创建 RAID 配置。可以使用下表中的选项创建 RAID 卷。
 
| Option | Value Range | Description | 
|---|---|---|
| raid | [0|1|5|6|00|10|50|60] | 设置配置的RAID类型。 | 
| size | 基于物理驱动器和RAID级别的最大大小 | 设置每个虚拟磁盘的大小。默认值为所有被引用磁盘的容量。 | 
| name | 长度为15个字符 | 每个虚拟磁盘的磁盘名称 | 
| drives | 有效的 enclosure 和 slot 号 | e:s|e:s-x|e:s-x,y • e 表示 enclosure ID • s 表示 enclosure 中的槽位号 • e:s-x 是用于表示框 e 中从 s 到 x 槽位的范围约定(最多250个字符)。 确保在每个 [e:s] 对中使用了相同的块大小(在物理驱动器中)。例如,如果 e0:s0 对中 使用 4096 字节,那么 e1:s1 对中也使用 4096 字节。不支持在 [e:s] 对之间混合块大小。  | 
| pdperarray | 1–16 | 指定子阵列的驱动器数,一般创建RAID10, RAID50, RAID60时才需要指定该参数。不过其它阵列也可以指定该参数,但是不匹配时会报错,不指定时会自动选择默认值 | 
| sed | — | 创建启用了安全性的驱动器 | 
| pdcache | on|off|default | 启用或禁用 PD 缓存 | 
| pi | — | 使保护信息 | 
| dimmerswitch | default: 逻辑设备采用控制器默认节能策略。 automatic (auto): 逻辑设备省电由固件管理。 none: 无节能策略。 maximum (max): 逻辑设备最大节电。 MaximumWithoutCaching(maxnocache): 逻辑设备不缓存写,以最大限度地节省电力。  | 
节能策略。 自动设置为默认值。  | 
| direct|cached | cached: 缓存的I/O。 direct: 直接I/O。  | 
设置逻辑盘 cache 策略。 直接 I/O 是默认的。  | 
| EmulationType | 0: 默认仿真,这意味着如果在配置的 ID 中有 512e 驱动器,那么每个扇区的物理字节显示为 512e (4k)。如果没有 512e 驱动器,则每个扇区的物理字节数为 512e 512 n。 1: 禁用,这意味着即使在配置的 ID 中有 512e 驱动器,每个扇区的物理字节也会显示512 n。 2: Force,这意味着即使在配置的 ID 中没有 512e 驱动器,每个扇区的物理字节将显示为512 e (4 k)。  | 
|
| wt|wb|awb | • wt : Write through. • wb : Write back. • awb : Always Write Back.  | 
开启直写 缓存写是默认配置  | 
| nora|ra | • ra : Read ahead. • nora : No read ahead.  | 
禁止直读 开启是默认配置  | 
| cachevd | — | 启用创建的虚拟磁盘的SSD caching功能。 | 
| strip | 8 ,  16 ,  32 ,  64 ,  128 ,  256 ,  512 ,  1024 备注: 支持的条带大小从最小 64kb 到 1mb 不等 集成 MegaRAID 控制器仅为64kb  | 
设置 RAID 配置的条带大小。 | 
| aftervd | 有效的虚拟磁盘号 | 在指定的相邻空闲槽中创建VD | 
| spares | 存在空闲物理驱动器数 | 指定要分配给磁盘组作为备用的物理驱动器 | 
| force | 强制将安全物理驱动器添加到没有安全性的现有驱动器组 | 强制将具有安全性的物理驱动器添加到没有安全性的驱动器组中 | 
[root@arm64v8 ~]# storcli /c0 add vd raid10 size=2gb,3gb,4gb names=tmp1,tmp2,tmp3 drives=18:0-3 pdperarray=2
CLI Version = 007.1316.0000.0000 Mar 12, 2020
Operating system = Linux 4.19.90-17.ky10.aarch64
Controller = 0
Status = Success
Description = Add VD Succeeded.
[root@arm64v8 ~]#
7.3.2.2、删除 VD
storcli /cx/vx|vall del # 删除所有 vd
storcli /cx/vx|vall del cachecade   # 删除 SSD 缓存的 VD
storcli /cx/vx|vall del force   # 强制删除所有 vd
storcli /cx/vx del [cachecade] [discardcache] [force]
- 如果虚拟磁盘有用户数据,必须使用 force 选项删除虚拟磁盘。
 - 具有有效主引导记录(MBR)和分区表的虚拟驱动器被认为包含用户数据。
 - 注意 cachecade 需要 storcli /c0/v1 set ssdcaching=on
- 如果提示 "Controller has no Cachecade support",说明此 raid 卡不支持
 - 另外,当我们在使用某个功能的时候报错,要考虑是否开启了 controller、enclosure 和 vd 上的相关属性。
 
 
# 删除控制器 C0 上所有的配置 SSD 缓存的 VD
# 我们这个 raid 卡不支持 ssd cachecade
[root@arm64v8 ~]# storcli /c0/v1 del cachecade
CLI Version = 007.1316.0000.0000 Mar 12, 2020
Operating system = Linux 4.19.90-17.ky10.aarch64
Controller = 0
Status = Failure
Description = CacheCade is not supported
[root@arm64v8 ~]#
7.3.2.3、查看 vd 命令
# 查看控制器指定 VD 的摘要信息或全部信息
storcli /cx/vx show
storcli /cx/vx show all
[root@arm64v8 ~]# storcli /c0/v1 show
CLI Version = 007.1316.0000.0000 Mar 12, 2020
Operating system = Linux 4.19.90-17.ky10.aarch64
Controller = 0
Status = Success
Description = None
Virtual Drives :
==============
----------------------------------------------------------------
DG/VD TYPE   State Access Consist Cache Cac sCC       Size Name 
----------------------------------------------------------------
1/1   RAID10 Optl  RW     No      RWTD  -   ON  893.250 GB tmp1 
----------------------------------------------------------------
7.3.2.4、保留缓存命令
如果虚拟磁盘离线或由于丢失物理磁盘而被删除,控制器将从虚拟磁盘中保留脏缓存。StorCLI 实用程序支持以下保留缓存的命令
storcli /cx/vx delete preservedCache [force]
storcli /cx show preservedCache
storcli /cx/vx delete preservedcache:
该命令将删除控制器上某个处于缺失状态的特定虚拟磁盘的保留缓存。当虚拟磁盘处于离线状态时,使用 force 选项将保留的缓存连同虚拟磁盘一起删除
[root@arm64v8 ~]# storcli /c0/v1 delete preservedcache
CLI Version = 007.1316.0000.0000 Mar 12, 2020
Operating system = Linux 4.19.90-17.ky10.aarch64
Controller = 0
Status = Success
Description = No Virtual Drive has Preserved Cache Data.
storcli /cx show preservedCache:
该命令显示保留了缓存的虚拟磁盘,以及该虚拟磁盘是否离线或丢失。
[root@arm64v8 ~]# storcli /c0 show preservedcache
CLI Version = 007.1316.0000.0000 Mar 12, 2020
Operating system = Linux 4.19.90-17.ky10.aarch64
Controller = 0
Status = Success
Description = No Virtual Drive has Preserved Cache Data.
7.3.2.5、修改 VD 属性
storcli /cx/vx set accesspolicy=<rw|ro|blocked|rmvblkd>
storcli /cx/vx set iopolicy=<cached|direct>
storcli /cx/vx set name=<namestring>
storcli /cx/vx set pdcache=<on|off|default>
storcli /cx/vx set rdcache=<ra|nora>
storcli /cx/vx|vall set ssdcaching=<on|off>
storcli /cx/vx|vall set HostAccess=ExclusiveAccess|SharedAccess
storcli /cx/vx set wrcache=<wt|wb|awb>
storcli /cx/vx set emulationType=0|1|2
storcli /cx/vx set ds=Default|Auto|None|Max|MaxNoCache
storcli /cx/vx set autobgi=On|Off
storcli /cx/vx set pi=Off
storcli /cx/vx set bootdrive=<On|Off>
storcli /cx/vx set hidden=On|Off
storcli /cx/vx set cbsize=0|1|2 cbmode=0|1|2|3|4|7
storcli /cx/vx set accesspolicy=<rw|ro|blocked|rmvblkd>:
该命令将虚拟磁盘的访问策略设置为 read/write、read only、blocked 或 rmvblkd (remove或blocked)。
[root@arm64v8 ~]# storcli /c0/v1 set accesspolicy=rw
CLI Version = 007.1316.0000.0000 Mar 12, 2020
Operating system = Linux 4.19.90-17.ky10.aarch64
Controller = 0
Status = Success
Description = None
Detailed Status :
===============
----------------------------------------
VD Property  Value Status  ErrCd ErrMsg 
----------------------------------------
 1 AccPolicy RW    Success     0 -      
----------------------------------------
storcli /cx/vx set iopolicy=<cached|direct>:
该命令将虚拟磁盘的 I/O 策略设置为缓存 I/O 或直接 I/O。
[root@arm64v8 ~]# storcli /c0/v1 set iopolicy=cached
CLI Version = 007.1316.0000.0000 Mar 12, 2020
Operating system = Linux 4.19.90-17.ky10.aarch64
Controller = 0
Status = Success
Description = None
Detailed Status :
===============
----------------------------------------
VD Property Value  Status  ErrCd ErrMsg 
----------------------------------------
 1 IoPolicy Cached Success     0 -      
----------------------------------------
storcli /cx/vx set name=<namestring>:
该命令为虚拟磁盘命名。名称限制为 15 个字符。
[root@arm64v8 ~]# storcli /c0/v1 set name=Brinnatt
CLI Version = 007.1316.0000.0000 Mar 12, 2020
Operating system = Linux 4.19.90-17.ky10.aarch64
Controller = 0
Status = Success
Description = None
Detailed Status :
===============
------------------------------------------
VD Property Value    Status  ErrCd ErrMsg 
------------------------------------------
 1 Name     Brinnatt Success     0 -      
------------------------------------------
storcli /cx/vx set pdcache=<on|off|default>:
该命令将虚拟磁盘上的当前磁盘缓存策略设置为打开、关闭或默认设置。
[root@arm64v8 ~]# storcli /c0/v1 set pdcache=on
CLI Version = 007.1316.0000.0000 Mar 12, 2020
Operating system = Linux 4.19.90-17.ky10.aarch64
Controller = 0
Status = Failure
Description = None
Detailed Status :
===============
-------------------------------------------------------------
VD Property Value Status ErrCd ErrMsg                        
-------------------------------------------------------------
 1 PdCac    -     Failed   255 SSD Physical drive is present 
-------------------------------------------------------------
storcli /cx/vx set rdcache=<ra|nora>:
该命令将虚拟磁盘的读 cache 策略设置为预读或不预读。
[root@arm64v8 ~]# storcli /c0/v1 set rdcache=nora
CLI Version = 007.1316.0000.0000 Mar 12, 2020
Operating system = Linux 4.19.90-17.ky10.aarch64
Controller = 0
Status = Success
Description = None
Detailed Status :
===============
---------------------------------------
VD Property Value Status  ErrCd ErrMsg 
---------------------------------------
 1 rdCache  NoRA  Success     0 -      
---------------------------------------
storcli /cx/vx|vall set ssdcaching=<on|off>:
该命令分配 CacheCade 虚拟磁盘。如果 ssdcaching=off,表示 CacheCade 虚拟磁盘被移除。
# 这个 raid 卡不支持 cachecade
[root@arm64v8 ~]# storcli /c0/v1 set ssdcaching=on
CLI Version = 007.1316.0000.0000 Mar 12, 2020
Operating system = Linux 4.19.90-17.ky10.aarch64
Controller = 0
Status = Failure
Description = None
Detailed Status :
===============
----------------------------------------------------------------------
VD Property   Value Status ErrCd ErrMsg                               
----------------------------------------------------------------------
 1 SSDCaching On    Failed   255 Controller has no Cachecade support. 
----------------------------------------------------------------------
storcli /cx/vx|vall set HostAccess=ExclusiveAccess|SharedAccess:
该命令用于设置虚拟磁盘的主机访问策略。当主机访问策略为独占访问时,服务器对虚拟磁盘具有独占访问权限。服务器之间不能共享虚拟驱动器。如果主机策略为共享访问,则可以在服务器之间共享虚拟磁盘。
# 当前 raid 卡不支持 HostAccess
[root@arm64v8 ~]# storcli /c0/v1 set HostAccess=ExclusiveAccess
CLI Version = 007.1316.0000.0000 Mar 12, 2020
Operating system = Linux 4.19.90-17.ky10.aarch64
Controller = 0
Status = Failure
Description = None
Detailed Status :
===============
----------------------------------------------------------------------------------
VD Property   Value Status ErrCd ErrMsg                                           
----------------------------------------------------------------------------------
 1 HostAccess -     Failed   255 This feature is not supported on this Controller 
----------------------------------------------------------------------------------
storcli /cx/vx set wrcache=<wt|wb|awb>:
该命令将虚拟磁盘的写 cache 策略设置为回写、透写或始终回写。
[root@arm64v8 ~]# storcli /c0/v1 set wrcache=wt
CLI Version = 007.1316.0000.0000 Mar 12, 2020
Operating system = Linux 4.19.90-17.ky10.aarch64
Controller = 0
Status = Success
Description = None
Detailed Status :
===============
---------------------------------------
VD Property Value Status  ErrCd ErrMsg 
---------------------------------------
 1 wrCache  WT    Success     0 -      
---------------------------------------
storcli /cx/vx set hidden=on|off:
该命令隐藏或显示虚拟驱动器。如果 hidden=on,表示虚拟磁盘不会被导出到操作系统。操作系统将无法读取或写入该虚拟驱动器,直到该虚拟驱动器被显示。
[root@arm64v8 ~]# fdisk -l | egrep "Disk /dev"
Disk /dev/sda: 446.64 GiB, 479559942144 bytes, 936640512 sectors
Disk /dev/sdb: 893.26 GiB, 959119884288 bytes, 1873281024 sectors
[root@arm64v8 ~]#
[root@arm64v8 ~]# storcli /c0/v1 set hidden=on
CLI Version = 007.1316.0000.0000 Mar 12, 2020
Operating system = Linux 4.19.90-17.ky10.aarch64
Controller = 0
Status = Success
Description = None
Detailed Status :
===============
---------------------------------------
VD Property Value Status  ErrCd ErrMsg 
---------------------------------------
 1 Hidden   On    Success     0 -      
---------------------------------------
[root@arm64v8 ~]# fdisk -l | egrep "Disk /dev"
Disk /dev/sda: 446.64 GiB, 479559942144 bytes, 936640512 sectors
[root@arm64v8 ~]# 
storcli /cx/vx set cbsize=0|1|2 cbmode=0|1|2|3|4|7:
该命令用于设置虚拟磁盘的 Cache bypass 大小和 Cache bypass 模式。
cbsize选项的取值如下:
- 0 – 64k cache bypass.
 - 1 – 128k cache bypass.
 - 2 – 256k cache bypass.
 
cbmode选项的值如下:
- 0 – Enable the intelligent mode cache bypass.
 - 1 – Enable the standard mode cache bypass.
 - 2 – Enable the custom mode cache bypass 1.
 - 3 – Enable the custom mode cache bypass 2.
 - 4 – Enable the custom mode cache bypass 3.
 - 7 – Disable Cache bypass.
- 当 cbmode 设置为 7 时,将忽略用户提供的 cbsize 值。
 
 
[root@arm64v8 ~]# storcli /c0/v1 set cbsize=1 cbmode=7
CLI Version = 007.1316.0000.0000 Mar 12, 2020
Operating system = Linux 4.19.90-17.ky10.aarch64
Controller = 0
Status = Success
Description = None
Detailed Status :
===============
------------------------------------------
VD Property    Value Status  ErrCd ErrMsg 
------------------------------------------
 1 Cachebypass -     Success     0 -      
------------------------------------------
7.3.2.6、VD 初始化
storcli /cx/vx show init
storcli /cx/vx start init [full][Force]
storcli /cx/vx stop init
- 如果虚拟磁盘有用户数据,必须使用 force 选项初始化虚拟磁盘。
 - 具有有效 MBR 和分区表的虚拟驱动器被认为包含用户数据。
 
storcli /cx/vx show init:
该命令以百分比显示虚拟磁盘初始化进度。还显示了完成操作所需的估计时间(以分钟计)。
[root@arm64v8 ~]# storcli /c0/v1 show init
CLI Version = 007.1316.0000.0000 Mar 12, 2020
Operating system = Linux 4.19.90-17.ky10.aarch64
Controller = 0
Status = Success
Description = None
VD Operation Status :
===================
-----------------------------------------------------------
VD Operation Progress% Status          Estimated Time Left 
-----------------------------------------------------------
 1 INIT      -         Not in progress -                   
-----------------------------------------------------------
storcli /cx/vx start init [full]:
该命令启动虚拟磁盘的初始化。默认的初始化类型是快速初始化。如果指定 full 选项,将启动虚拟磁盘的全量初始化。
[root@arm64v8 ~]# storcli /c0/v1 start init full
CLI Version = 007.1316.0000.0000 Mar 12, 2020
Operating system = Linux 4.19.90-17.ky10.aarch64
Controller = 0
Status = Success
Description = Start INIT Operation Success
[root@arm64v8 ~]# storcli /c0/v1 show init
CLI Version = 007.1316.0000.0000 Mar 12, 2020
Operating system = Linux 4.19.90-17.ky10.aarch64
Controller = 0
Status = Success
Description = None
VD Operation Status :
===================
-------------------------------------------------------
VD Operation Progress% Status      Estimated Time Left 
-------------------------------------------------------
 1 INIT              2 In progress 16 Minutes          
-------------------------------------------------------
storcli /cx/vx stop init:
该命令停止虚拟磁盘的初始化,已停止的初始化不能恢复
[root@arm64v8 ~]# storcli /c0/v1 show init
CLI Version = 007.1316.0000.0000 Mar 12, 2020
Operating system = Linux 4.19.90-17.ky10.aarch64
Controller = 0
Status = Success
Description = None
VD Operation Status :
===================
-------------------------------------------------------
VD Operation Progress% Status      Estimated Time Left 
-------------------------------------------------------
 1 INIT             19 In progress 13 Minutes          
-------------------------------------------------------
[root@arm64v8 ~]# storcli /c0/v1 stop init
CLI Version = 007.1316.0000.0000 Mar 12, 2020
Operating system = Linux 4.19.90-17.ky10.aarch64
Controller = 0
Status = Success
Description = Stop INIT Operation Success
[root@arm64v8 ~]# storcli /c0/v1 show init
CLI Version = 007.1316.0000.0000 Mar 12, 2020
Operating system = Linux 4.19.90-17.ky10.aarch64
Controller = 0
Status = Success
Description = None
VD Operation Status :
===================
-----------------------------------------------------------
VD Operation Progress% Status          Estimated Time Left 
-----------------------------------------------------------
 1 INIT      -         Not in progress -                   
-----------------------------------------------------------
7.3.2.7、VD 擦除
storcli /cx/vx <start|stop> erase
storcli /cx/vx show erase
storcli /cx/vx start erase:
在指定的虚拟磁盘上启动数据擦除操作。
[root@arm64v8 ~]# storcli /c0/v1 start erase
CLI Version = 007.1316.0000.0000 Mar 12, 2020
Operating system = Linux 4.19.90-17.ky10.aarch64
Controller = 0
Status = Success
Description = Start ERASE Operation Success
storcli /cx/vx show erase:
该命令显示虚拟磁盘上的擦除操作的状态。
[root@arm64v8 ~]# storcli /c0/v1 show erase
CLI Version = 007.1316.0000.0000 Mar 12, 2020
Operating system = Linux 4.19.90-17.ky10.aarch64
Controller = 0
Status = Success
Description = None
VD Operation Status :
===================
-------------------------------------------------------
VD Operation Progress% Status      Estimated Time Left 
-------------------------------------------------------
 1 ERASE             4 In progress 15 Minutes          
-------------------------------------------------------
7.3.2.8、VD 迁移
嵌入式 MegaRAID 不支持虚拟磁盘迁移命令。
storcli /cx/vx show migrate
storcli /cx/vx start migrate <type=raidx> [option=<add|remove> drives=[e:]s|[e:]s-x|[e:]s-x,y] [Force]
- 如果没有 RAID 级别迁移,可用容量减少是不可能的。
 
storcli /cx/vx show migrate:
该命令以百分比显示虚拟磁盘迁移进度。还显示了完成操作所需的估计时间(以分钟计)。
storcli /cx/vx start migrate <type=raidlevel> [option=<add | remove> drives=<e1:s1,e2:s2 ...> ]:
通过添加或移除现有虚拟磁盘中的磁盘,将虚拟磁盘重构到指定的 RAID 级别。可以在 start migrate 命令中使用以下选项。
| Options | Value Range | Description | 
|---|---|---|
| type = RAID level | RAID [0|1|5|6] | 虚拟磁盘需要迁移到的 RAID 级别。 | 
| [option=<add | remove>drives=<e1:s1,e2:s2, …>] | add: 添加磁盘到虚拟磁盘并开始重构。 remove: 从虚拟磁盘中移除磁盘并开始重构。 drives: 要加入虚拟磁盘的硬盘的 enclosure 号和 slot 号。 确保在每个[e:s]对中使用了相同的块大小(在物理驱动器中)。 例如,如果e0:s0对中使用4096字节,那么e1:s1对中也使 用4096字节。不支持在[e:s]对之间混合块大小。  | 
从虚拟磁盘中添加或删除驱动器。 | 
以下 RAID 级别可以进行虚拟磁盘迁移。
| Initial RAID level | Migrated RAID level | 
|---|---|
| RAID 0 | RAID 1 | 
| RAID 0 | RAID 5 | 
| RAID 0 | RAID 6 | 
| RAID 1 | RAID 0 | 
| RAID 1 | RAID 5 | 
| RAID 1 | RAID 6 | 
| RAID 5 | RAID 0 | 
| RAID 5 | RAID 6 | 
| RAID 6 | RAID 0 | 
| RAID 6 | RAID 5 | 
[root@arm64v8 ~]# storcli /c0 add vd type=raid0 drives=18:0,1
CLI Version = 007.1316.0000.0000 Mar 12, 2020
Operating system = Linux 4.19.90-17.ky10.aarch64
Controller = 0
Status = Success
Description = Add VD Succeeded.
[root@arm64v8 ~]#
[root@arm64v8 ~]# storcli /c0/v1 start migrate type=raid5 option=add drives=18:3
CLI Version = 007.1316.0000.0000 Mar 12, 2020
Operating system = Linux 4.19.90-17.ky10.aarch64
Controller = 0
Status = Success
Description = Start VD Operation Success
[root@arm64v8 ~]#
[root@arm64v8 ~]# storcli /c0/v1 show migrate
CLI Version = 007.1316.0000.0000 Mar 12, 2020
Operating system = Linux 4.19.90-17.ky10.aarch64
Controller = 0
Status = Success
Description = None
VD Operation Status :
===================
-------------------------------------------------------
VD Operation Progress% Status      Estimated Time Left 
-------------------------------------------------------
 1 Migrate           1 In progress 1 Hours 12 Minutes  
-------------------------------------------------------
- 这个实验是在不同的 raid 级别之间进行 migrate,其实在生产环境上不建议这么干,速度慢不说,而且数据损坏风险还比较大。
 - 大多数情况下,可以在同一 raid 级别下进行增删硬盘。
 
7.3.2.9、VD 一致性校验
storcli /cx/vx <start|stop|pause|resume|show> cc [force]
启动虚拟磁盘一致性检查操作。一般来说,一致性检查操作在初始化的虚拟磁盘上运行。使用 force 选项在未初始化的驱动器上运行一致性检查。
[root@arm64v8 ~]# storcli /c0/v1 start cc
CLI Version = 007.1316.0000.0000 Mar 12, 2020
Operating system = Linux 4.19.90-17.ky10.aarch64
Controller = 0
Status = Failure
Description = None
Detailed Status :
===============
---------------------------------------------
VD Operation Status ErrCd ErrMsg             
---------------------------------------------
 1 CC        Failed   255 VD not Initialized 
---------------------------------------------
[root@arm64v8 ~]# storcli /c0/v1 start init full
[root@arm64v8 ~]# storcli /c0/v1 show init
CLI Version = 007.1316.0000.0000 Mar 12, 2020
Operating system = Linux 4.19.90-17.ky10.aarch64
Controller = 0
Status = Success
Description = None
VD Operation Status :
===================
-------------------------------------------------------
VD Operation Progress% Status      Estimated Time Left 
-------------------------------------------------------
 1 INIT             56 In progress 6 Minutes           
-------------------------------------------------------
[root@arm64v8 ~]# storcli /c0/v1 start cc
CLI Version = 007.1316.0000.0000 Mar 12, 2020
Operating system = Linux 4.19.90-17.ky10.aarch64
Controller = 0
Status = Success
Description = Start CC Operation Success
[root@arm64v8 ~]# storcli /c0/v1 show cc
CLI Version = 007.1316.0000.0000 Mar 12, 2020
Operating system = Linux 4.19.90-17.ky10.aarch64
Controller = 0
Status = Success
Description = None
VD Operation Status :
===================
-------------------------------------------------------
VD Operation Progress% Status      Estimated Time Left 
-------------------------------------------------------
 1 CC                0 In progress 0 Seconds           
-------------------------------------------------------
7.3.2.10、VD 扩展
storcli /cx/vx expand size=<value> [expandarray]
storcli /cx/vx|vall show expansion
storcli /cx/vx expand size=<value> [expandarray]:
如果您使用大于现有阵列大小的驱动器替换驱动器,则此命令将扩展现有阵列中的虚拟驱动器。
虽然提供的值可能以 MB 为单位,但扩展大小的值是基于最近的可能单位显示的。
根据您提供的输入(值),storcli 从您提供的输入中识别大小,并将大小舍入到驱动器组剩余空闲空间的最近百分比。
因此,实际扩展的尺寸可能与您要求的尺寸不同。如果指定了 expandarray 选项,则扩展现有的数组。如果不指定此选项,则扩展虚拟磁盘。
[root@arm64v8 ~]# storcli /c0 add vd type=raid5 size=2Gb names=first drives=18:0,1,2
CLI Version = 007.1316.0000.0000 Mar 12, 2020
Operating system = Linux 4.19.90-17.ky10.aarch64
Controller = 0
Status = Success
Description = Add VD Succeeded.
[root@arm64v8 ~]# storcli /c0/v1 show
CLI Version = 007.1316.0000.0000 Mar 12, 2020
Operating system = Linux 4.19.90-17.ky10.aarch64
Controller = 0
Status = Success
Description = None
Virtual Drives :
==============
--------------------------------------------------------------
DG/VD TYPE  State Access Consist Cache Cac sCC     Size Name  
--------------------------------------------------------------
1/1   RAID5 Optl  RW     No      RWTD  -   ON  2.000 GB first 
--------------------------------------------------------------
[root@arm64v8 ~]# storcli /c0/v1 expand size=10Gb
CLI Version = 007.1316.0000.0000 Mar 12, 2020
Operating system = Linux 4.19.90-17.ky10.aarch64
Controller = 0
Status = Success
Description = expansion operation succeeded
EXPANSION RESULT :
================
-------------------------------------------------------------------------------
VD     Size FreSpc     ReqSize   AbsUsrSz  %FreSpc NewSize   Status NoArrExp   
-------------------------------------------------------------------------------
 1 2.000 GB 891.250 GB 10.000 GB 17.824 GB       2 19.824 GB -      891.250 GB 
-------------------------------------------------------------------------------
[root@arm64v8 ~]# storcli /c0/v1 show
CLI Version = 007.1316.0000.0000 Mar 12, 2020
Operating system = Linux 4.19.90-17.ky10.aarch64
Controller = 0
Status = Success
Description = None
Virtual Drives :
==============
---------------------------------------------------------------
DG/VD TYPE  State Access Consist Cache Cac sCC      Size Name  
---------------------------------------------------------------
1/1   RAID5 Optl  RW     No      RWTD  -   ON  19.824 GB first 
---------------------------------------------------------------
storcli /cx/vx show expansion:
该命令显示包含或不包含阵列扩展的虚拟磁盘的扩展信息。
[root@arm64v8 ~]# storcli /c0/v1 show expansion
CLI Version = 007.1316.0000.0000 Mar 12, 2020
Operating system = Linux 4.19.90-17.ky10.aarch64
Controller = 0
Status = Success
Description = None
EXPANSION INFORMATION :
=====================
----------------------------------------------
VD      Size OCE NoArrExp   WithArrExp Status 
----------------------------------------------
 1 19.824 GB Y   873.424 GB -          -      
----------------------------------------------
OCE - Online Capacity Expansion | WithArrExp - With Array Expansion 
 VD=Virtual Drive | NoArrExp - Without Array Expansion
[root@arm64v8 ~]#
7.3.3、Foreign 配置
StorCLI 工具支持以下命令查看、导入和删除外部配置:
storcli /cx/fall del|delete [securitykey=sssssssssss
storcli /cx/fall import [preview][securitykey=sssssssssss]
storcli /cx/fall show [all] [securitykey=sssssssssss]
- 如果要导入到另外一个使用安全密钥加密并锁定外部配置的服务器中时,需要提供这个安全密钥。
 
storcli /cx/fall|del| delete [securitykey=sssssssssss]:
该命令将删除控制器的外部配置。如果控制器已安全,请输入安全密钥。
storcli /cx/fall import [preview] [securitykey=sssssssssss]:
该命令将导入控制器的外部配置。在导入外部配置之前,preview 选项会显示该配置的摘要。
storcli /cx/fall show [all] [securitykey=sssssssssss]:
这个命令显示特定控制器的整个外部配置的摘要。all 选项显示整个外部配置的所有信息。
注意:EID:Slot 列为被锁定的外部 PDs 填充。
7.3.4、BIOS 相关命令
storcli /cx set bios [state=<on|off>] [Mode=<SOE|PE|IE|SME>] [abs=<on|off>] [DeviceExposure=<value>]
该命令用于开启或关闭 MegaRAID 控制器的 BIOS,设置 BIOS 的启动方式,并使 BIOS 能选择最优逻辑盘作为启动盘。模式选项的缩写如下:
| mode | description | 
|---|---|
| SOE | Stop on Errors | 
| PE | Pause on Errors | 
| IE | Ignore Errors | 
| SME | Safe mode on Errors | 
- 传统 BIOS 只能加载有限数量的 PCI 设备 BIOS。关闭 MegaRAID BIOS 以避免 POST 过程中出现问题。
 
[root@arm64v8 ~]# storcli /c0 show bios
CLI Version = 007.1316.0000.0000 Mar 12, 2020
Operating system = Linux 4.19.90-17.ky10.aarch64
Controller = 0
Status = Success
Description = None
Controller Properties :
=====================
-----------------------------------------------------
Ctrl_Prop                        Value               
-----------------------------------------------------
Basic Input/Output System (BIOS) ON                  
Auto Boot Select(ABS)            OFF                 
BIOS Boot Mode                   Safe mode on errors 
Device Exposure                  Expose All          
-----------------------------------------------------
storcli /cx/ex/sx set bootdrive=on|off:
该命令将指定的物理磁盘设置为启动盘。在下一次重新启动时,BIOS 将在指定的物理驱动器中寻找引导扇区。
storcli /cx/vx set bootdrive=on|off:
该命令将指定的虚拟磁盘设置为启动盘。在下一次重新启动时,BIOS 将在指定的虚拟驱动器中寻找引导扇区。
storcli /cx/vx show bootdrive:
该命令显示控制器的启动驱动器。启动盘可以是物理盘,也可以是虚拟盘。
7.3.5、DG 命令
StorCLI 实用程序支持以下驱动器组命令:
storcli /cx/dall show [all]
storcli /cx/dall show cachecade
storcli /cx/dx show [all]
storcli /cx/dx set security=on
storcli /cx/dx split mirror
storcli /cx/dall show mirror
storcli /cx/dall add mirror src=<val>[force]
storcli /cx/dx set hidden=<on|off>
storcli /cx/dall show all:该命令显示控制器中所有可用配置信息,包括拓扑信息、虚拟磁盘信息、物理磁盘信息、空闲空间信息和空闲槽位信息。
storcli /cx/dall show cachecade:该命令显示所有 CacheCade 虚拟磁盘信息。
storcli /cx/dx show all:该命令显示磁盘组的物理磁盘和虚拟磁盘信息。
storcli /cx/dx set security=on:该命令开启指定磁盘组的安全性。
storcli /cx/dx split mirror:
该命令用于对磁盘组执行打破镜像操作。打破镜像操作使 RAID 1 配置的驱动器组被分解成两个卷。您可以在另一个系统中使用一个卷并复制它,而无需复制虚拟驱动器。打破镜像是一个脱机操作。该命令仅在 UEFI 系统支持。
storcli /cx/dall show mirror:该命令显示与该磁盘组关联的镜像的信息。
storcli /cx/dall add mirror src=<val>[force]:该命令将虚拟磁盘与其镜像合并。可能的值为 0、1 或 2。
storcli /cx/dx set hidden=<on|off>:该命令隐藏或显示驱动器组。
7.3.6、Enclosure 命令
StorCLI 实用程序支持以下 enclosure 命令:
storcli /cx/ex show [all]
storcli /cx/ex download src= filepath [mode=5 | [forceActivate] mode=7] [bufferid=<val>]
storcli /cx/ex download src= filepath mode=e offline [forceActivate [delay=val]] [bufferid=<val>]
storcli /cx/ex download mode=f offline [delay=val] [bufferid=<val>]
storcli /cx/ex show status
storcli /cx/ex show phyerrorcounters
storcli /cx/ex/sx reset phyerrorcounters
storcli /cx/ex show all:
该命令显示 enclosure 的所有信息,包括 enclosure 的总体信息、enclosure 的查询数据、enclosure 元素的个数和 enclosure 元素的信息。
storcli /cx/ex download src=filepath [mode=5 | [forceActivate] mode=7] [bufferid=<val>]:
这个命令用命令行指定的文件刷新固件。操作完成后,enclosure 会进行错误检查。以下选项可以与 enclosure 固件下载命令一起使用。
| Option | Value Range | Description | 
|---|---|---|
| forceactivate | — | Issues a command descriptor block (CDB) with write command with no data with command mode 0x0F (flash download already in progress). This option is used primarily to activate Scotch Valley enclosures.  | 
注意:用于刷新 enclosure 的固件文件可以是任何格式。StorCLI 实用程序假定您提供了一个有效的固件映像。
storcli /cx/ex download src=filepath mode=e offline [forceActivate [delay=val]] [bufferid=<val>]:
该命令使用模式 E 支持驱动器固件。模式 E 下载微码,并允许您为多个设备发出此命令。
您可以通过在同一命令行中执行 activenow 命令来下载和激活驱动器固件。您也可以指定延迟时间,但您指定的延迟时间只适用于激活,不适用于下载驱动器固件。
storcli /cx/ex download mode=f offline [delay=val] [bufferid=<val>]:
该命令使用模式 F 支持驱动器固件。模式 F 激活延迟微码,并允许您以安全的方式向所有设备发出此命令。在发出模式 E 命令之前不能发出此命令。缺省情况下,延迟时间为 15 秒。您可以指定 1 到 300 秒之间的任何延迟时间。
storcli /cx/ex show status:该命令显示 enclosure 状态和所有 enclosure 元素的状态。
storcli /cx/ex show phyerrorcounters:该命令显示 enclosure 和 expander phy error counters.
[root@arm64v8 ~]# storcli /c0/e18 show phyerrorcounters
CLI Version = 007.1316.0000.0000 Mar 12, 2020
Operating system = Linux 4.19.90-17.ky10.aarch64
Controller = 0
Status = Success
Description = None
Detailed Status :
===============
------------------------------------------------
EID PNO InDwdCnt RnDiErCnt LsDwSyCnt PRstPrbCnt 
------------------------------------------------
 18   0        0         0         0          0 
 18   1        0         0         0          0 
 18   2        0         0         0          0 
 18   3        0         0         0          0 
 18   4        0         0         0          0 
 18   5        0         0         0          0 
 18   6        0         0         0          0 
 18   7        0         0         0          0 
 18   8        0         0         0          0 
 18   9        0         0         0          0 
 18  10        0         0         0          0 
 18  11        0         0         0          0 
 18  12        0         0         0          0 
 18  13        0         0         0          0 
 18  14        0         0         0          0 
 18  15        0         0         0          0 
 18  16        0         0         0          0 
 18  17        0         0         0          0 
 18  18        0         0         0          0 
 18  19        0         0         0          0 
 18  20        0         0         0          0 
 18  21        0         0         0          0 
 18  22        0         0         0          0 
 18  23        0         0         0          0 
 18  24       36         3         2          0 
 18  25       38         3         2          0 
 18  26       23         1         2          0 
 18  27       34         1         2          0 
 18  28        0         0         0          0 
 18  29        0         0         0          0 
 18  30        0         0         0          0 
 18  31        0         0         0          0 
 18  32        0         0         0          0 
 18  33        0         0         0          0 
 18  34        0         0         0          0 
 18  35        0         0         0          0 
 18  36        0         0         0          0 
 18  37        0         0         0          0 
 18  38        0         0         0          0 
------------------------------------------------
EID=Enclosure Device ID | PNO=Phy Number |InDwdCnt=Invalid dword count |
RnDiErCnt=Running Disparity Error Count |LsDwSyCnt=Loss of dword system count |
PRstPrbCnt=Phy reset prob count
storcli /cx/ex/sx reset phyerrorcounters:该命令重置磁盘 phy error counters.
[root@arm64v8 ~]# storcli /c0/e18/s23 reset phyerrorcounters
CLI Version = 007.1316.0000.0000 Mar 12, 2020
Operating system = Linux 4.19.90-17.ky10.aarch64
Controller = 0
Status = Success
Description = Reset Drive PhyErrorCounters Succeeded.
7.3.7、PHY 命令
StorCLI 实用程序支持以下 phy 命令:
storcli /cx/px|pall set linkspeed=0(auto)|1.5|3|6|12
storcli /cx/px|pall show [all]
storcli /cx/px|pall set linkspeed=0(auto)|1.5|3|6|12:
该命令用于设置 PHY 链路速度。可设置为 1.5Gb/s、3Gb/s、6Gb/s、12Gb/s。当您指定 linkspeed = 0 时,链路速度被设置为自动。
storcli /cx/px|pall show all:该命令显示所有 PHY 层信息。
7.3.8、PCIe 接口命令
PCIe 存储接口是将外设设备连接到主机处理器并通过内存控制器连接到系统中的内存架构的基本接口。PCIe 接口通过一个或多个通道进行通信,每个通道由一个发送和一个接收串行接口组成。
7.3.8.1、通道速度命令
StorCLI 实用程序支持以下通道速度命令:
storcli /cx/lnx show
storcli /cx/lnall show
storcli /cx/lnx set lanespeed=0(disabled)|2.5|5|8|16
storcli /cx/lnx show:该命令用来显示通道信息。
storcli /cx/lnall show:该命令显示所有退出通道的摘要信息。
storcli /cx/lnx set lanespeed=0 (disabled) | 2.5 |5 | 8 | 16:
该命令设置通道速度。可设置为 0(禁用)、2.5GT/s、5GT/s、8GT/s、16GT/s。控制器中通道速度默认为 8GT/s 或您上次保存的值。
7.3.8.2、链接配置命令
StorCLI 实用程序支持以下链接配置命令:
storcli /cx/show linkconfig
storcli /cx/set linkconfig [connname=cx,cy] linkconfig=<val>
storcli cx/show linkconfig:该命令显示当前链路配置、挂起链路配置和可用链路配置信息。
storcli /cx set linkconfig [connname=cx,cy] linkconfig=<val>:该命令用于配置控制器不同端口的链路。
7.3.9、Logging 命令
StorCLI 工具支持以下命令来生成和维护日志文件:
storcli /cx delete events
storcli /cx delete termlog
storcli /cx show events file=<absolute path>
storcli /cx show eventloginfo
storcli /cx show termlog type=config|contents [logfile[=filename]]
storcli /cx show dequeuelog file = <filepath>
storcli /cx show alilog [logfile[=filename]]
storcli /cx delete events:该命令将删除事件日志中的所有记录。
storcli /cx delete termlog:这个命令清除 TTY(用于问题故障排除的固件日志)日志。
storcli /cx show events file=<absolute path>:该命令将系统日志打印到一个文本文件中,并将文件保存到指定的位置。不能转化成 json 格式。
storcli /cx show eventloginfo:该命令显示生成的日志文件的历史。不能转化成 json 格式。
storcli /cx show termlog type=config|contents [logfile[=filename]]:
此命令显示固件日志。config 选项显示term日志配置(TTY BBU缓冲的设置);contents 选项显示终端日志。contents 选项是默认的。
如果在命令语法中使用 logfile 选项,日志将被写入指定的文件。如果不指定文件名,则将日志写入到 storsas.log 文件中。如果在命令语法中不使用 logfile 选项,则将整个日志输出打印到控制台。不能转化成 json 格式。
storcli /cx show dequeuelog =<filepath>:这个命令显示来自固件的调试日志。不能转化成 json 格式。
storcli /cx show alilog [logfile[=filename]]:这个命令获取指定文件的控制器属性、TTY 日志和事件。不能转化成 json 格式。
7.3.10、自动化 PD 配置
storcli /cx set autoconfig=r0 [immediate]
storcli /cx show autoconfig
storcli /cx set autoconfig=JBOD
storcli /cx set jbod=on|off
storcli /cx set autoconfig [=<none | R0 [immediate] | JBOD> [usecurrent]] [[sesmgmt=on|off] [securesed=on|
off] [multipath=on|off] [multiinit=on|off] [discardpinnedcache=<Val>] [failPDOnReadME=on|off] [Lowlatency=low|
off]]
storcli /cx set autoconfig=r0 [immediate]:
该命令用于设置控制器的自动配置策略为 RAID 0。当设置为 RAID 0 时,所有未配置的物理磁盘将被设置为单个RAID 0,直到达到最大虚拟磁盘数量限制。
immediate 选项让此命令只在所有现有的 Unconfigured Good 驱动器上执行转换(到RAID 0)操作。此时 autoconfig 设置还是默认值 none,将来新连接的任何物理驱动器都不会被转换为 RAID 0。
如果省略此命令中的 immediate 选项,则所有附加的 Unconfigured Good 驱动器将成为单驱动器 RAID 0,autoconfig 设置将变为 R0。在新连接的物理驱动器上不会发生到 RAID 0 的转换。
实际上并没有功能设置让新添加的 Unconfigured Drives 自动转换为 RAID 0。
说明:英文原文我读了很多遍,实验也做过好几遍,加不加 immediate 从执行效果来看完全是一样的,只不过 autoconfig 值会不一样,新加的盘也不会因为加不加 immediate 而自动转化成 raid0,所以纠结于此意义不大。
storcli /cx show autoconfig:这个命令用来查看物理磁盘的自动化策略
storcli /cx set autoconfig=JBOD:
该命令让你设置控制器的物理磁盘自动化策略为 JBOD,当设置为 JBOD 模式后,所有 unconfigured good 磁盘都变成 JBOD。
注意:如果该命令失败,请先启用传统 JBOD 模式,然后重试该命令。
storcli /cx set jbod=on|off:该命令用来设置传统的 JBOD 模式
storcli /cx set autoconfig [=<none | R0 [immediate] | JBOD> [usecurrent]] [[sesmgmt=on|off] [securesed=on|off] [multipath=on|off][multiinit=on|off] [discardpinnedcache=<Val>] [failPDOnReadME=on|off] [Lowlatency=low|off]]:
此命令在所选适配器上启用或禁用 autoconfig。可以使用 set autoconfig 命令使用以下选项。
| Option | Description | 
|---|---|
| none | Disable autoconfig. | 
| r0 | Autoconfig for single PD as r0. | 
| JBOD | Autoconfig each PD as JBOD. | 
| immediate | Configure. | 
| unconfigured | Pds once and will not configure any newly inserted UG drives and this option is only for R0. | 
| usecurrent | Use current parameter values that are supported while changing the mode. | 
| sesmgmt | Enable or disable SES management. | 
| securesed | Enable or disable Security on SED. | 
| multiinit | Enable or disable multi init. | 
| multipath | Enable or disable multi path. | 
