我有一个程序,可以手动创建一个普通的 dm-crypt 交换卷,使用随机密钥,这似乎有效。这是一个 QEMU/Ubuntu 22.04 系统。但是,重新启动后没有交换,所以我可能弄错了/etc/crypttab
and/or /etc/fstab
,或者其他什么。任何意见都值得赞赏。
工作手册设置如下:
# swapoff -a
# cryptsetup --type plain open /dev/mapper/vg0-swap encswap
# mkswap /dev/mapper/encswap
# /etc/init.d/cryptdisks start
# swapon /dev/mapper/encswap
# swapon -s
Filename Type Size Used Priority
/dev/dm-3 partition 2097148 0 -2
# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 50G 0 disk
├─sda1 8:1 0 1M 0 part
├─sda2 8:2 0 1G 0 part /boot
├─sda3 8:3 0 13G 0 part
│ ├─vg0-swap 253:0 0 2G 0 lvm
│ │ └─encswap 253:3 0 2G 0 crypt [SWAP]
│ ├─vg0-data 253:1 0 36.1G 0 lvm /data
│ └─vg0-root 253:2 0 10.9G 0 lvm /
└─sda4 8:4 0 36G 0 part
└─vg0-data 253:1 0 36.1G 0 lvm /data
sr0 11:0 1 4M 0 rom
# cryptsetup status /dev/mapper/encswap
/dev/mapper/encswap is active and is in use.
type: PLAIN
cipher: aes-cbc-essiv:sha256
keysize: 256 bits
key location: dm-crypt
device: /dev/mapper/vg0-swap
sector size: 512
offset: 0 sectors
size: 4194304 sectors
mode: read/write
因此,为了使其持久,/etc/crypttab
包含:
swap /dev/mapper/encswap /dev/urandom plain,cipher=aes-xts-plain64,size=256,hash=sha256,swap,noearly
并/etc/fstab
包含:
/dev/mapper/swap none swap sw 0 0
当系统启动时,dm-crypt
或者systemd
运行默认的 90 秒超时时,似乎在等待一个永远不会到达的密钥。系统日志中也说了同样的话 - 等待超时/dev/mapper/encswap
。启动完成后,swapon -s
什么都不显示,也不lsblk
显示encswap
设备(或任何交换设备)。有什么想法吗?
答案1
你的/etc/crypttab
表情不对:
swap /dev/mapper/encswap /dev/urandom plain,cipher...
第二个字段应该是包含加密数据的设备,也就是/dev/mapper/vg0-swap
。我认为noearly
它无效,所以尝试
swap /dev/mapper/vg0-swap /dev/urandom swap,plain,cipher=aes-xts-plain64,size=256,hash=sha256
您可以通过运行 进行调试/usr/lib/systemd/system-generators/systemd-cryptsetup-generator
。这将读取/etc/crypttab
并创建一个单元文件/tmp
;找到该文件,然后直接在其中运行启动命令。这将为您提供更多有用的日志记录/调试输出。