注意:
- 此教程在 Oracle 提供的免费实验室环境中提供。
- 它使用 Oracle Cloud Infrastructure 身份证明、租户和区间的示例值。完成练习后,将这些值替换为特定于云环境的值。
在 Oracle Linux 上配置 RAID 逻辑卷
简介
LVM RAID 是创建逻辑卷 (Logical Volume, LV) 的一种方式,它使用多个物理设备来提高性能或容许设备故障。在 LVM 中,物理设备是单个卷组 (VG) 中的物理卷 (Physical Volumes, PV)。
本教程将与 Oracle Linux Volume Manager 实用程序结合使用来创建 RAID 逻辑卷,然后解决磁盘故障。
目标
- 创建 RAID 逻辑卷
- 调整 RAID 逻辑卷的大小
- 恢复发生故障的 RAID 设备
先决条件
具有以下配置的任何 Oracle Linux 8 系统:
- 具有 sudo 权限的非 root 用户
- 用于 LVM 的附加块存储卷
设置实验室环境
注意:使用免费实验室环境时,请参见 Oracle Linux Lab Basics 了解连接和其他使用说明。
-
如果尚未连接,请打开一个终端并通过 ssh 连接到上述每个实例。
ssh oracle@<ip_address_of_instance> -
验证块存储卷是否存在。
sudo lsblk空闲实验环境的输出应显示现有文件系统的 /dev/sda 以及可用磁盘 /dev/sdb、/dev/sdc、/dev/sdd 和 /dev/sde。另外还有两个磁盘(/dev/sdf、/dev/sdg),稍后我们将使用。
物理卷 (PV)
-
使用可用磁盘创建物理卷 (physical volume, PV)。
sudo pvcreate -v /dev/sd[b-e]使用
-v选项运行命令以获取详细信息。 -
验证 PV 创建。
sudo pvs输出示例:
[oracle@ol-node01 ~]$ sudo pvs PV VG Fmt Attr PSize PFree /dev/sda3 ocivolume lvm2 a-- 45.47g 0 /dev/sdb lvm2 --- 50.00g 50.00g /dev/sdc lvm2 --- 50.00g 50.00g /dev/sdd lvm2 --- 50.00g 50.00g /dev/sde lvm2 --- 50.00g 50.00g
卷组 (VG)
-
使用新创建的物理卷创建卷组 (VG)。
sudo vgcreate -v foo /dev/sd[b-e] -
验证 VG 创建。
sudo vgs输出示例:
[oracle@ol-node01 ~]$ sudo vgs VG #PV #LV #SN Attr VSize VFree foo 4 0 0 wz--n- 199.98g 199.98g ocivolume 1 2 0 wz--n- 45.47g 0
逻辑卷 (LV)
-
创建 RAID 逻辑卷 (logical volume, LV)。
sudo lvcreate --type raid5 -i 3 -L 5G -n rr foo--type:设置 RAID 级别。LVM 支持 RAID 级别 0、1、4、5、6 和 10。-i:为 RAID 4/5/6 逻辑卷设置条带(设备)的数量 (n)。raid5 LV 需要 n+1 设备。-L:RAID 阵列的总大小。-n:RAID 阵列的名称。
输出示例:
[oracle@ol-node01 ~]$ sudo lvcreate --type raid5 -i 3 -L 5G -n rr foo Using default stripesize 64.00 KiB. Rounding size 5.00 GiB (1280 extents) up to stripe boundary size 5.00 GiB (1281 extents). Logical volume "rr" created.有关详细信息,请查看
lvmraid(7)手册页。 -
验证 LV 创建。
sudo lvdisplay foo输出显示 foo VG 中包含的所有逻辑卷。
输出示例:
[oracle@ol-node01 ~]$ sudo lvdisplay foo --- Logical volume --- LV Path /dev/foo/rr LV Name rr VG Name foo LV UUID vghyRi-nKGM-3b9t-tB1I-biJX-10h6-UJWvm2 LV Write Access read/write LV Creation host, time ol-node01, 2022-05-19 01:23:46 +0000 LV Status available # open 0 LV Size 5.00 GiB Current LE 1281 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 1024 Block device 252:10 -
显示 LV 类型。
sudo lvs -o name,segtype foo/rrlvs命令可以采用完整的 LV 路径作为缩小结果范围的选项。
输出示例:
[oracle@ol-node01 ~]$ sudo lvs -o name,segtype /dev/foo/rr LV Type rr raid5
创建文件系统
-
在 RAID LV 上创建 XFS 文件系统。
sudo mkfs.xfs -f /dev/foo/rr-f:强制覆盖现有文件系统。
输出示例:
[oracle@ol-node01 ~]$ sudo mkfs.xfs -f /dev/foo/rr meta-data=/dev/foo/rr isize=512 agcount=8, agsize=163952 blks = sectsz=4096 attr=2, projid32bit=1 = crc=1 finobt=1, sparse=1, rmapbt=0 = reflink=1 data = bsize=4096 blocks=1311616, imaxpct=25 = sunit=16 swidth=48 blks naming =version 2 bsize=4096 ascii-ci=0, ftype=1 log =internal log bsize=4096 blocks=2560, version=2 = sectsz=4096 sunit=1 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0注:XFS 文件系统在创建后无法减小其大小。但是,xfs_growfs 命令可以扩展该命令。
挂载 RAID LV
-
挂载文件系统。
sudo mkdir -p /u01 sudo mount /dev/foo/rr /u01 -
报告文件系统磁盘使用情况。
df -h输出示例:
[oracle@ol-node01 ~]$ df -h Filesystem Size Used Avail Use% Mounted on ... /dev/mapper/foo-rr 5.0G 69M 5.0G 2% /u01
调整 RAID LV 的大小
有多种方法可调整 RAID LV 的大小:
- 使用
lvresize或lvextend可增加 LV。 - 使用
lvresize或lvreduce收缩 LV。 - 将
lvconvert与--stripes N参数一起使用可更改条带数量。
重要提示:收缩 LV 有风险,可能会导致数据丢失。在 LV 上运行 XFS 文件系统时,请避免收缩 LV,因为 XFS 不允许减少文件系统大小。
提高 RAID LV 容量
-
使用 VG 中的可用空闲空间,将 RAID LV 大小增加到 10G。
sudo lvresize -L 10G foo/rr要将大小增加 10G,请改用选项
-L +10G。 -
验证 LV 是否已增大到 10G。
sudo lvs foo/rrLSize 应显示 10g。
-
增长文件系统。
sudo xfs_growfs /u01 -
报告更新的文件系统磁盘使用情况。
df -h -
请先检查 RAID 同步状态,然后再继续。
警告:由于 foo/rr 未处于同步状态,太快到下一步可能会显示错误。
如果在调整上面的 RAID LV 大小后同步未完成,将出现此错误。
使用
watch sudo lvs foo/rr检查 RAID LV 并等待 Cpy%Sync 字段达到 100%。一旦 Cpy%Sync 达到 100%,请使用ctrl-c退出watch命令。
有关更多信息,请参见 lvresize(8)、lvextend(8) 和 lvreduce(8) 手册页。
增加 RAID LV 上的条带
更改 RAID LV 上的条带数量会增加总体容量,并且可以在 RAID4/5/6/10 上进行更改。每个额外的条带要求卷组中具有相同数量的未分配的物理卷(设备)。
-
检查 VG foo 中存在哪些物理卷 (physical volume, PV)。
sudo pvs在输出 /dev/sdb、/dev/sdc、/dev/sdd 和 /dev/sde 中,都与 VG foo 关联。
-
确定是否有任何未使用的物理卷。
sudo pvdisplay -m /dev/sd[b-e]输出示例:
--- Physical volume --- PV Name /dev/sdb VG Name foo PV Size 50.00 GiB / not usable 4.00 MiB Allocatable yes PE Size 4.00 MiB Total PE 12799 Free PE 11944 Allocated PE 855 PV UUID Q1uEMC-0zL1-dgrA-9rIT-1xrA-Vnfr-2E8tJT --- Physical Segments --- Physical extent 0 to 0: Logical volume /dev/foo/rr_rmeta_0 Logical extents 0 to 0 Physical extent 1 to 854: Logical volume /dev/foo/rr_rimage_0 Logical extents 0 to 853 Physical extent 855 to 12798: FREE ...带
-m选项的pvdisplay命令显示物理区到逻辑卷和逻辑区的映射。示例输出中的 PV /dev/sdb 显示了与 RAID LV 关联的物理区。对于 /dev/sdc、/dev/sdd 和 /dev/sde,也应该出现这种情况。 -
向 VG 添加另一个 PV。
由于现有 RAID LV 使用所有现有物理卷,请将 /dev/sdf 添加到 PV 镜像中。
sudo vgextend foo /dev/sdf输出显示
vgextend命令将 /dev/sdf 转换为 PV,然后再将其添加到 VG foo。 -
向 RAID LV 添加条带。
sudo lvconvert --stripes 4 foo/rr使用
y响应提示。输出示例:
[oracle@ol-node01 ~]$ sudo lvconvert --stripes 4 foo/rr Using default stripesize 64.00 KiB. WARNING: Adding stripes to active and open logical volume foo/rr will grow it from 2562 to 3416 extents! Run "lvresize -l2562 foo/rr" to shrink it or use the additional capacity. Are you sure you want to add 1 images to raid5 LV foo/rr? [y/n]: y Logical volume foo/rr successfully converted. -
验证 LV 新大小。
sudo lvs foo/rr输出示例:
[oracle@ol-node01 ~]$ sudo lvs foo/rr LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert rr foo rwi-aor--- 13.34g 2.24容量 (LSize) 由 3.34g 增长,同步 (Cpy%Sync) 开始。同步是使 RAID LV 中的所有设备彼此一致的过程,在修改或更换 RAID LV 中的设备时,完全同步是必需的。
-
检查同步状态。
运行检查,直到进度达到 100%。
watch sudo lvs foo/rr一旦 Cpy%Sync 达到 100%,请使用
ctrl-c退出watch命令。使用
watch命令的其他方法包括:- 运行
watch -n 5 sudo lvs foo/rr可刷新每 5 秒,而不刷新默认 2 秒。 - 运行
timeout 60 watch -n 5 sudo lvs foo/rr以在 60 秒后自动退出。
- 运行
-
显示新的段范围和 PV,现在包括 /dev/sdf。
sudo lvs -a -o lv_name,attr,segtype,seg_pe_ranges,dataoffset foo
恢复 LV 中发生故障的 RAID 设备
RAID 阵列可以继续使用发生故障的设备运行。对于 RAID1 以外的 RAID 类型,删除设备意味着转换为较低级别的 RAID(在本例中为 RAID5 转换为 RAID0)。
LVM 允许在单个步骤中使用 lvconvert --repair 命令替换 RAID 卷中发生故障的设备,而不是移除发生故障的驱动器并可能添加更换。
-
检查当前的 RAID LV 布局。
sudo lvs --all --options name,copy_percent,devices foo -
模拟 /dev/sdd 上的故障。
echo 1 | sudo tee /sys/block/sdd/device/delete -
出现故障后,重新检查 RAID LV 布局。
sudo lvs --all --options name,copy_percent,devices foo请注意 [unknown] 设备。
输出示例:
[oracle@ol-node01 ~]$ sudo lvs --all --options name,copy_percent,devices foo WARNING: Couldn't find device with uuid o1JwCl-DTpi-anww-rYt3-1LCq-vmLV-FQCKyc. WARNING: VG foo is missing PV o1JwCl-DTpi-anww-rYt3-1LCq-vmLV-FQCKyc (last written to /dev/sdd). LV Cpy%Sync Devices rr 100.00 rr_rimage_0(0),rr_rimage_1(0),rr_rimage_2(0),rr_rimage_3(0),rr_rimage_4(0) [rr_rimage_0] /dev/sdb(855) [rr_rimage_0] /dev/sdb(1) [rr_rimage_1] /dev/sdc(855) [rr_rimage_1] /dev/sdc(1) [rr_rimage_2] [unknown](855) [rr_rimage_2] [unknown](1) [rr_rimage_3] /dev/sde(855) [rr_rimage_3] /dev/sde(1) [rr_rimage_4] /dev/sdf(855) [rr_rimage_4] /dev/sdf(1) [rr_rmeta_0] /dev/sdb(0) [rr_rmeta_1] /dev/sdc(0) [rr_rmeta_2] [unknown](0) [rr_rmeta_3] /dev/sde(0) [rr_rmeta_4] /dev/sdf(0) -
更换出现故障的设备。
sudo lvconvert --repair foo/rr使用
y响应提示。该命令无法找到要在 VG 中使用的可用空间或设备。
输出示例:
[oracle@ol-node01 ~]$ sudo lvconvert --repair foo/rr WARNING: Couldn't find device with uuid o1JwCl-DTpi-anww-rYt3-1LCq-vmLV-FQCKyc. WARNING: VG foo is missing PV o1JwCl-DTpi-anww-rYt3-1LCq-vmLV-FQCKyc (last written to /dev/sdd). WARNING: Couldn't find device with uuid o1JwCl-DTpi-anww-rYt3-1LCq-vmLV-FQCKyc. Attempt to replace failed RAID images (requires full device resync)? [y/n]: y Insufficient free space: 856 extents needed, but only 0 available Failed to replace faulty devices in foo/rr.警告:如果错误包含 "Unable to replace device in foo/r while it is in-sync" 消息,请通过运行
watch sudo lvs foo/rr并确认 Cpy%Sync 为 100%,确认 RAID-LV 是同步的。然后重试lvconvert命令。 -
将设备 /dev/sdg 添加到 VG
sudo vgextend foo /dev/sdg输出中的 WARNING 消息是由于仍缺少故障驱动器。
-
重试更换发生故障的驱动器。
sudo lvconvert --repair foo/rr使用
y再次响应提示。输出再次显示有关缺少的驱动器的 WARNING 消息,但是该命令成功替换了 VG 中的故障设备。
-
检查布局。
sudo lvs --all --options name,copy_percent,devices foo请注意,/dev/sdg 替换了所有 [unknown] 设备条目。
-
从 VG 中移除发生故障的设备。
LVM 实用程序将继续报告 LVM 在从 VG 中删除故障设备之前无法找到该设备。
sudo vgreduce --removemissing foo输出中的 WARNING 消息是由于仍缺少故障驱动器。
-
请先检查 RAID 同步状态,然后再继续。
警告:过快地继续到下一部分可能会显示以下错误消息:
输出示例:
[oracle@ol-node01 ~]$ sudo lvchange --syncaction check foo/rr foo/rr state is currently "recover". Unable to switch to "check".如果在将条带添加到 RAID LV 之后同步未完成,将出现此错误。
使用
watch sudo lvs foo/rr检查 RAID LV 并等待 Cpy%Sync 字段达到 100%。
检查 RAID LV 中的数据一致性(清理)
LVM 为 RAID LV 提供清理功能,可读取数组中的所有数据和奇偶校验块并检查一致性。
-
在检查模式下启动清理。
sudo lvchange --syncaction check foo/rr -
显示清理操作的状态。
watch sudo lvs -a -o name,raid_sync_action,sync_percent foo/rr输出示例:
[oracle@ol-node01 ~]$ sudo lvs -a -o name,raid_sync_action,sync_percent foo/rr LV SyncAction Cpy%Sync rr check 30.08 -
清理(同步)完成后,显示找到的不一致块的数量。
sudo lvs -o +raid_sync_action,raid_mismatch_count foo/rrraid_sync_action选项使用以下值之一显示 SyncAction 字段:idle:所有操作都已完成。resync:在系统故障后初始化或恢复。recover:替换数组中的设备。check:查找差异。repair:查找和修复差异。
输出示例:
[oracle@ol-node01 ~]$ lvs -o +raid_sync_action,raid_mismatch_count foo/rr LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert SyncAction Mismatches rr foo rwi-aor--- 13.34g 44.42 check 0输出显示 0 个不一致 (不匹配)。
-
(可选)修复数组中的差异。
此步骤是可选的,因为此示例数组中可能不存在任何差异。
sudo lvchange --syncaction repair foo/rr -
(可选)检查维修状态。
sudo lvs -o +raid_sync_action,raid_mismatch_count foo/rr请注意,SyncAction 字段已更改为 repair。
有关更多信息,请参见 lvchange(8) 和 lvmraid(7) 手册页。
详细信息:
更多学习资源
浏览 docs.oracle.com/learn 上的其他实验室,或者在 Oracle Learning YouTube 频道上访问更多免费学习内容。此外,请访问 education.oracle.com/learning-explorer 以成为 Oracle 学习资源管理器。
有关产品文档,请访问 Oracle 帮助中心。
Configure RAID Logical Volumes on Oracle Linux
F57865-02
May 2022
Copyright © 2021, Oracle and/or its affiliates.