关于“/dev/mapper/cryptswap1的磁盘驱动器尚未准备好或不存在”的问题,应该怎么办?

在启动Ubuntu 12.04时,会显示“/dev/mapper/cryptswap1磁盘驱动器尚未准备好或不存在”的消息。这是为什么?

你可能在安装过程中加密了主目录,但没有加密交换分区。如果RAM较低,可能会减慢系统速度,否则不会发生任何其他情况。 - danijelc
2个回答

该错误消息表明系统无法使用其加密的交换分区。

无法使用交换可能会导致减速,特别是如果您的计算机安装的RAM不多。

假设系统正在引导,您应该能够轻松解决这个问题。

如果这在“当您引导CD / DVD或USB闪存驱动器以安装Ubuntu时”发生,请假设安装仍在进行中,可以忽略它。一旦创建,您安装的系统可能具有相同的问题 - 如果确实存在问题,则可以在已安装的系统中解决。

如果这在安装在硬盘上的系统上发生,那么您的系统可能仍然正常运行,但修复它是一个好主意 - 如果您有交换分区(或交换文件),那么您可以将其用于其他用途。

大多数带有交换的Ubuntu系统都有一个交换分区。假设情况就是这样,本博客文章中描述的技术可能会有所帮助:

以下是一个简要总结,附带一些对初学者有用的额外信息,并以我自己的话来表达。不过我建议你也看一下那篇文章(如果仍然可以访问),因为它包含了一些我为了简洁起见省略掉的示例和其他信息。

  1. 打开终端窗口(Ctrl+Alt+T)或虚拟控制台,运行命令:sudo swapoff -a
  2. 打开/etc/crypttab文件(例如,使用GUI编辑器运行sudo nano -w /etc/crypttabsudo -H gedit /etc/cryptab),在以cryptswap1开头的行前加上#符号。保存文件。
  3. /etc/fstab文件中,对以/dev/mapper/cryptswap1开头的行做同样的操作。
  4. 安装gparted Install gparted。运行它并将交换分区格式化为linux-swap。确保选择正确的分区;如果选择错误,可能会丢失重要数据!在crypttab文件中注释掉的那一行应该给出了正确的分区名称(它紧跟在/dev/后面)。
  5. 运行sudo mkswap /dev/...,将...替换为相同的设备名称。该命令的输出部分应包含一个文本,其中写着UUID=.....,其中.....是一串字母和数字。
  6. 在文件/etc/initramfs-tools/conf.d/resume中,找到一行写着RESUME=UUID=后面跟着一串字母和数字(与上一步不完全相同)的内容。将其替换为.....(即mkswap给出的UUID=后面的字母和数字)。
  7. 运行sudo swapon /dev/...(与步骤4和5中使用的相同的/dev/...)。
  8. 运行sudo ecryptfs-setup-swap

swapon -s会检查交换分区是否成功启用。请参阅这篇博文了解更多信息和示例输出,以进行检查。

来源:http://punygeek.blogspot.com/2012/10/ubuntu-1204-how-to-solve-disk-drive-for.html(在http://punygeek.blogspot.com/上)作者:Litmus / Puny Geek。其中一些命令被复制;散文没有被复制,但通常表达相同的思想。

最后,注意这可能是一个错误。(我相信有多种因素可能导致这个问题,其中只有一些是错误。)特别是,它类似于Launchpad Bug #1153661。如果你认为这就是你的情况,你可能想要订阅该bug,标记自己受影响(在页面顶部的绿色“此错误影响...”链接处),如果你有任何额外的信息要提供,请在评论中提供。

