没有交换空间。在crypttab中创建的加密交换空间未被创建。

今天我发现我的Ubuntu 12.04LTS没有任何交换空间。
几周前,我从头开始安装了这个系统。我根据自己的需求对所有分区进行了加密。一开始我没有安装任何交换空间,因为当我尝试设置加密交换空间时,安装对话框出现了问题。在安装完成后,我通过编辑/etc/crypttab和/etc/fstab来添加加密的交换空间。我可能还执行了一些其他命令来传播这些更改(我记不清了)。之后,交换空间就一直正常工作。
今天我偶然发现我没有任何可用的交换空间,也没有出现任何错误信息。
一些系统信息:(交换空间应该在sdb1_crypt上)
/etc/crypttab:
sda1_crypt UUID=91cb1de3-0754-4aa3-89b9-807e9a95a55a /root/keyfileToHome luks
sdb1_crypt UUID=96558522-6c79-4ddc-8f93-7defee6a9255 /dev/urandom cipher=aes-cbc-essiv:sha256,hash=ripemd160,size=256,swap
sdb2_crypt UUID=5fd25f3a-de63-4a5d-94a7-3e509a70b68c none luks

/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>
proc            /proc           proc    nodev,noexec,nosuid 0       0
/dev/mapper/sdb2_crypt /               ext4    errors=remount-ro 0       1
# /boot used to be on /dev/sdb3 during installation
UUID=9cdce42f-3894-4878-af03-12284dd5cab9 /boot           ext4    defaults        0       2
/dev/mapper/sda1_crypt /home           ext4    defaults        0       2
/dev/mapper/sdb1_crypt none            swap    sw              0       0

$ ll /dev/mapper显示给我,sdb1_crypt实际上没有被创建:

total 0
drwxr-xr-x  2 root root     120 Sep 29 16:26 ./
drwxr-xr-x 16 root root    4460 Sep 29 16:26 ../
crw-------  1 root root 10, 236 Sep 29 16:24 control
lrwxrwxrwx  1 root root       7 Sep 29 16:24 sda1_crypt -> ../dm-1
lrwxrwxrwx  1 root root       7 Sep 29 16:24 sdb2_crypt -> ../dm-0

因此,/proc/swaps当然是空的。
Filename                Type        Size    Used    Priority

我尝试更新initramfs:
# update-initramfs -u

那没有帮助。
我可以通过运行以下命令临时启用交换空间。
# cryptsetup -d /dev/urandom create sdb1_crypt /dev/disk/by-uuid/96558522-6c79-4ddc-8f93-7defee6a9255
# mkswap /dev/mapper/sdb1_crypt
# swapon -a

我尝试在这里添加来自dmesg的输出。我收到一个错误消息,说消息正文太长了。如果有帮助,请要求特定部分的dmesg输出。


什么导致了这个问题?我该如何修复它?如何使交换空间再次正常工作?感谢任何帮助。

在14.04上仍然发生同样的问题,但有解决方案。以防万一有人遇到此问题,请参考以下链接:http://askubuntu.com/questions/462775/swap-not-working-on-clean-14-04-install-using-encrypted-home?rq=1 - adosaiguas
@Birdy,你解决了这个问题吗? - Steven Roose
1个回答

当设置加密交换时,不能像上面那样使用“按UUID”方法,因为交换分区将在每次计算机启动时重新格式化为随机密钥,并且UUID将在此发生时更改。
正确的方法是使用另一种持久性方法,例如“按ID”或“按路径”方法。如果列出/dev/disk的内容,您将看到四个或五个不同的条目(取决于您的分区表类型)。
[root@computer~]# ls -lA /dev/disk/
total 0
drwxr-xr-x 2 root root 360 Feb 24 23:51 by-id
drwxr-xr-x 2 root root  80 Feb 24 23:51 by-label
drwxr-xr-x 2 root root  80 Feb 24 23:51 by-partlabel
drwxr-xr-x 2 root root 100 Feb 24 23:51 by-partuuid    # only available if your disk is GPT-formatted
drwxr-xr-x 2 root root 160 Feb 24 23:51 by-uuid
[root@computer ~]#

