跳转到内容

RAID 与 Swap 管理

本文涵盖三个关键的存储管理主题:使用 mdadm 创建和管理软件 RAID 阵列、创建和调优 Swap 空间,以及使用 XFS 磁盘配额控制磁盘使用。

RAID 级别最少磁盘数冗余可用空间适用场景
RAID 02N x 磁盘大小高性能、非关键数据
RAID 12镜像1 x 磁盘大小系统盘、关键数据
RAID 53单盘容错(N-1) x 磁盘大小通用存储
RAID 104镜像+条带N/2 x 磁盘大小数据库、高 IOPS
安装 mdadm
sudo dnf install mdadm -y

在创建 RAID 阵列之前,确认磁盘没有现有分区:

查看可用磁盘
lsblk
确认目标磁盘上没有需要保留的数据
lsblk -f /dev/sdb /dev/sdc
sudo blkid /dev/sdb /dev/sdc
清除磁盘上的现有签名
sudo wipefs -a /dev/sdb
sudo wipefs -a /dev/sdc
创建 RAID 1 阵列
sudo mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb /dev/sdc
查看 RAID 阵列状态
cat /proc/mdstat
查看阵列详细信息
sudo mdadm --detail /dev/md0
创建 RAID 5 阵列(三块盘)
sudo mdadm --create /dev/md1 --level=5 --raid-devices=3 /dev/sdb /dev/sdc /dev/sdd
创建 RAID 10 阵列(四块盘)
sudo mdadm --create /dev/md2 --level=10 --raid-devices=4 /dev/sdb /dev/sdc /dev/sdd /dev/sde
创建 XFS 文件系统
sudo mkfs.xfs /dev/md0
创建挂载点并挂载
sudo mkdir -p /mnt/raid
sudo mount /dev/md0 /mnt/raid
添加到 fstab 实现开机自动挂载
echo '/dev/md0 /mnt/raid xfs defaults 0 0' | sudo tee -a /etc/fstab

mdadm 配置必须保存,否则重启后阵列可能无法自动组装:

保存 RAID 配置到 mdadm.conf
sudo mdadm --detail --scan | sudo tee -a /etc/mdadm.conf
更新 initramfs 以包含 RAID 配置
sudo dracut --force
查看 RAID 阵列实时状态
cat /proc/mdstat
查看阵列详细信息
sudo mdadm --detail /dev/md0
启用 mdadm 邮件监控
sudo mdadm --monitor --mail=admin@example.com --delay=300 /dev/md0 --daemonise

也可以通过 systemd 自动监控:

启用 mdmonitor 服务
sudo systemctl enable mdmonitor
sudo systemctl start mdmonitor
模拟磁盘故障
sudo mdadm --manage /dev/md0 --fail /dev/sdc
查看降级状态
cat /proc/mdstat
sudo mdadm --detail /dev/md0
移除故障磁盘
sudo mdadm --manage /dev/md0 --remove /dev/sdc
添加新磁盘进行重建
sudo mdadm --manage /dev/md0 --add /dev/sdf
监控重建进度
watch cat /proc/mdstat
为阵列添加一块热备盘
sudo mdadm --manage /dev/md0 --add-spare /dev/sdg

当阵列中有磁盘故障时,热备盘会自动加入重建。

Swap 空间在物理内存不足时提供额外的虚拟内存。可以通过交换分区或交换文件来实现。

查看当前 Swap 使用情况
free -h
查看所有 Swap 设备
swapon --show

从 EL 8 开始,推荐使用 Swap 文件而非 Swap 分区,更加灵活:

创建 4GB 的 Swap 文件
sudo dd if=/dev/zero of=/swapfile bs=1M count=4096
设置正确的权限
sudo chmod 600 /swapfile
格式化为 Swap
sudo mkswap /swapfile
启用 Swap 文件
sudo swapon /swapfile
验证 Swap 已启用
swapon --show
free -h
添加到 fstab 实现开机自动挂载
echo '/swapfile none swap defaults 0 0' | sudo tee -a /etc/fstab

