linux中用cryptsetup加密磁盘需先创建luks容器,再通过/dev/mapper/xxx映射解密设备、格式化并挂载;不可直接操作原始分区。

在 Linux 系统中用 cryptsetup 加密磁盘分区,核心是创建 LUKS 容器、映射解密设备、格式化并挂载——不能直接对原始分区操作,必须通过 /dev/mapper/xxx 这层映射访问。
准备与初始化加密分区
确保目标分区(如 /dev/sdb1)未挂载、无重要数据,且系统已安装 cryptsetup:
- 检查安装:
sudo apt install cryptsetup(Debian/Ubuntu)或sudo dnf install cryptsetup(RHEL/Fedora) - 初始化 LUKS 容器:
sudo cryptsetup luksFormat /dev/sdb1 - 执行时需输入大写 YES 确认,再设强密码(建议至少 8 字符,含大小写字母+数字)
- 完成后可用
sudo cryptsetup luksDump /dev/sdb1查看 UUID 和密钥槽状态
解锁、格式化与临时挂载
LUKS 分区本身不存文件系统,需先映射再格式化:
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
- 解锁并映射:
sudo cryptsetup luksOpen /dev/sdb1 mydata(mydata是自定义映射名) - 此时设备出现在
/dev/mapper/mydata,可查看状态:cryptsetup status mydata - 格式化映射设备:
sudo mkfs.ext4 /dev/mapper/mydata(推荐 ext4 或 XFS;避免 Btrfs 直接加密) - 创建挂载点并挂载:
sudo mkdir -p /mnt/encrypted && sudo mount /dev/mapper/mydata /mnt/encrypted - 测试后安全卸载:
sudo umount /mnt/encrypted && sudo cryptsetup luksClose mydata
配置开机自动挂载(安全免密方案)
若需重启后自动解密挂载,推荐用 keyfile + /etc/crypttab,而非明文密码:
- 生成密钥文件:
sudo dd if=/dev/urandom of=/root/mydata.key bs=512 count=4 && sudo chmod 0400 /root/mydata.key - 将密钥加入 LUKS 槽:
sudo cryptsetup luksAddKey /dev/sdb1 /root/mydata.key - 编辑
/etc/crypttab,添加一行:mydata UUID=xxxx-xxxx /root/mydata.key luks,discard(UUID 用sudo blkid /dev/sdb1获取) - 编辑
/etc/fstab,添加:/dev/mapper/mydata /mnt/encrypted ext4 defaults,x-systemd.device-timeout=30 0 2 - 启用 systemd 解密服务:
sudo systemctl enable systemd-cryptsetup@mydata.service
日常维护与安全提醒
LUKS 加密不是“一劳永逸”,需关注密钥生命周期和容灾能力:
- 备份 LUKS 头至关重要:
sudo cryptsetup luksHeaderBackup /dev/sdb1 --header-backup-file /root/sdb1_luks_header.bak - 主密码丢失时,只要还有其他有效密钥槽(如 keyfile),仍可解锁;但所有槽都被删则数据不可恢复
- 禁用 TRIM 需谨慎:SSD 上建议保留
discard选项,否则影响性能和寿命;如担心泄露使用模式,可改用定期fstrim - 删除加密分区前,务必先清空
/etc/crypttab和/etc/fstab条目,关闭映射,再sudo mkfs覆盖原始设备










