问题设置

问题设置

我在创建加密交换时遇到问题。

我遵循以下步骤

  1. sudo swapoff -a
  2. 评论现有的交换配置/etc/crypttab
  3. 评论现有的交换配置/etc/fstab
  4. 使用 gparted 将交换分区重新格式化为 linux-swap
  5. sudo mkswap /dev/sda5
  6. /etc/initramfs-tools/conf.d/resume使用新的 UUID 进行更新
  7. sudo update-initramfs -u
  8. sudo swapon /dev/sda5
  9. sudo ecryptfs-setup-swap

那时我遇到了这个问题

root@username-UX430UN:/home/username# ecryptfs-setup-swap
WARNING:
An encrypted swap is required to help ensure that encrypted files are not leaked to disk in an unencrypted format.

HOWEVER, THE SWAP ENCRYPTION CONFIGURATION PRODUCED BY THIS PROGRAM WILL BREAK HIBERNATE/RESUME ON THIS SYSTEM!

NOTE: Your suspend/resume capabilities will not be affected.

Do you want to proceed with encrypting your swap? [y/N]: y

INFO: Setting up swap: [/dev/sda5]
marking GPT swap partition /dev/sda5 as no-auto...
swapon: stat of /dev/mapper/cryptswap1 failed: No such file or directory

答案1

我在尝试设置加密交换空间时遇到了同样的问题,我想我已经找到了解决方案。首先,这里有我在研究中使用的几个链接:

  • 简单的操作方法使用 ecryptfs 加密交换空间(当一切正常时)
  • 调试博客文章深入调试了一个非常相似的问题。我从这里得到了很多想法,所以我建议大家读一读。

问题设置

当我ecryptfs-setup-swap第一次运行时(请注意,我在安装时已经设置了交换空间,所以不需要执行此操作),mkswap我收到一条错误消息,提示无法正确安装交换空间。

$ sudo ecryptfs-setup-swap                                                                       
[sudo] password for isaac:                                                                       

WARNING:                                                                                         
An encrypted swap is required to help ensure that encrypted files are not leaked to disk in an unencrypted format.

HOWEVER, THE SWAP ENCRYPTION CONFIGURATION PRODUCED BY THIS PROGRAM WILL BREAK HIBERNATE/RESUME ON THIS SYSTEM!

NOTE: Your suspend/resume capabilities will not be affected.                                     

Do you want to proceed with encrypting your swap? [y/N]: y                                       

INFO: Setting up swap: [/dev/nvme0n1p5]                                                          
WARNING: Commented out your unencrypted swap from /etc/fstab                                     
marking GPT swap partition /dev/nvme0n1p5 as no-auto...                                          
swapon: stat of /dev/mapper/cryptswap1 failed: No such file or directory                         

我尝试再次运行该命令并收到一条消息,指出我不再有任何交换空间。

$ sudo ecryptfs-setup-swap                                                                       
INFO: You do not currently have any swap space defined.                                          

You can create a swap file by doing:                                                             
 $ sudo dd if=/dev/zero of=/swapfile count=130667600                                             
 $ sudo mkswap /swapfile                                                                         
 $ sudo swapon /swapfile                                                                         

And then re-run /usr/bin/ecryptfs-setup-swap                                                     

仔细检查第一次运行 ecrypt 命令时的错误消息,似乎/dev/mapper/cryptswap1不存在。

$ ls /dev/mapper/                                                                                
control                                                                                          

调查相关系统文件

根据前面提到的博客帖子中,我决定开始在我的系统文件中寻找无法识别交换空间的原因。博客提到,硬盘分区的命名方案更改会导致 ecryptfs 出现问题,而切换到使用基于 UUID 的标识符则更加一致。

$ blkid                                                                                          
/dev/nvme0n1p5: UUID="aea96d7f-e091-460b-95fd-a34ab884d440" TYPE="swap" PARTUUID="0a7db4e0-17bf-40e3-8675-afec7891afc5"
/dev/nvme0n1p1: LABEL="ESP" UUID="C291-E533" TYPE="vfat" PARTLABEL="EFI system partition" PARTUUID="63fc7fb9-2ca5-422b-90c7-0db698acdb3c"
/dev/nvme0n1p3: UUID="16F4C1EEF4C1D063" TYPE="ntfs" PARTLABEL="Basic data partition" PARTUUID="c04d0838-5570-4bfc-a961-4b9224b8cc0c"
/dev/nvme0n1p4: UUID="0EEE7736EE7714E5" TYPE="ntfs" PARTUUID="4dc6595f-cc9c-4d80-99ab-ffd9cbe3c1d7"
/dev/nvme0n1p6: UUID="8b2f5c94-db79-4c8d-b5c6-403d912bc0dd" TYPE="ext4" PARTUUID="e373c83f-f992-4e62-a235-1fdd01ac7cf0"

请注意,我的交换空间是 ,/dev/nvme0n1p5并且具有 UUID aea96d7f...。现在我将查看/etc/fstab交换/etc/crypttab配置是什么样的。

