Swap 无法使用加密的 home 进行干净的 14.04 安装

ajn*_*ajn 28 encryption partitioning swap 14.04 cryptswap

更新 3:

我决定从头开始重新安装系统以删除任何旧的残留物,因为我在升级后也遇到了一些其他问题。然而,这个问题一直存在。

在全新安装中,选择使用“加密主页”进行安装会导致加密交换配置损坏。

更新 2:

我修复了 cfdisk 抱怨的分区顺序,但他的问题仍然存在。交换现在在 /dev/sda6 上,我可以按如下方式启动并运行它:

~$ sudo mkswap /dev/sda6
Setting up swapspace version 1, size = 7998460 KiB
no label, UUID=18881d0f-d9ec-43be-a23f-0cbd78ea6d22

$sudo nano /etc/crypttab # Update crypttad with new UUID

$ sudo /etc/init.d/cryptdisks reload
 * Stopping remaining crypto disks...
 * cryptswap1 (stopped)...                                               [ OK ] 
 * Starting remaining crypto disks...                                        
 * cryptswap1 (starting)..
 * cryptswap1 (started)...                                               [ OK ] 
$ sudo swapon -a

$ls -l /dev/disk/by-uuid/
total 0
lrwxrwxrwx 1 root root 10 May 11 09:04 08b07f88-6da5-4b40-b062-42b3bb1c5f00 -> ../../sda3
lrwxrwxrwx 1 root root 10 May 11 09:08 18881d0f-d9ec-43be-a23f-0cbd78ea6d22 -> ../../sda6
lrwxrwxrwx 1 root root 10 May 11 09:04 19aa372c-05c8-4226-8f09-c54e5566e816 -> ../../sda5
lrwxrwxrwx 1 root root 10 May 11 09:04 A800B16E00B143DA -> ../../sda1
lrwxrwxrwx 1 root root 10 May 11 09:04 D28230E68230D129 -> ../../sda2
lrwxrwxrwx 1 root root 10 May 11 09:08 fcc8c419-8fec-4d4d-b55e-9e4c3b04d21d -> ../../dm-0
Run Code Online (Sandbox Code Playgroud)

但是在重新启动后交换无法激活,它再次看起来像这样:

$ ls -l /dev/disk/by-uuid/
total 0
lrwxrwxrwx 1 root root 10 May 11 09:12 08b07f88-6da5-4b40-b062-42b3bb1c5f00 -> ../../sda3
lrwxrwxrwx 1 root root 10 May 11 09:12 19aa372c-05c8-4226-8f09-c54e5566e816 -> ../../sda5
lrwxrwxrwx 1 root root 10 May 11 09:12 A800B16E00B143DA -> ../../sda1
lrwxrwxrwx 1 root root 10 May 11 09:12 D28230E68230D129 -> ../../sda2
Run Code Online (Sandbox Code Playgroud)

我目前的猜测是,当将磁盘设置为加密时,linux 不再识别分区类型,因此无法正确加载它,导致它无法注册它的 UUID,因此 cryptswap 找不到它导致失败。但我不知道如何解决它..

更新的问题:

进一步的测试表明,我可以通过运行 $ mkswap /dev/sda5 来启动并运行交换

然后使用正确的 UUID 更新 /etc/crypttab 并按照此处概述的步骤操作: 如何设置加密的交换文件?

但是,当我重新启动计算机时问题仍然存在,运行时没有出现 /dev/sda5

$ ls -l /dev/disk/by-uuid/
Run Code Online (Sandbox Code Playgroud)

如果我做:

$ cfdisk /dev/sda 
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

FATAL ERROR: Bad logical partition 6: enlarged logical partitions overlap
                      Press any key to exit cfdisk
Run Code Online (Sandbox Code Playgroud)

图形“磁盘”实用程序在使用它打开磁盘时不会抱怨任何错误。

$ sudo fdisk -l