如果需要使用专用分区作为 Swap:

使用 fdisk 创建 Swap 分区(类型 82)
sudo fdisk /dev/sdb

在 fdisk 中执行:n 创建新分区,t 修改类型为 82(Linux swap),w 保存。

格式化 Swap 分区
sudo mkswap /dev/sdb1
启用 Swap 分区
sudo swapon /dev/sdb1
添加到 fstab
echo '/dev/sdb1 none swap defaults 0 0' | sudo tee -a /etc/fstab
禁用当前 Swap
sudo swapoff /swapfile
重新创建更大的 Swap 文件(8GB)
sudo dd if=/dev/zero of=/swapfile bs=1M count=8192
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
禁用并删除 Swap 文件
sudo swapoff /swapfile
sudo rm /swapfile

记得同时从 /etc/fstab 中移除对应的行。

vm.swappiness 参数控制内核使用 Swap 的倾向(0-100):

  • 0 — 尽可能避免使用 Swap(仅在内存极度不足时使用)
  • 10 — 适合数据库服务器,减少 Swap 使用
  • 60 — 系统默认值
  • 100 — 积极使用 Swap
查看当前 swappiness 值
cat /proc/sys/vm/swappiness
临时修改 swappiness
sudo sysctl vm.swappiness=10
永久修改 swappiness
echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.d/99-swappiness.conf
sudo sysctl -p /etc/sysctl.d/99-swappiness.conf

推荐值:

场景swappiness
数据库服务器10
Web 服务器10-30
桌面系统60
内存充足的服务器1-10

磁盘配额用于限制用户或组在文件系统上的磁盘使用量。

需要在挂载时启用配额支持:

编辑 fstab 启用用户配额和组配额
sudo vi /etc/fstab

将挂载选项修改为包含 uquota,gquota

fstab 示例
/dev/md0 /mnt/data xfs defaults,uquota,gquota 0 0
重新挂载文件系统
sudo umount /mnt/data
sudo mount /mnt/data

或者不卸载直接重新挂载:

重新挂载(不卸载)
sudo mount -o remount,uquota,gquota /mnt/data
查看配额状态报告
sudo xfs_quota -x -c 'report -h' /mnt/data
查看所有用户配额
sudo xfs_quota -x -c 'report -u -h' /mnt/data
查看所有组配额
sudo xfs_quota -x -c 'report -g -h' /mnt/data
为用户设置软限制 5GB、硬限制 10GB
sudo xfs_quota -x -c 'limit bsoft=5g bhard=10g testuser' /mnt/data
  • bsoft — 软限制(可暂时超过,超过后有宽限期)
  • bhard — 硬限制(绝对不可超过)
设置 inode 配额(限制文件数量)
sudo xfs_quota -x -c 'limit isoft=10000 ihard=15000 testuser' /mnt/data
为组设置磁盘配额
sudo xfs_quota -x -c 'limit -g bsoft=50g bhard=100g devteam' /mnt/data
查看指定用户的配额使用情况
sudo xfs_quota -x -c 'quota -u -h testuser' /mnt/data
设置软限制的宽限期为 7 天
sudo xfs_quota -x -c 'timer -u 7d' /mnt/data
  1. RAID 不是备份 — RAID 只提供冗余,不能替代数据备份
  2. 监控 RAID 状态 — 定期检查阵列健康,启用邮件告警
  3. 配置热备盘 — 关键阵列应配置热备盘以实现自动重建
  4. 合理规划 Swap — 通常建议 Swap 大小为物理内存的 1-2 倍(最大不超过 8GB)
  5. 调优 swappiness — 数据库和高性能场景应降低 swappiness 值
  6. 使用配额防止磁盘满 — 多用户环境下配置磁盘配额避免单一用户占满空间