上一篇 下一篇 分享链接 返回 返回顶部

从硬件RAID创建到文件系统格式化,香港服务器磁盘阵列如何初始化?

发布人:Minchunlin 发布时间:2026-10-08 11:12 阅读量:2

目标状态是:香港机房中的物理磁盘先由硬件 RAID 控制器组合为一个可用的虚拟磁盘,Ubuntu Server 24.04 LTS 只识别该虚拟磁盘;随后在 Linux 中完成 GPT 分区、文件系统格式化、UUID 挂载和启动持久化。上线前还需要确认阵列状态为 Optimal、初始化或一致性检查完成、文件系统可读写,并且重启后仍能自动挂载。

以下流程以 x86_64 架构的 Ubuntu Server 24.04 LTS、systemd 运行环境和一组受硬件 RAID 控制器管理的 SAS/SATA SSD 为例。示例目标为 4 块容量相同的 SSD 创建 RAID10,并将文件系统挂载到 /srv/data。如果服务器使用的是其他控制器、机械硬盘、NVMe RAID 或系统盘本身也位于阵列中,应以控制器界面显示的设备状态和厂商命令格式为准,不要直接套用物理盘路径。

对于需要在香港部署并自行完成阵列初始化的业务,A5数据提供多种物理服务器硬件基础。香港存储系列可提供四块14TB企业级机械硬盘与H730控制器组合,适合大容量文件、备份和归档场景;同时覆盖SSD、NVMe及Xeon Gold、AMD EPYC等配置,可为网站、数据库、业务后台和多任务应用搭建匹配的数据存储环境。

一、准备条件和上线目标

1. 确认本次初始化的边界

硬件 RAID 初始化通常包含两层操作:

  1. 在 RAID 控制器层创建 Virtual Disk,也称逻辑磁盘或虚拟磁盘。
  2. 在操作系统层对 Virtual Disk 分区、格式化并挂载。

操作系统看到的通常是一个逻辑磁盘,而不是 RAID 后面的每一块物理盘。比如 4 块物理盘创建 RAID10 后,Ubuntu 可能只显示一个 /dev/sdb,这属于正常现象。

一、准备条件和上线目标 / 确认本次初始化的边界配图

本文的示例环境如下:

项目示例值
操作系统Ubuntu Server 24.04 LTS x86_64
启动方式UEFI + GPT
RAID 类型硬件 RAID10
物理磁盘4 块容量相同的 SAS/SATA SSD
文件系统ext4,XFS 作为可选方案
挂载点/srv/data
服务器运行环境systemd,非容器化主机数据目录
上线目标RAID 状态正常、数据卷可读写、重启后自动挂载

如果操作系统也需要安装在 RAID 上,应先在控制器中创建系统盘对应的 RAID1 或 RAID10 Virtual Disk,再从 UEFI 启动安装介质。安装器中选择的是 RAID 虚拟磁盘,而不是单独的物理盘。

2. 先确定阵列用途

创建前需要明确阵列是用于系统盘、应用数据、数据库,还是备份缓存。不同用途的 RAID 级别和容量取舍不同。

RAID 级别最少磁盘数可用容量的典型比例故障容忍边界常见用途
RAID12约 50%同一镜像组通常可坏 1 块系统盘、配置和小型业务
RAID104,通常为偶数约 50%取决于故障盘是否位于同一镜像组数据库、虚拟机、高并发读写
RAID53约为总容量减 1 块可坏 1 块容量优先、写入压力适中的场景
RAID64约为总容量减 2 块可坏 2 块大容量数据、重建风险较高的场景

RAID 不是备份。阵列可以应对部分磁盘故障,但无法替代异地备份、版本备份或对象存储备份。控制器故障、误删除、勒索软件、文件系统损坏和配置误操作仍可能影响整个 Virtual Disk。

3. 检查远程维护和回滚条件