Disk /dev/sda: 256.1 GB, 256060514304 bytes
255 heads, 63 sectors/track, 31130 cylinders, total 500118192 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x619aebf1

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048      206847      102400    7  HPFS/NTFS/exFAT
/dev/sda2          206848   100870143    50331648    7  HPFS/NTFS/exFAT
/dev/sda3       191397888   192397311      499712   83  Linux
/dev/sda4       192399358   500117503   153859073    5  Extended
/dev/sda5       484118528   500117503     7999488   82  Linux swap / Solaris
/dev/sda6       192399360   484118527   145859584   83  Linux

Partition table entries are not in disk order
Run Code Online (Sandbox Code Playgroud)

原问题:

升级到 14.04(从 13.04 开始)后,我的计算机出现了严重的减速,在运行 top 时我注意到 kswap0 占用了大量 CPU 时间。我还注意到我没有任何交换空间!

$ sudo swapon -a
swapon: /dev/mapper/cryptswap1: stat failed: No such file or directory
Run Code Online (Sandbox Code Playgroud)

我的加密交换设置似乎有问题(甚至不知道我有一个)

$ cat /etc/crypttab 
cryptswap1 UUID=abe3c568-c8fd-4dfb-b8e9-0520d442dd61 /dev/urandom swap,cipher=aes-cbc-essiv:sha256

$ ls -l /dev/disk/by-uuid/
total 0
lrwxrwxrwx 1 root root 10 May  6 11:00 08b07f88-6da5-4b40-b062-42b3bb1c5f00 -> ../../sda3
lrwxrwxrwx 1 root root 10 May  6 11:00 19aa372c-05c8-4226-8f09-c54e5566e816 -> ../../sda6
lrwxrwxrwx 1 root root 10 May  6 11:00 A800B16E00B143DA -> ../../sda1
lrwxrwxrwx 1 root root 10 May  6 11:00 D28230E68230D129 -> ../../sda2
Run Code Online (Sandbox Code Playgroud)

看着我的 fstab

$ 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/sda6 during installation
UUID=19aa372c-05c8-4226-8f09-c54e5566e816 /               ext4    errors=remount-ro 0       1
# /boot was on /dev/sda3 during installation
UUID=08b07f88-6da5-4b40-b062-42b3bb1c5f00 /boot           ext2    defaults        0       2
# swap was on /dev/sda5 during installation
#UUID=abe3c568-c8fd-4dfb-b8e9-0520d442dd61 none            swap    sw              0       0
/dev/mapper/cryptswap1 none swap sw 0 0
Run Code Online (Sandbox Code Playgroud)

我的猜测是 sda5 的设置有问题,但我不知道如何修复它,因为它已设置为加密。将不胜感激有关如何进行的一些帮助。

Red*_*dro 16

已知错误

有一个错误(见下文),UUID一旦数据写入分区,它就会覆盖分区。因此,您不能使用UUID来引用用于加密交换的分区。

如今,几乎从未使用过交换空间。在我的机器上,仅当我打开第 40 个标签时才使用交换。当我没有交换时,突然我的计算机开始滞后并且浏览器自行关闭。或者在Chromium浏览器的情况下,很多标签会突然“死亡”。
出于这个原因,引用/dev/disk/by-uuid//etc/crypttab可能似乎是工作了一段时间,但只要你的交换空间实际使用,它将覆盖UUID,因为整个分区用于加密数据存储。

轻松修复

简单的解决方法是在您的 中按设备引用交换分区/etc/crypttab,例如:

cryptswap1 /dev/sda5 /dev/urandom swap,cipher=aes-cbc-essiv:sha256
Run Code Online (Sandbox Code Playgroud)

警告:这在笔记本电脑上可能是安全的(我像这样使用它),但是如果您使用的是带有可交换驱动器的台式机或有其他原因需要更改驱动器/分区布局,您不想这样做,因为正常的存储分区可能会突然用于交换。

注意:您需要重新启动才能使此更改生效,因为只有在启动时才会/dev/mapper/cryptswap1创建。

正确修复

