当前位置:首页>Linux>Linux LVM(七):RAID + LVM + LUKS 三层架构

Linux LVM(七):RAID + LVM + LUKS 三层架构

  • 2026-10-11 05:42:27
Linux LVM(七):RAID + LVM + LUKS 三层架构

字数 1332,阅读大约需 7 分钟

真实生产环境的存储栈往往不是单一技术,而是 RAID + LVM + LUKS + 文件系统 的多层组合。本篇给出一个可直接用于生产的完整方案。实际生产中还是需要根据自己的情况选择合适的方案!!!

一、为什么需要多层?

层
解决的问题
RAID(mdadm)
多盘冗余 + 性能(硬件层保护)
LVM
灵活分区、在线扩缩容、快照
LUKS
全盘加密
文件系统
实际的目录和文件管理

每层解决不同问题,组合起来既能安全、又能灵活、还能高性能。

二、典型架构图

┌──────────────────────────────────────────────────┐
│  文件系统(ext4 / xfs)                          │  用户的文件
├──────────────────────────────────────────────────┤
│  LVM LV(lv_data, lv_db, lv_log ...)             │  灵活划分
├──────────────────────────────────────────────────┤
│  LVM VG(vg_data)                                │  存储池
├──────────────────────────────────────────────────┤
│  LUKS(crypt_data)                                │  加密层
├──────────────────────────────────────────────────┤
│  RAID(/dev/md0 = RAID5)                         │  冗余
├──────────────────────────────────────────────────┤
│  物理盘(/dev/sdb /dev/sdc /dev/sdd /dev/sde)   │
└──────────────────────────────────────────────────┘

三、完整搭建流程

3.1 硬件准备

4 块相同大小的硬盘(每块至少 1TB):

  • • /dev/sdb、/dev/sdc、/dev/sdd、/dev/sde

3.2 创建 RAID5

# 1. 创建 RAID5(3 块数据 + 1 块校验)
$ mdadm --create /dev/md0 --level=5 --raid-devices=3 --spare-devices=1 \
    /dev/sdb /dev/sdc /dev/sdd /dev/sde
mdadm: array /dev/md0 started.

# 2. 查 RAID 状态

$ cat /proc/mdstat
Personalities : [raid1] [raid6] [raid5] [raid4]
md0 : active raid5 sde[4](S) sdd[2] sdc[1] sdb[0]
      2096128 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]

# 3. 保存 RAID 配置

$ mdadm --detail --scan >> /etc/mdadm.conf
$ update-initramfs -u   # Debian/Ubuntu
$ dracut -H              # RHEL 系

3.3 在 RAID 上建 LUKS

# 1. 创建加密卷(会要求输入密码)
$ cryptsetup luksFormat /dev/md0

WARNING!
========
This will overwrite data on /dev/md0 irrevocably.

Are you sure? (Type 'yes' in capital letters): YES
Enter passphrase for /dev/md0: ********
Verify passphrase: ********

# 2. 打开加密卷

$ cryptsetup open /dev/md0 crypt_data
Enter passphrase for /dev/md0: ********

# 映射后的设备是 /dev/mapper/crypt_data


# 3. 查看加密状态

$ cryptsetup status crypt_data
type
:    LUKS2
cipher:  aes-xts-plain64
...

3.4 在 LUKS 上建 LVM

# 1. 把加密卷做成 PV
$ pvcreate /dev/mapper/crypt_data

# 2. 创建 VG

$ vgcreate vg_data /dev/mapper/crypt_data

# 3. 创建多个 LV(按业务划分)

$ lvcreate -L 100G -n lv_db vg_data
$ lvcreate -L 200G -n lv_app vg_data
$ lvcreate -L 50G -n lv_log vg_data
$ lvcreate -l 100%FREE -n lv_backup vg_data

3.5 文件系统与挂载

$ mkfs.xfs /dev/vg_data/lv_db
$ mkfs.xfs /dev/vg_data/lv_app
$ mkfs.ext4 /dev/vg_data/lv_log
$ mkfs.ext4 /dev/vg_data/lv_backup

$ mkdir -p /data/{db,app,log,backup}
$ mount /dev/vg_data/lv_db /data/db
$ mount /dev/vg_data/lv_app /data/app
$ mount /dev/vg_data/lv_log /data/log
$ mount /dev/vg_data/lv_backup /data/backup

3.6 持久化配置

# /etc/crypttab
crypt_data  /dev/md0  none  luks

# /etc/fstab

/dev/vg_data/lv_db       /data/db      xfs   defaults   0 0
/dev/vg_data/lv_app      /data/app     xfs   defaults   0 0
/dev/vg_data/lv_log      /data/log     ext4  defaults   0 0
/dev/vg_data/lv_backup   /data/backup  ext4  defaults   0 0