香港服务器通常通过 IPMI、远程 KVM 或云平台控制台进行重启和配置。开始前应确认:

  • 能够进入 BIOS/UEFI 或 RAID 控制器管理界面。
  • 至少保留一个可用的远程控制台,避免阵列创建后无法远程启动。
  • 已保存原有数据的完整备份,并确认可以读取备份目录。
  • 已记录当前 RAID 配置、物理盘槽位、序列号和控制器型号。
  • 已停止写入该阵列的应用、数据库和定时任务。
  • 已安排维护窗口,避免在业务高峰期初始化或重建阵列。
  • 如果原阵列存在数据,不能执行清除 Foreign Configuration、删除 Virtual Disk 或重新格式化操作。

阵列创建、分区和格式化都会覆盖元数据甚至业务数据。只要不能明确判断磁盘是否为空,就应暂停操作,不要用“初始化后再恢复”的方式试探。

4. 安装主机侧检查工具

在 Ubuntu Server 中可先安装常用检查工具。storcli 通常由 RAID 控制器厂商单独提供,不一定位于 Ubuntu 默认软件源中。

sudo apt update
sudo apt install -y lsscsi smartmontools sg3-utils sysstat

如果计划使用 XFS,再安装对应工具:

sudo apt install -y xfsprogs

记录当前设备和控制器信息:

sudo lspci -nn | grep -Ei 'raid|sas|scsi'
sudo lsblk -e7 -o NAME,KNAME,PATH,MODEL,SERIAL,SIZE,TYPE,FSTYPE,MOUNTPOINTS
sudo lsscsi -g
sudo dmesg -T | grep -Ei 'raid|megaraid|scsi|sas|error|fail'

这里的输出只用于识别环境。不要因为看到某个 /dev/sdX 就立即执行 parted 或 mkfs。

二、在硬件 RAID 控制器中创建阵列

1. 进入控制器管理界面

重启服务器,在 POST 阶段根据控制器提示进入管理界面。不同品牌和固件版本可能使用独立按键、UEFI Storage 菜单或远程管理页面,具体入口以屏幕提示为准。

进入后依次确认:

  1. 控制器本身状态正常。
  2. 目标物理盘数量、容量、接口类型与规划一致。
  3. 物理盘状态为可配置或 Unconfigured Good。
  4. 没有正在进行的重建、预警或介质错误。
  5. 控制器缓存保护模块处于正常状态。
  6. 没有需要处理的 Foreign Configuration。

如果看到 Foreign Configuration,先确认这些磁盘是否曾属于旧服务器或旧阵列。只有在已确认数据不需要保留,并且完成备份和配置记录后,才可以清除外部配置。未知来源的 Foreign Configuration 不应直接执行 Clear。

2. 选择 RAID 级别和阵列参数

以 4 块相同 SSD 创建 RAID10 为例,在控制器界面中选择:

  • RAID Level:RAID10。
  • 物理盘:4 块目标 SSD,优先选择容量和型号一致的磁盘。
  • Virtual Disk:创建一个逻辑磁盘。
  • 容量:使用全部容量,或按业务规划划分系统盘和数据盘。
  • Stripe Size:常见值包括 256 KiB、512 KiB 等,具体根据业务 I/O 模式和控制器建议选择。
  • Read Policy:通常保留控制器推荐值,数据库等随机访问业务不要仅凭经验强行修改。
  • Write Policy:只有缓存保护模块正常时才考虑 Write Back;电池或闪存保护异常时应使用 Write Through。
  • Hot Spare:如有同型号或兼容容量的备用盘,可配置专用或全局热备盘。

写回缓存依赖控制器缓存保护。没有电池、闪存缓存保护或保护状态异常时,强制启用 Write Back 可能在掉电时丢失尚未落盘的数据。远程机房还应确认服务器接入了可靠的供电和带外管理。

3. 初始化方式

控制器一般会提供 Fast Initialization、Full Initialization、Background Initialization 或类似选项。

  • Fast Initialization 主要清理逻辑元数据,开始速度较快。
  • Full Initialization 会对更大范围进行初始化或校验,耗时更长。
  • Background Initialization 可能允许阵列提前呈现,但会持续占用磁盘和控制器资源。
  • Consistency Check 用于检查镜像或校验信息的一致性,具体行为取决于 RAID 级别和控制器。

如果阵列存放生产数据,不应只因为 Virtual Disk 已经出现就立即上线。至少应等待控制器状态恢复为 Optimal,并确认初始化、重建或一致性检查没有错误。初始化期间性能下降属于常见现象,但持续出现介质错误、掉盘或控制器告警时应停止上线计划。