你从未列出你的原始blkid或lsblk -f,但根据你的原始帖子,我认为你有一个luks格式的分区sdb1,这个卷你挂载为交换空间。如果是这样,在列出`/dev/disk/by-path/´的内容时,你应该看到类似这样的东西:
[root@computer ~]# ls -lA /dev/disk/by-id/
total 0
lrwxrwxrwx 1 root root  9 Feb 24 23:51 ata-MY_OTHER_HARD_DISK -> ../../sda
lrwxrwxrwx 1 root root 10 Feb 24 23:51 ata-MY_OTHER_HARD_DISK-part1 -> ../../sda1
lrwxrwxrwx 1 root root 10 Feb 24 23:51 ata-MY_OTHER_HARD_DISK-part2 -> ../../sda2
lrwxrwxrwx 1 root root  9 Feb 24 23:51 ata-HARD_DISK_MAKE_MODEL -> ../../sdb
lrwxrwxrwx 1 root root 10 Feb 24 23:51 ata-HARD_DISK_MAKE_MODEL-part1 -> ../../sdb1
lrwxrwxrwx 1 root root 10 Feb 24 23:51 ata-HARD_DISK_MAKE_MODEL-part2 -> ../../sdb2
lrwxrwxrwx 1 root root 10 Feb 24 23:51 ata-HARD_DISK_MAKE_MODEL-part3 -> ../../sdb3
lrwxrwxrwx 1 root root 10 Feb 24 23:51 dm-name-luks-12345678-abcd-1234-5678-abcdef123456 -> ../../dm-0
lrwxrwxrwx 1 root root 10 Feb 24 23:51 dm-uuid-CRYPT-LUKS1-12345678abcd12345678abcdef123456-luks-12345678-abcd-1234-5678-abcdef123456 -> ../../dm-0
lrwxrwxrwx 1 root root  9 Feb 24 23:51 wwn-0x1234567890123456 -> ../../sda
lrwxrwxrwx 1 root root 10 Feb 24 23:51 wwn-0x1234567890123456-part1 -> ../../sda1
lrwxrwxrwx 1 root root 10 Feb 24 23:51 wwn-0x1234567890123456-part2 -> ../../sda2
lrwxrwxrwx 1 root root  9 Feb 24 23:51 wwn-0x5555444433332222 -> ../../sdb
lrwxrwxrwx 1 root root 10 Feb 24 23:51 wwn-0x5555444433332222-part1 -> ../../sdb1
lrwxrwxrwx 1 root root 10 Feb 24 23:51 wwn-0x5555444433332222-part2 -> ../../sdb2
lrwxrwxrwx 1 root root 10 Feb 24 23:51 wwn-0x5555444433332222-part3 -> ../../sdb3
[root@computer ~]# 

从这个输出中:
  • 我有两个硬盘,型号分别是“HARD_DISK_MAKE_MODEL”和“MY_OTHER_HARD_DISK”,它们的序列号分别是1234567890123456和5555444433332222。在这两种情况下,它们分别是sdasdb
  • 通过每个硬盘名称后面的-partX后缀,您还可以识别出每个分区。
  • 这些值也是唯一标识您的分区和硬盘的值,但它们不会改变,因为它们是基于硬盘上的固定值。

因此,无论硬盘是/dev/sda/dev/sdb还是分区被重新格式化并且UUID发生变化,/dev/disk/by-id/ata-HARD_DISK_MAKE_MODEL-part2都将是同一个分区。这是在crypttab中引用交换分区的最佳方式,因为它不依赖于分区内部记录的任何内容。

进一步参考:

上面的解释来自这里。(这是来自Arch Linux维基,但解释仍然有效)。 https://code.google.com/p/cryptsetup/wiki/FrequentlyAskedQuestions#2._Setup(查看第2.3项)。 https://wiki.archlinux.org/index.php/Dm-crypt/Swap_encryption

有关dm-crypt和交换分区加密的更多解释,请参考:https://wiki.archlinux.org/index.php/Dm-crypt/Swap_encryption - Guto Andreollo
欢迎来到Ask Ubuntu!;-) 你能否请[编辑]你的回答并将你的评论融入其中?此外,仅提供链接的回答如果链接被移动、更改或主站点消失,就会变得100%无用... :-( 因此,请[编辑]你的回答,并将链接中的相关步骤复制到你的回答中,从而确保你的回答在本站的整个生命周期内都有效!;-) 你可以将链接作为材料来源放在回答底部... - Fabby
感谢指点,@Fabby!我已经根据链接中的解释编辑了帖子,但很遗憾由于我在这里的声望还不到10,所以无法添加第三个链接。如果你有权限,随意添加吧! - Guto Andreollo
现在它只是对一个出色问题的出色回答,你的声誉(而不是声望)神奇地提升了!;-) 继续努力工作吧! - Fabby
@Fabby 这不是正确的答案。OP只在最后一节中提到了“by-uuid”,并指出这是临时的。在此之前,他在crypttab中使用UUID,然后在fstab中使用/dev/mapper/标识符,就像他应该做的那样。 - Steven Roose
@StevenRoose 我只是这里的一名编辑之一,为了清晰起见对答案进行了编辑。Guto回答了这个问题...如果你认为其中有错误,可以随意[编辑]或者如果完全错误的话就给一个踩并留下评论告诉我,我会踩而不是点赞... - Fabby