1这对我有用。只有一个评论,我在第3步和第4步之间不得不重新启动我的计算机,因为否则gparted无法格式化交换分区。 - geoffrey
对我来说没有起作用,因为在启动时我仍然看到/dev/mapper/cryptswap1的消息,但是如果我在终端中运行swapon -s,它看起来像交换已经挂载:/dev/mapper/cryptswap1 partition 9765884 0 -1,所以也许事情已经在工作了?(free -m也显示交换存在) - fpghost
顺便说一句,根据你提供的博客链接,我认为在第6步之后你可能需要执行sudo update-initramfs -u命令。 - fpghost
如何判断我是否启用了加密交换空间? - arsaKasra
2使用Ubuntu 14.04的第六个方法对我无效 - 那个文件不存在。不过,我只是跳过了那一步,这完美地解决了我的问题!以前在启动时我一直收到那个错误信息,而且启动时间明显比现在慢。谢谢! - redbmk
我有一个问题,但是当我尝试运行最后一步时,我收到以下消息:“然而,此程序生成的交换加密配置将破坏此系统上的休眠/恢复功能!”我使用休眠功能。我该怎么办? - starbeamrainbowlabs
在14.04上试过了,效果非常好。 - Praveen Sripati
我可能误解了你的意思,但是你是说在启动后尝试这些方法吗?我的电脑从来没有超过警告界面。有什么建议吗? - Len
1@Len 你说得对-这只有在系统可以启动的情况下才有效。你可以尝试从恢复模式启动(首先尝试这个),或者从Live CD / DVD / USB chroot并以这种方式进行操作(更复杂,但可行)。在恢复模式的根shell中,或者在您在Live环境中创建的chroot中,所有命令都将以root身份运行,因此您可以省略命令中的sudogedit 在任何一种情况下都不太可能正常工作,但 nano 应该可以很好地工作。如果您使用的是Live系统,则可以直接运行其GParted(而不是在chroot中);否则,请使用 fdiskmkswap。我建议您提出一个新的问题。 - Eliah Kagan
@eliah-kagan 谢谢,我已经尝试了你提出的一些建议,但没有成功,现在我将尝试起草新的问题。 - Len
在14.04版本对我没用,但是这个技巧有效。 - Don Kirkby
我本来希望这对我有所帮助,但是在gparted中我没有看到交换分区。我收到了一个关于gparted尚不支持luks的通知,这是在sda5上。当我在原生磁盘程序中查看时,我看到了swap_1,但我仍然收到了原帖中描述的通知,我感到困惑不解。 - CodingInTheUK

在Eliah的解决方案的基础上,并结合对Ubuntu(1310058)的错误报告,我成功解决了在重新启动Ubuntu 14.04时加密交换空间丢失的问题。
特别感谢以下帮助: http://punygeek.blogspot.com/2012/10/ubuntu-1204-how-to-solve-disk-drive-for.html https://bugs.launchpad.net/ubuntu/+source/ecryptfs-utils/+bug/1310058 (评论 #3、#17和#22)
sudo swapoff -a

在/etc/crypttab中注释掉交换配置。
#cryptswap1 UUID={your uuid} /dev/urandom swap,cipher=aes-cbc-essiv:sha256

在/etc/fstab中注释掉交换配置。
#/dev/mapper/cryptswap1 none swap sw 0 0

重启你的电脑,这样你就可以在之后使用gparted重新格式化交换分区。创建交换分区,并记下mkswap为你生成的UIID。
sudo mkswap /dev/sdXX

更新/etc/initramfs-tools/conf.d/resume文件,使用上一个mkswap生成的UUID。
RESUME=UUID={your uuid goes here}

并启用交换分区:
sudo update-initramfs -u
sudo swapon /dev/sdXX
sudo ecryptfs-setup-swap

更新您的`/etc/crypttab`设置,包括`noauto`和`offset=8`(在Ubuntu 14.04中存在的错误)(我建议在这里使用vim,以免制表符混乱)。
cryptswap1 UUID={your uuid} /dev/urandom noauto,swap,offset=8,cipher=aes-cbc-essiv:sha256

更新您的/etc/fstab文件,添加noauto选项:
/dev/mapper/cryptswap1 none swap noauto,sw 0 0

手动启动交换分区,使用以下配置在/etc/init/cryptswap1.conf中。注意:您可能需要手动从头开始创建该配置文件。您可以使用任何文本编辑器代替VIM。
sudo vim /etc/init/cryptswap1.conf

并填写以下内容:
start on started mountall
script
  /sbin/cryptdisks_start cryptswap1
  /sbin/swapon /dev/mapper/cryptswap1
end script