4. 使用 StorCLI 查询或创建

部分 Broadcom/LSI 系列控制器可以通过 StorCLI 管理。命令名称、安装路径、控制器编号和物理盘地址会因版本而变化,以下命令只适用于已安装且可执行的 StorCLI 环境。

先查看控制器和物理盘:

sudo storcli64 /c0 show
sudo storcli64 /c0/eall/sall show
sudo storcli64 /c0 show all

输出中的 c0 表示控制器编号,EID:Slt 或类似字段表示机箱和槽位。确认目标盘后,再查看缓存保护状态:

sudo storcli64 /c0/bbu show
sudo storcli64 /c0/cv show

某些版本不支持其中一个子命令,遇到“不支持”时应使用控制器界面或该版本对应的命令帮助,不要据此判断缓存保护一定异常。

以下是使用 4 块指定槽位创建 RAID10 的示例。32:0 至 32:3 只是示例地址,必须替换为上一步查询到的实际机箱号和槽位:

sudo storcli64 /c0 add vd type=raid10 size=all drives=32:0,32:1,32:2,32:3

有些 StorCLI 版本将 RAID10 写成 r10,或要求使用不同的磁盘列表格式。执行创建前可先查看帮助:

sudo storcli64 /c0 add vd help

创建后检查 Virtual Disk:

sudo storcli64 /c0/v0 show all
sudo storcli64 /c0/eall/sall show

删除 Virtual Disk、清除 Foreign Configuration 或强制初始化属于不可逆的高风险操作。命令格式也因版本不同而变化,因此不建议在没有确认数据为空的情况下直接复制删除命令。对于新购空盘,优先使用控制器管理界面逐项确认后操作,并截取配置页面作为回滚记录。

5. 设置启动顺序

如果 RAID Virtual Disk 承载操作系统:

  1. 将系统 Virtual Disk 设置为第一启动设备。
  2. 使用 UEFI 启动方式。
  3. 使用 GPT 分区表安装 Ubuntu Server。
  4. 在安装器中核对磁盘容量和控制器提供的逻辑磁盘名称。
  5. 不要把同一控制器后面的单独物理盘当成系统盘。

如果操作系统装在独立系统盘,数据 RAID 可以在系统启动后创建,也可以提前创建。无论哪种方式,都应确保系统盘和数据 Virtual Disk 的容量、序列信息能够区分。

三、在 Ubuntu 中识别 RAID 虚拟磁盘

1. 重启后确认系统只看到预期逻辑盘

控制器配置完成后重启服务器:

sudo reboot

系统恢复后检查块设备:

sudo lsblk -e7 -o NAME,KNAME,PATH,MODEL,SERIAL,SIZE,TYPE,FSTYPE,MOUNTPOINTS
sudo lsscsi -g
sudo dmesg -T | grep -Ei 'raid|megaraid|scsi|sas|error|fail'

正常情况下,系统会看到一个容量接近 RAID10 可用容量的逻辑磁盘。不要要求操作系统显示 4 块独立磁盘;硬件 RAID 的目的就是由控制器对物理盘进行抽象。

同时检查控制器状态:

sudo storcli64 /c0/v0 show all
sudo storcli64 /c0 show

只有在 Virtual Disk 为 Optimal、没有 Failed 或 Degraded 物理盘,并且控制器没有持续报错时,才进入分区和格式化阶段。

2. 使用稳定路径识别目标磁盘

Linux 中的 /dev/sda、/dev/sdb 可能因启动顺序、控制器枚举顺序或设备变化而改变。分区和挂载前,应通过容量、型号、序列号和当前挂载点共同确认目标设备。

查看持久化设备路径:

ls -l /dev/disk/by-id/

选定目标 Virtual Disk 后,将实际路径写入变量。下面的路径是占位示例,需要替换为服务器实际存在的链接:

export RAID_DISK="/dev/disk/by-id/scsi-REPLACE_WITH_VIRTUAL_DISK_ID"
readlink -f "$RAID_DISK"
sudo blockdev --getsize64 "$RAID_DISK"
sudo lsblk -f "$RAID_DISK"

