今天我发现我的 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 输出的具体部分。
问题的原因是什么?我该如何修复它?我该如何让交换空间再次正常工作?任何帮助都非常感谢。
答案1
当设置这样的加密交换时,您不能使用如上所述的“by-uuid”方法,因为每次计算机启动时,交换分区都会使用随机密钥重新格式化,并且每次发生这种情况时 UUID 都会发生变化。
正确的做法是使用另一种持久性方法,例如“by-id”或“by-path”方法。如果列出 的内容/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,但从您的原始帖子来看,我相信您的 sdb1 是一个 luks 格式的分区,您将该卷挂载为交换分区。如果是这样,当您列出“/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。在这两种情况下,它们分别为
sda
和sdb
。 - 通过
-partX
每个分区的后缀,您还可以识别哪个分区是哪个。 - 这些值也是用于识别您的分区和磁盘的明确值,但它们不会改变,因为它们基于来自磁盘的硬值。
因此,/dev/disk/by-id/ata-HARD_DISK_MAKE_MODEL-part2
无论磁盘是否为/dev/sda
,/dev/sdb
或者分区是否重新格式化并且其 UUID 是否发生变化,都将是相同的分区。这将是在 crypttab 上引用交换分区的最佳方式,因为它不依赖于分区内记录的任何内容。
更多参考:
- 以上解释来自这里.(这是来自 Arch Linux wiki,但解释仍然有效)。
- https://code.google.com/p/cryptsetup/wiki/FrequentlyAskedQuestions#2._Setup(勾选第 2.3 项)
- https://wiki.archlinux.org/index.php/Dm-crypt/Swap_encryption