swapon:/dev/mapper/cryptswap1 的统计失败:没有那个文件或目录

X X*_*X X 10 partitioning swap cryptswap

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

我按照这些步骤

  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
Run Code Online (Sandbox Code Playgroud)

小智 10

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

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

问题设置

ecryptfs-setup-swap第一次运行的时候(注意我安装的时候已经设置了swap空间,所以不需要再运行了mkswap,收到了一条错误信息说swap空间无法正确挂载。

$ 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                         
Run Code Online (Sandbox Code Playgroud)

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

$ 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                                                     
Run Code Online (Sandbox Code Playgroud)

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

$ ls /dev/mapper/                                                                                
control                                                                                          
Run Code Online (Sandbox Code Playgroud)

调查相关系统文件

根据前面提到的博客文章,我决定开始在我的系统文件中寻找证据,以证明为什么没有识别交换空间。该博客提到硬盘分区命名方案的更改会导致 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"
Run Code Online (Sandbox Code Playgroud)

请注意,我的交换空间是/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
Run Code Online (Sandbox Code Playgroud)

这里有几件事情值得注意,所以我将一次通过它们。

  • ecryptfs 似乎已正确修改 myfstab以禁用我的旧交换空间(用交换 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               
Run Code Online (Sandbox Code Playgroud)

看起来它指向一个交换空间(大小正确),但该交换空间没有正确设置/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                                
Run Code Online (Sandbox Code Playgroud)

在这一点上,我的交换空间似乎配置正确。运行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"                  
Run Code Online (Sandbox Code Playgroud)

重新启动后设置仍然存在,并且一切似乎都运行正常,据我所知,这有效。希望这会有所帮助。

潜在的替代解决方案

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

  • 执行`swapon -a`时,我得到`swapon: stat of /dev/mapper/cryptswap1 failed: No such file or directory` (3认同)

Nic*_*nov 7

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