1. 环境准备与前提
在 CentOS 系统环境下进行 LUKS 挂载加密磁盘的前置准备,首先需要了解环境与前提条件。确保系统版本为 CentOS 7/8/9,且具备 root 权限,并且系统具备 dm-crypt 支持与 cryptsetup 工具。
本文聚焦的是数据磁盘的加密与挂载,而不是系统根分区的引导加密。进行实验前,请对目标磁盘进行备份,确保可恢复。备份策略应覆盖分区表、数据分区及关键的挂载点配置。
1.1 版本与依赖
在 CentOS 上执行 cryptsetup 来管理 LUKS 容器,并确认内核模块已就绪。以下命令用于查看系统信息并安装依赖。
# 查看内核信息
uname -a
# 安装 cryptsetup(CentOS 常用包名)
yum install -y cryptsetup
# 确认 dm-crypt 模块已加载
modprobe dm-crypt
lsmod | grep dm_crypt
在最小化安装环境中,可能需要额外安装网络工具、文本编辑器等以便操作与调试。保持环境尽可能干净但完整,以降低潜在冲突。
1.2 安全与备份策略
为防止数据丢失,请在分区开始前制定备份流程。将密钥与口令妥善管理,确保只有授权人员可访问,并在生产环境中考虑密钥轮换。
另外,记录分区对齐、块大小以及目标文件系统类型,以便故障时快速恢复。准备阶段的关键数据包括目标磁盘设备名、分区号以及分区表类型。
2. 磁盘准备与分区
获取目标磁盘信息,确保不会误操作系统盘。使用 lsblk、fdisk -l 逐步确认,以确定目标磁盘。
常见分区方案是在数据磁盘上创建一个分区用于 LUKS 容器,分区表通常使用 GPT,以支持大容量磁盘。GPT 可以避免分区数量上限的问题,并且在 BIOS/UEFI 混合环境中兼容性更好。
2.1 磁盘识别与分区方案
识别目标磁盘并确认分区计划如下。务必避免覆盖现有数据分区。
# 查看所有磁盘及分区信息
lsblk -f# 选择目标磁盘,如 /dev/sdb,确认其中不包含根系统分区
fdisk -l /dev/sdb# 若需要创建新的分区表,先创建 GPT 分区表
parted /dev/sdb --script mklabel gpt
2.2 分区表创建与分区
创建分区并让内核识别新分区。典型场景为创建一个 /dev/sdb1 作为 LUKS 容器分区。分区示例:/dev/sdb1。
# 创建一个新的分区,起始位置 1MiB,覆盖剩余空间
parted /dev/sdb --script mkpart primary 1MiB 100%# 查看新分区信息
lsblk /dev/sdb
3. LUKS 容器创建与加密
在 /dev/sdb1 上创建 LUKS 容器,使用 luksFormat。优先使用 luks2 以获得更好的安全性与特性。

3.1 luksFormat 与加密参数
执行 luksFormat,提示输入密钥口令。务必记住口令,若丢失将无法解密数据。
# 将 /dev/sdb1 格式化为 LUKS2 容器
cryptsetup luksFormat --type luks2 /dev/sdb1
如需更高效的密钥管理,也可以使用密钥文件代替口令。此时在打开容器时需指定密钥文件路径。打开后,映射路径通常为 /dev/mapper/<映射名>。
打开加密容器以供后续使用。映射名称可自定义,例如 datacrypt,打开后设备路径为 /dev/mapper/datacrypt。
# 打开加密容器,映射名为 datacrypt
cryptsetup open /dev/sdb1 datacrypt# 验证映射是否创建
ls -l /dev/mapper/datacrypt
4. 文件系统创建与挂载
在映射设备上创建文件系统,决定在何处挂载。常见选择包括 XFS、EXT4。根据数据负载特点选择合适的文件系统。
4.1 打开映射与创建文件系统
为挂载准备目录,格式化并挂载。以下示例以 XFS 为文件系统。
# 在挂载点 /mnt/cryptdata 创建目录
mkdir -p /mnt/cryptdata# 在 /dev/mapper/datacrypt 上创建文件系统
mkfs.xfs /dev/mapper/datacrypt# 将映射数据挂载到挂载点
mount /dev/mapper/datacrypt /mnt/cryptdata
完成后通过 df -h 验证挂载状态,确保新挂载点可用。检查挂载点的权限和可用性。
5. 自动挂载与开机解密
如果希望在系统开机时自动解锁并挂载数据分区,需要配置 /etc/crypttab 与 /etc/fstab。这是在 CentOS 上实现开机自动解锁挂载的核心步骤。
5.1 crypttab 与 fstab 配置
crypttab 指定映射名称、要解锁的分区及密钥源,fstab 指定挂载点、文件系统类型及挂载选项。示例中将映射名设为 datacrypt。
# /etc/crypttab 示例
datacrypt /dev/sdb1 none luks
# /etc/fstab 示例
/dev/mapper/datacrypt /mnt/cryptdata xfs defaults 0 2
如要在引导时进行无交互解锁,需要确保系统在启动阶段能读取密钥。如使用密钥文件,请在 crypttab 指定密钥文件路径,而不是 none。
5.2 使用密钥文件实现无交互解锁的方案
如需在引导阶段实现无交互解锁,可以将密钥文件放置在受控位置,并在 crypttab 中指向该文件。严格限制密钥文件的权限与访问范围。
# 生成密钥文件示例(请放在受保护位置并设限权限)
dd if=/dev/zero of=/root/ldrkey bs=1 count=64
chmod 600 /root/ldrkey# 将密钥文件路径加入 crypttab,示例使用密钥文件
echo "datacrypt /dev/sdb1 /root/ldrkey luks" >> /etc/crypttab
6. 运行与维护
挂载持续运行过程中,需定期检查解锁状态、挂载点健康以及性能。关注日志、文件系统健康与 I/O 状态,以确保数据可用性。
6.1 挂载点的权限与性能优化
为应用访问设置合适的权限与所有者。合理设定权限,避免未授权访问,同时关注 I/O 性能与延迟。
# 设置挂载点权限示例
chown -R appuser:appgroup /mnt/cryptdata
chmod 755 /mnt/cryptdata
结合工具如 iostat、iotop、nmon 等监控 I/O 性能,确保在高并发场景下仍具备可预测性。定期进行性能基线对比。
6.2 备份和恢复策略
数据在加密磁盘上的备份需要注意:应避免在未解密状态下导出数据,并结合异地备份以提升容灾能力。
# 备份一个挂载点的数据快照示例(演示用途)
rsync -av /mnt/cryptdata /mnt/cryptdata.bak