如果 readlink -f 指向了系统盘、已有业务盘或容量不符合规划,应立即停止。不要继续执行分区命令。

四、创建 GPT 分区并格式化文件系统

1. 先确认没有旧数据

分区表和文件系统操作会覆盖目标逻辑磁盘上的结构。操作前再次检查挂载状态和已有签名:

sudo findmnt
sudo lsblk -f "$RAID_DISK"
sudo wipefs -n "$RAID_DISK"

wipefs -n 只显示签名,不会删除数据。只有在已确认目标 Virtual Disk 为空、备份有效且需要清理旧签名时,才考虑使用带 -a 的清理命令。对于已有业务数据,不能通过清理签名来“修复识别问题”。

四、创建 GPT 分区并格式化文件系统 / 先确认没有旧数据配图

2. 创建 GPT 和数据分区

以下命令会重新建立 GPT 分区表,适用于已确认为空的新建 RAID Virtual Disk:

sudo parted -s "$RAID_DISK" mklabel gpt
sudo parted -s "$RAID_DISK" mkpart primary 1MiB 100%
sudo partprobe "$RAID_DISK"
sudo udevadm settle
sudo lsblk -o NAME,PATH,SIZE,TYPE,FSTYPE,MOUNTPOINTS "$RAID_DISK"

从持久化路径生成第一分区路径:

export RAID_PART="${RAID_DISK}-part1"
readlink -f "$RAID_PART"
sudo blockdev --getsize64 "$RAID_PART"

如果系统没有立即创建 -part1 链接,可以通过 lsblk -o PATH 找到实际分区路径,再将 RAID_PART 设置为该路径。不要因为路径未出现就重复执行 mklabel。

3. 选择文件系统

对于 Ubuntu Server 数据目录,ext4 兼容性较好,恢复工具和运维人员熟悉程度也较高。XFS 适合大容量文件系统和较大规模的连续 I/O,但需要使用 XFS 专用工具维护。

两种命令只能选择一种执行,不能连续执行:

sudo mkfs.ext4 -F -L hkdata "$RAID_PART"

或者:

sudo mkfs.xfs -f -L hkdata "$RAID_PART"

-F 和 -f 都可能强制覆盖现有文件系统。执行前再次确认 RAID_PART 指向的是新建且为空的 Virtual Disk 分区。文件系统类型一旦确定,后续检查工具必须匹配:ext4 使用 e2fsck,XFS 使用 xfs_repair。

4. 挂载 ext4 数据卷

先创建挂载点并备份 /etc/fstab:

sudo mkdir -p /srv/data
sudo cp -a /etc/fstab "/etc/fstab.bak.$(date +%Y%m%d-%H%M%S)"

获取 UUID:

sudo blkid "$RAID_PART"
export RAID_UUID="$(sudo blkid -s UUID -o value "$RAID_PART")"
printf '%s\n' "$RAID_UUID"

确认 /etc/fstab 中没有已有的 /srv/data 配置:

grep -nE '[[:space:]]/srv/data[[:space:]]' /etc/fstab || true

确认没有重复项后追加 ext4 配置:

printf 'UUID=%s /srv/data ext4 defaults,noatime 0 2\n' "$RAID_UUID" | sudo tee -a /etc/fstab

验证语法并挂载:

sudo findmnt --verify
sudo mount /srv/data
sudo findmnt -no SOURCE,FSTYPE,OPTIONS,TARGET /srv/data

如果选择 XFS,/etc/fstab 中的文件系统类型和检查字段应改为:

UUID=替换为实际UUID /srv/data xfs defaults,noatime 0 0

修改后执行:

sudo findmnt --verify
sudo mount /srv/data
sudo findmnt -no SOURCE,FSTYPE,OPTIONS,TARGET /srv/data

noatime 可以减少访问时间更新带来的额外写入,但不应随意添加 nobarrier 等可能削弱数据保护的选项。SSD 的 discard/TRIM 是否可透传到物理盘,取决于 RAID 控制器和固件,不能仅凭文件系统支持就直接启用。

5. 设置业务权限