关键:/etc/crypttab 必须先于 /etc/fstab 生效。

四、密码与密钥管理

4.1 自动解锁(生产环境)

每次重启手动输入密码不现实。使用密钥文件:

# 1. 生成随机密钥
$ dd if=/dev/urandom of=/etc/keys/crypt_data.key bs=512 count=4
$ chmod 0400 /etc/keys/crypt_data.key

# 2. 把密钥加入 LUKS slot

$ cryptsetup luksAddKey /dev/md0 /etc/keys/crypt_data.key
Enter any existing passphrase: ********

# 3. 配置 crypttab 使用密钥

# /etc/crypttab

crypt_data  /dev/md0  /etc/keys/crypt_data.key  luks

4.2 TPM 解锁(更高安全)

# 用 TPM2 解锁
$ systemd-cryptenroll --tpm2-device=auto --tpm2-pcrs=0,7 /dev/md0

或 Clevis + Tang(网络绑定)。

4.3 多用户密码(多人管理)

# 加第二个用户的密码
$ cryptsetup luksAddKey /dev/md0
Enter any existing passphrase: ********
Enter new passphrase for new slot: ********

# 看 LUKS 槽位

$ cryptsetup luksDump /dev/md0 | grep "Key Slot"
Key Slot 0: ENABLED
Key Slot 1: ENABLED
Key Slot 2: DISABLED
...

五、RAID 故障处理

5.1 单盘故障

# 1. dmesg 看故障盘
$ dmesg | tail
sd 0:0:1:0: [sdc] Unhandled sense code
sd 0:0:1:0: [sdc]  Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE
...

# 2. 标记故障

$ mdadm --manage /dev/md0 --fail /dev/sdc

# 3. 移除

$ mdadm --manage /dev/md0 --remove /dev/sdc

# 4. 物理换新盘


# 5. 加入 RAID

$ mdadm --manage /dev/md0 --add /dev/sdc

# 6. 自动重建

$ cat /proc/mdstat
md0 : active raid5 sdc[4] sdd[2] sdb[0]
      2096128 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [UU_]
      [>....................]  recovery = 12.3% (12345/1048064)

5.2 多盘故障

# RAID5 只能容忍 1 盘故障
# RAID6 可以容忍 2 盘

# 多盘故障会丢数据,需要从备份恢复

六、性能与监控

6.1 性能预期

配置
顺序读
顺序写
单盘 HDD
150 MB/s
150 MB/s
RAID5(3 盘)
300 MB/s
150 MB/s
RAID10(4 盘)
300 MB/s
300 MB/s
+ SSD cache
800+ MB/s
400+ MB/s

6.2 监控项

# RAID 状态
$ mdadm --detail /dev/md0

# I/O 监控

$ iostat -x 1

# LVM 监控

$ lvs -o data_percent,metadata_percent

# LUKS 状态

$ cryptsetup status crypt_data

6.3 SMART 健康

$ yum install -y smartmontools    # 或 apt
$ smartctl -a /dev/sdb
$ smartctl -t short /dev/sdb      # 短测试
$ smartctl -t long /dev/sdb       # 长测试

七、容量规划案例

场景:1TB × 4 盘,部署数据库 + 应用

RAID5(4 盘,1 备):可用 3TB
LUKS:基本无开销(< 1%)
LVM VG:约 2.99TB

业务划分:
  lv_db     500G   主库
  lv_log    100G   redo log / binlog
  lv_app    1T     应用
  lv_backup 1.4T   备份空间

八、常见误区

  1. 1. "LVM RAID 比 mdadm RAID 好":不一定。LVM RAID 配置灵活,但性能调优和监控生态不如 mdadm 成熟
  2. 2. "LUKS 没性能损失":加密层有 5~15% 的 CPU 消耗。需要 AES-NI 硬件加速
  3. 3. "RAID 1 比 RAID 5 安全":RAID5 重建慢,大盘(>2T)重建出错概率反而高
  4. 4. "加密就不需要备份":加密保护数据机密性,不防数据丢失

九、本篇小结

生产环境标准存储栈:

物理盘 → mdadm RAID → LUKS 加密 → LVM 分层 → 文件系统

关键命令:

  • • RAID: mdadm --create / --manage
  • • LUKS: cryptsetup luksFormat / open / luksAddKey
  • • LVM: 前面教程所有命令
  • • 监控: cat /proc/mdstat + iostat + lvs + smartctl

最佳实践:

  • • 用 crypttab + 密钥文件实现自动解锁
  • • 监控 SMART,提前发现磁盘衰老
  • • 重要数据多副本 + 异地备份
  • • RAID 容量利用率:RAID5/6 适合读多写少,RAID10 适合写密集

最新文章

随机文章