解决此问题的正确方法是确保存储 的原始分区部分UUID不会被加密交换数据覆盖,因此在重新启动时它仍然存在。但是,我不确定UUID写入的位置以及占用的字节数。您可以自行承担风险,像这样测试它:

cryptswap1 UUID=abe3c568-c8fd-4dfb-b8e9-0520d442dd61 /dev/urandom swap,offset=36,cipher=aes-cbc-essiv:sha256
Run Code Online (Sandbox Code Playgroud)

请注意offset=36.

如果您有Ubuntu One帐户,请登录并转到Launchpad上的错误 #1310058并选择(或单击此处):“此错误也影响我”,因此该错误将获得“流行度”并且更容易得到修复。


更新 2014-10-27

我也偶然发现了这一点。未经本人验证。它看起来像offset一个更冗长的技巧和关于重建损坏的交换的评论。

https://bugs.launchpad.net/ubuntu/+source/ecryptfs-utils/+bug/1310058/comments/22

  • 我只想指出,截至几天前(2015 年 3 月中旬),该错误正在 https://bugs.launchpad.net/ubuntu/+source/ecryptfs-utils/+bug/953875 上进行跟踪,状态为“已修复已发布”,尽管该修复仅明确适用于 15.04。我想看看它是否被反向移植到 14.04 LTS ......以及“官方”更新程序可能是什么 (5认同)

小智 9

我在 Ubuntu 14.04 中遇到了同样的问题,并遇到了这个线程;突变体提供的这个链接对我来说效果很好。我使用了/dev/disk/by-id引用而不是 /dev/sdXY,因为该引用并不总是指向同一个物理分区。我的/etc/crypttab结果是:

cryptswap1 /dev/disk/by-id/wwn-0x500...-part6 /dev/urandom swap, cipher=aes-cbc-essiv:sha256
Run Code Online (Sandbox Code Playgroud)

  • 这是**正确的**和**简单的**修复! (3认同)

Ser*_*ndt 7

只需使用未加密的交换

...并保持 /home 加密

我尝试了这里建议的其他几个解决方案。尽管它们在热重启后继续工作,但最终它们在关机和冷重启后都失败了。

这告诉我们我们实际上正在处理一个双重错误:

  1. 交换驱动器的 UUID 被加密系统覆盖,并且
  2. 启动期间存在超时问题。

这些想法也反映在对Launchpad 上提交的相关错误的评论中。然而,随着从 Upstart 到 systemd 的转移,目前的 LTS 系统上的错误几乎没有被解决。

此时,我的脑海里闪过以下想法:

  1. 在系统安装过程中,我要求只加密我的\home分区,没有别的。
  2. 没有加密交换分区所涉及的风险相当有限。
  3. Canonical 负责清理他们的行为。我不会再浪费时间在这上面了。

因此,这是我的解决方案,可以将交换恢复为正常的未加密交换,而无需重新安装整个操作系统。

  1. 如果您还没有这样做,请安装blkid$ sudo apt-get install blkid
  2. 编辑/etc/crypttab并删除整cryptswap1行:$ sudo nano /etc/crypttab
  3. 从系统设置菜单启动 GParted。
  4. 您将看到一个带有感叹号的分区。这应该是有问题的交换分区。仔细选择它并将其重新格式化为linux-swap分区。应用此操作后,您会被告知恢复的普通交换分区的新 UUID。您有机会保存此信息。如果不这样做,请知道您始终可以使用以下命令从命令行检索新的 UUID blkid$ sudo blkid
  5. 现在,是时候恢复/etc/fstab昔日的辉煌了:$ sudo nano /etc/fstab

    • 删除包含对 的引用的整行/dev/mapper/cryptswap1
    • 取消对旧swap除去散线#前面UUID=...
    • 现在,用之前获得的新 UUID 替换旧的 UUID。
    • 通过点击Ctrl+将文件写出Onano使用Ctrl+退出X
  6. 完成所有这些后,您就可以开始使用新的未加密交换: $ sudo swapon -a
  7. 此解决方案在热重启和冷重启关闭时都可以使用。