如何使加密交换分区设置在启动时持久存在?

如何使加密交换分区设置在启动时持久存在?

我有一个程序,可以手动创建一个普通的 dm-crypt 交换卷,使用随机密钥,这似乎有效。这是一个 QEMU/Ubuntu 22.04 系统。但是,重新启动后没有交换,所以我可能弄错了/etc/crypttaband/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;找到该文件,然后直接在其中运行启动命令。这将为您提供更多有用的日志记录/调试输出。

相关内容