挂载点初始通常由 root 管理。应用使用前,应根据实际服务账户设置目录所有者和权限,不能把目录直接开放为全局可写。

先确认服务账户:

id appuser

确认账户存在并且挂载点正确后,再按业务要求调整:

sudo chown appuser:appuser /srv/data
sudo chmod 0750 /srv/data

chown 和 chmod 会影响应用访问权限。若多个服务共享目录,应先确认各服务的用户组、读写范围和备份账户,再决定权限,不要使用 chmod -R 777 作为通用修复方式。

五、结果验证和上线检查

1. 验证容量、文件系统和挂载关系

执行以下检查:

sudo lsblk -f
sudo findmnt /srv/data
df -hT /srv/data
df -ih /srv/data
sudo stat -f /srv/data

lsblk 通常以二进制单位显示容量,df -h 也采用便于阅读的二进制单位;如果需要十进制容量,可使用:

df -HT /srv/data

以 4 块 1.92 TB 物理盘创建 RAID10 为例,未计入文件系统和控制器保留空间时,可用原始容量约为:

  • 4 × 1.92 TB = 7.68 TB 物理总容量。
  • RAID10 约使用一半镜像容量:7.68 TB ÷ 2 = 3.84 TB。
  • 按 1 TB = 10^12 字节换算,3.84 TB 约等于 3.49 TiB。
  • 文件系统元数据、分区对齐和控制器保留空间会使实际可用空间略低于该值。

因此,看到 df -h 显示约 3.4T 到 3.5T,并不代表 RAID 容量异常。关键是同时核对物理盘数量、控制器 Virtual Disk 容量和文件系统容量。

2. 验证读写能力

下面的测试会向数据目录写入约 256 MiB 文件,只适合在空目录或维护窗口执行,不应在生产业务目录中随意运行:

sudo dd if=/dev/zero of=/srv/data/.raid-init-test bs=1M count=256 oflag=direct status=progress
sudo sync
sudo sha256sum /srv/data/.raid-init-test
sudo rm -f -- /srv/data/.raid-init-test

检查内核和系统日志:

sudo journalctl -k -b --no-pager -p warning
sudo dmesg -T | tail -n 100

如果出现 I/O error、媒体错误、文件系统重新挂载为只读、SCSI reset 或控制器异常,应停止业务上线,先检查 RAID 状态和物理盘健康情况。

3. 验证重启后的自动挂载

在确认没有生产任务运行、并且 /etc/fstab 已备份后,执行一次启动配置验证:

sudo mount -a -v
sudo findmnt --verify
sudo findmnt /srv/data

确认挂载来源是预期 UUID,而不是临时手工挂载的 /dev/sdX:

sudo findmnt -no SOURCE,FSTYPE,OPTIONS,TARGET /srv/data

若条件允许,在维护窗口内重启:

sudo reboot

重启后再次检查:

sudo lsblk -f
sudo findmnt /srv/data
df -hT /srv/data
sudo storcli64 /c0/v0 show all

硬件 RAID 状态和 Linux 挂载状态必须同时正常。只有目录可访问但 Virtual Disk 处于 Degraded,或阵列显示 Optimal 但 /srv/data 未挂载,都不能视为验收通过。

4. 观察初始化和性能影响

查看控制器后台任务:

sudo storcli64 /c0 show
sudo storcli64 /c0/v0 show all

查看系统 I/O:

iostat -xz 1 5

初始化、重建和一致性检查期间,磁盘利用率较高、延迟增加是常见现象。不要在这些任务进行时用业务基准测试作为最终性能结论。应等待控制器后台任务结束,再根据实际业务模型测试随机读写、顺序读写和并发延迟。

六、常见失败处理

1. Ubuntu 只看到单块物理盘,未看到预期容量

可能原因包括:

  • RAID 控制器没有创建 Virtual Disk。
  • 控制器处于 HBA、JBOD 或直通模式。
  • 创建阵列后尚未重启或系统未重新枚举设备。
  • 控制器驱动、固件或硬件本身存在问题。
  • 误把系统盘或其他逻辑盘当成目标盘。

先查看控制器和内核日志:

sudo lspci -nn | grep -Ei 'raid|sas|scsi'
sudo lsscsi -g
sudo dmesg -T | grep -Ei 'raid|megaraid|scsi|sas|error|fail'
sudo lsblk -e7 -o NAME,PATH,MODEL,SERIAL,SIZE,TYPE,FSTYPE,MOUNTPOINTS

在问题没有确认前,不要对任何新出现的设备执行 mkfs。硬件 RAID 模式下,系统通常不应该看到阵列成员盘的独立业务容量。

2. 控制器显示 Foreign Configuration

Foreign Configuration 可能表示磁盘保留了旧阵列元数据,也可能是控制器更换后发现了原有阵列。处理顺序应为:

  1. 记录控制器型号、磁盘槽位、序列号和当前状态。
  2. 判断这些磁盘是否有历史业务数据。
  3. 如果需要保留,优先选择 Import 或恢复原配置的路径。
  4. 如果确认是空盘或旧配置无业务价值,再考虑 Clear。
  5. 清除后重新创建阵列,并重新执行初始化和验证。

不要在数据来源不明时选择 Clear Foreign。清除后可能无法直接恢复原来的阵列布局。

3. Virtual Disk 处于 Degraded 或正在重建

先查看具体故障盘和后台任务:

sudo storcli64 /c0 show
sudo storcli64 /c0/eall/sall show
sudo storcli64 /c0/v0 show all

处理原则如下:

左右使用完全相同的四盘、两镜像组布局,左侧各组一块故障,右侧同组两块故障;用盘状态及组边界突出差异,明确只是概念分组而非实际槽位映射

  • 正在重建时,不要随意重启、删除阵列或强制上线故障盘。
  • 确认故障盘槽位后,按控制器和服务器厂商要求更换。
  • 替换盘容量不能小于原成员盘,接口和兼容性也要满足控制器要求。
  • 不要把状态为 Foreign、Unconfigured Bad 或已有数据的磁盘强制加入阵列。
  • 重建期间降低非必要 I/O,等待状态恢复为 Optimal。
  • 如果同一镜像组内又出现第二块故障盘,应停止写入并优先处理备份和恢复方案。

RAID 重建期间仍然可以读写,不代表阵列已经恢复到正常保护水平。

4. mount -a 失败或重启后未挂载

常见原因是 UUID 拼写错误、文件系统类型写错、挂载点不存在或 /etc/fstab 出现重复配置。

检查实际 UUID:

sudo blkid "$RAID_PART"
sudo grep -nE '[[:space:]]/srv/data[[:space:]]' /etc/fstab
sudo findmnt --verify

查看挂载错误:

sudo journalctl -b --no-pager | grep -Ei 'mount|fstab|srv/data|ext4|xfs'

不要因为挂载失败就重新执行 mkfs。如果只是配置错误,应修正 /etc/fstab 后再测试:

sudo mount -a
sudo findmnt /srv/data

5. 文件系统报错或被挂载为只读

先停止业务写入并检查控制器状态:

sudo storcli64 /c0/v0 show all
sudo journalctl -k -b --no-pager | grep -Ei 'I/O error|read-only|ext4|xfs|scsi'

如果是 ext4,必须先卸载,再进行只读检查或修复:

sudo umount /srv/data
sudo e2fsck -f -n "$RAID_PART"

-n 用于先进行不修改检查。确认有备份并明确需要修复后,再由维护人员执行实际修复。对于 XFS,不能使用 e2fsck,应先卸载并使用:

sudo umount /srv/data
sudo xfs_repair -n "$RAID_PART"

文件系统工具只能处理文件系统层的问题,不能代替 RAID 重建。若控制器仍处于 Degraded、持续报告介质错误或发生 I/O 超时,应先解决硬件和阵列状态。

6. 阵列可用但性能明显偏低

先排除初始化、重建或一致性检查正在运行:

sudo storcli64 /c0 show all
sudo iostat -xz 1 10

重点检查:

  • RAID 是否仍在后台初始化或重建。
  • 写缓存是否因保护模块异常而自动切换为 Write Through。
  • 是否使用了不匹配的物理盘。
  • 是否在阵列上运行了不适合的随机写入负载。
  • 文件系统是否已接近满容量。
  • 控制器和磁盘是否存在错误重试或链路重置。