$ cat /etc/fstab                                                                                 
# /etc/fstab: static file system information.                                                    
#                                                                                                
# Use 'blkid' to print the universally unique identifier for a                                   
# device; this may be used with UUID= as a more robust way to name devices                       
# that works even if disks are added and removed. See fstab(5).                                  
#                                                                                                
# <file system> <mount point>   <type>  <options>       <dump>  <pass>                           
# / was on /dev/nvme0n1p6 during installation                                                    
UUID=8b2f5c94-db79-4c8d-b5c6-403d912bc0dd /               ext4    errors=remount-ro 0       1    
# /boot/efi was on /dev/nvme0n1p1 during installation                                            
UUID=C291-E533  /boot/efi       vfat    umask=0077      0       1                                
# swap was on /dev/nvme0n1p5 during installation                                                 
#UUID=aea96d7f-e091-460b-95fd-a34ab884d440 none            swap    sw              0       0     
/dev/mapper/cryptswap1 none swap sw 0 0                                                          


$ cat /etc/crypttab                                                                              
# <target name> <source device>         <key file>      <options>                                
cryptswap1 UUID=aea96d7f-e091-460b-95fd-a34ab884d440 /dev/urandom swap,offset=1024,cipher=aes-xts-plain64

这里有几件事值得注意,所以我将一一介绍。

  • ecryptfs 似乎已正确修改我fstab以禁用我的旧交换空间(用交换 UUID 注释掉的行)并启用加密空间。
  • crypttab 已设置了适当的 UUID 来映射到我的交换空间。这很重要,如果你的 crypttab 设置了 UUID 以外的内容(例如,/dev 中的驱动器名称),则内核可能会重命名驱动器并导致问题(再次参见博客有关详细信息)。就我而言,ecryptfs 似乎已使用 UUID 正确设置了条目(我猜测它在 16.04 上已修补,因为博客中提到了 14.04 上的问题)。
  • crypttab 指定了驱动器的偏移量。同样,这是博客中提到的一个微妙的“陷阱”,但如果没有偏移量,它显然会导致驱动器丢失其 UUID,因为它将被加密。

最后,我检查swapon它是否找到了任何交换空间。

$ swapon -s                                                                                      
Filename                                Type            Size    Used    Priority                 
/dev/dm-0                               partition       31248892        0       -1               

看起来它指向一个交换空间(具有正确的大小),但是该交换空间没有被正确设置/dev/mapper(如 fstab 所引用的)。

解决方案

根据博客文章中的建议,我决定看看是否只需重新启动服务cryptdisks即可解决问题。

$ swapoff -a                                                                                     

$ /etc/init.d/cryptdisks start                                                                   

$ swapon -a                                                                                      

$ swapon -s                                                                                      
Filename                                Type            Size    Used    Priority                 
/dev/dm-0                               partition       31248892        0       -1               

$ ls -l /dev/mapper/                                                                             
total 0                                                                                          
crw------- 1 root root 10, 236 Jan  9 11:30 control                                              
lrwxrwxrwx 1 root root       7 Jan  9 12:28 cryptswap1 -> ../dm-0                                

此时似乎好像我的交换空间配置正确。运行htop显示交换空间量适当,并且我上面使用的诊断命令都显示正确,特别是blkid现在显示/dev/mapper/cryptswap1

$ sudo blkid                                                                                     
/dev/nvme0n1p1: LABEL="ESP" UUID="C291-E533" TYPE="vfat" PARTLABEL="EFI system partition" PARTUUID="63fc7fb9-2ca5-422b-90c7-0db698acdb3c"
/dev/nvme0n1p3: UUID="16F4C1EEF4C1D063" TYPE="ntfs" PARTLABEL="Basic data partition" PARTUUID="c04d0838-5570-4bfc-a961-4b9224b8cc0c"
/dev/nvme0n1p4: UUID="0EEE7736EE7714E5" TYPE="ntfs" PARTUUID="4dc6595f-cc9c-4d80-99ab-ffd9cbe3c1d7"
/dev/nvme0n1p5: UUID="aea96d7f-e091-460b-95fd-a34ab884d440" TYPE="swap" PARTUUID="0a7db4e0-17bf-40e3-8675-afec7891afc5"
/dev/nvme0n1p6: UUID="8b2f5c94-db79-4c8d-b5c6-403d912bc0dd" TYPE="ext4" PARTUUID="e373c83f-f992-4e62-a235-1fdd01ac7cf0"
/dev/mapper/cryptswap1: UUID="113abaa7-c122-4d47-a826-181ee6a29627" TYPE="swap"                  

设置在重启后仍然有效,一切似乎都运行正常,所以据我所知,这是有效的。希望这能有所帮助。

潜在的替代解决方案

为了确保我的答案能够正常工作,我尝试在 EC2 实例上复制该问题。我在运行时遇到了相同的行为,sudo ecryptfs-setup-swap尝试运行时会出错swappon。但是,由于某种原因,设备映射/dev/dm-0似乎未正确设置。文件/etc似乎没问题,所以我尝试简单地重新启动实例。这似乎工作正常;但是,我建议至少在重新启动之前检查适当的配置设置,以确保它们设置正确,以便内核可以在重新启动时挂载交换。

答案2

简单的重启就为我解决了这个问题。

相关内容