更新 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
但重启后 swap 无法激活并且再次看起来像这样:
$ 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
我目前的猜测是,当将磁盘设置为加密时,Linux 不再识别分区类型,因此无法正确加载它,导致它无法注册其 UUID,因此 cryptswap 找不到它,从而导致失败。但我不知道如何修复它。
更新的问题:
进一步的测试表明,我可以通过运行 $ mkswap /dev/sda5 来启动并运行交换
然后使用正确的 UUID 更新 /etc/crypttab 并按照此处概述的步骤操作: 如何设置加密交换文件?
但问题仍然存在,当我重新启动计算机时,运行 /dev/sda5 没有出现
$ ls -l /dev/disk/by-uuid/
如果我做:
$ cfdisk /dev/sda
我收到以下错误:
FATAL ERROR: Bad logical partition 6: enlarged logical partitions overlap
Press any key to exit cfdisk
图形“磁盘”实用程序在使用时打开磁盘时不会抱怨任何错误。
$ 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
原始问题:
升级到 14.04(从 13.04)后,我的电脑速度严重减慢,运行 top 时我注意到 kswap0 占用了大量 CPU 时间。我还注意到我没有任何交换空间!
$ sudo swapon -a
swapon: /dev/mapper/cryptswap1: stat failed: No such file or directory
我的加密交换设置似乎有问题(我甚至不知道我有一个)
$ 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
看看我的 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
我猜是 sda5 的设置有问题,但我不知道如何修复它,因为它被设置为加密。希望得到一些关于如何继续的帮助。
答案1
已知错误
存在一个错误(见下文),UUID
一旦将数据写入分区,该分区的 就会被覆盖。因此,您无法使用UUID
来引用要用于加密交换的分区。
如今,交换空间几乎从未使用过。在我的计算机上,只有在打开第 40 个选项卡时才会使用交换空间。当我没有交换空间时,我的计算机突然开始滞后,浏览器会自动关闭。或者在浏览Chromium
器的情况下,很多选项卡会突然“死机”。
出于这个原因,/dev/disk/by-uuid/
在您/etc/crypttab
可能的似乎可以工作一段时间,但一旦你的交换空间实际被使用,它就会覆盖,UUID
因为整个分区都用于加密数据存储。
轻松修复
简单的解决方法是在您的设备中引用交换分区/etc/crypttab
,例如:
cryptswap1 /dev/sda5 /dev/urandom swap,cipher=aes-cbc-essiv:sha256
警告:这是大概在笔记本电脑上是安全的(我是这样使用的),但如果您使用的是具有可交换驱动器的台式机或有其他原因需要更改驱动器/分区布局,则您不想这样做,因为普通存储分区可能会突然用于交换。
笔记:您需要重新启动才能使此更改生效,因为只有在启动时才会/dev/mapper/cryptswap1
创建。
正确修复
解决此问题的正确方法是确保存储的原始分区部分UUID
不会被加密的交换数据覆盖,因此它在重新启动时仍会存在。但是,我不确定写入的位置UUID
以及占用的字节数。您可以自行承担风险,像这样测试它:
cryptswap1 UUID=abe3c568-c8fd-4dfb-b8e9-0520d442dd61 /dev/urandom swap,offset=36,cipher=aes-cbc-essiv:sha256
请注意offset=36
。
如果你有Ubuntu 一号账户登录并前往Launchpad 上的 Bug #1310058并选择(或单击此处):“这个错误也影响到我了”因此该错误将获得“普及”并且更容易得到修复。
更新 2014-10-27
我也偶然发现了这一点。未经我证实。它看起来像是offset
一个技巧,内容更详细,并带有关于重建损坏的交换的评论。
https://bugs.launchpad.net/ubuntu/+source/ecryptfs-utils/+bug/1310058/comments/22
答案2
我在 Ubuntu 14.04 中遇到了完全相同的问题,并遇到了这个线程;此链接mutant 提供的那个对我来说效果很好。我使用了引用/dev/disk/by-id
而不是 /dev/sdXY,因为该引用并不总是指向同一个物理分区。我/etc/crypttab
最终得到的结果如下:
cryptswap1 /dev/disk/by-id/wwn-0x500...-part6 /dev/urandom swap, cipher=aes-cbc-essiv:sha256
答案3
只需使用未加密的交换
...并保持 /home 加密
我尝试了这里建议的其他几种解决方案。尽管它们在热重启后仍能正常工作,但最终它们在关机和冷重启后都失败了。
这告诉我们我们实际上正在处理一个双重错误:
- 交换驱动器的 UUID 被加密系统覆盖,并且
- 启动过程中存在超时问题。
这些想法也反映在对相关在 Launchpad 上提交的错误。然而,随着从 Upstart 到 systemd 的迁移即将完成,目前 LTS 系统上的错误几乎没有得到解决。
此时,我的脑海里闪过以下想法:
- 在系统安装期间,我只要求加密我的
\home
分区,没有其他内容。 - 没有加密交换分区所涉及的风险相当有限。
- Canonical 必须改过自新。我不会再浪费时间了。
因此,这是我的解决方案将交换恢复为正常的、未加密的交换,而无需重新安装整个操作系统。
- 如果您还没有安装,请安装
blkid
:$ sudo apt-get install blkid
- 编辑
/etc/crypttab
并删除整cryptswap1
行:$ sudo nano /etc/crypttab
- 从系统设置菜单启动 GParted。
- 您将看到一个带有感叹号的分区。这应该是有故障的交换分区。仔细选择它并将其重新格式化为分区
linux-swap
。应用此操作后,您将收到有关恢复的正常交换分区的新 UUID 的通知。您将有机会保存此信息。如果您不这样做,请记住,您始终可以使用以下命令从命令行检索新的 UUIDblkid
:$ sudo blkid
现在,是时候恢复
/etc/fstab
其昔日的辉煌了:$ sudo nano /etc/fstab
- 删除包含对 的引用的整行
/dev/mapper/cryptswap1
。 - 通过删除前面的
swap
井号来取消注释旧行。#
UUID=...
- 现在,用之前获得的新 UUID 替换旧的 UUID。
- Ctrl按+写出文件,然后按+O 退出。
nano
CtrlX
- 删除包含对 的引用的整行
- 完成所有这些后,您就可以开始使用新的未加密交换了:
$ sudo swapon -a
- 该解决方案既能实现热重启,也能实现冷重启关机。
答案4
我有这个问题,就像问题 332625某些暂停和重启的组合会丢失交换分区的 UUID(正如您的/etc/fstab说,确认这一点sudo blkd
),所以你的在/etc/crypttab中使用该 UUID 作为加密交换失败。
我没有运气换在/etc/crypttab中使用分区的/dev
名称(/dev/sda6在您的情况下)或dev/disk/by-id/
名称,而不是消失的 UUID。
不幸的是,放弃加密交换是最简单且迄今为止最好的解决方案。