不要为了追求测试结果,关闭缓存保护、强制启用无保护写回或降低数据一致性保护。

七、回滚方案

1. 尚未格式化时回滚

如果只是完成了 RAID Virtual Disk 创建,但尚未分区、格式化和写入业务数据:

  • 保留控制器配置截图和物理盘槽位记录。
  • 通过控制器界面删除刚创建的空 Virtual Disk,或重新调整 RAID 级别。
  • 只有确认该 Virtual Disk 没有业务数据时,才可以执行删除。
  • 如果原先存在旧阵列,不得把“重新创建”当作恢复原阵列的方法。

删除 Virtual Disk 会使其上的数据不可用。回滚到旧阵列的正确方式是恢复原有配置或从备份恢复,而不是尝试用相同 RAID 级别重新创建一个同名逻辑盘。

2. 已格式化但尚未上线时回滚

如果已经格式化并写入测试文件,但业务尚未使用,可以先恢复挂载配置:

sudo umount /srv/data
ls -lt /etc/fstab.bak.*

选择本次操作前保存的备份文件,替换当前配置:

sudo cp -a /etc/fstab.bak.YYYYMMDD-HHMMSS /etc/fstab
sudo findmnt --verify

如果确认需要撤销整个新建阵列,应在控制器界面删除该空 Virtual Disk,再按新的规划重新创建。删除前必须停止所有可能访问 /srv/data 的服务,并再次确认没有需要保留的数据。

3. 已经写入业务数据时回滚

已有业务数据时,回滚不应通过删除阵列或重新格式化完成。建议采用以下顺序:

  1. 停止应用和定时写入任务。
  2. 保留当前控制器配置和系统日志。
  3. 检查 RAID 是否 Optimal,确认是否存在硬件故障。
  4. 将可读取数据复制到独立备份介质。
  5. 在新建且验证通过的阵列上建立临时挂载点。
  6. 使用备份恢复数据和权限。
  7. 修改应用配置指向新的挂载点。
  8. 完成抽样读取、权限和业务功能验证后再恢复服务。

例如,备份已准备在 /backup/data/,目标文件系统已经挂载到 /srv/data,可以使用:

sudo rsync -aHAX --numeric-ids /backup/data/ /srv/data/

恢复前应确认备份路径和目标路径无误。rsync 的源路径末尾斜杠会影响目录层级,执行前应先用小范围目录验证,避免恢复到错误位置。

上线或验收检查清单

上线前逐项确认并保存结果:

  • [ ] 已确认 RAID 控制器型号、固件、物理盘槽位和序列号。
  • [ ] 已确认本次操作对象为空盘或已有可恢复备份。
  • [ ] 已记录原有 RAID 配置,未误清除 Foreign Configuration。
  • [ ] RAID 级别、磁盘数量、容量和热备策略符合业务规划。
  • [ ] 控制器缓存保护状态正常。
  • [ ] Write Back 仅在缓存保护有效时启用。
  • [ ] Virtual Disk 状态为 Optimal。
  • [ ] 初始化、重建和一致性检查已完成,或已明确不影响上线的维护窗口。
  • [ ] Ubuntu 只识别到预期的 RAID Virtual Disk。
  • [ ] 已使用 GPT 分区,并确认分区路径不是系统盘或其他业务盘。
  • [ ] 已选择正确的 ext4 或 XFS 格式化命令,没有重复执行两种格式化。
  • [ ] /etc/fstab 使用 UUID 或其他稳定标识,而不是依赖 /dev/sdX。
  • [ ] findmnt --verify 通过。
  • [ ] /srv/data 能够正常读写,权限符合应用账户要求。
  • [ ] df -hT、df -ih 和 lsblk -f 的容量、文件系统类型一致。
  • [ ] 内核日志中没有持续 I/O error、介质错误或控制器重置。
  • [ ] 已完成一次 mount -a 验证,条件允许时已完成重启后挂载验证。
  • [ ] 已保存控制器状态、磁盘状态、分区信息和 /etc/fstab 备份。
  • [ ] 已确认 RAID 仍不替代独立备份,业务数据已有后续备份计划。