我的系统的 Ubuntu 部分出现了一个相当奇怪的问题。简而言之,我的 Ubuntu 14.04 使用 LUKS 设置上的 LVM。/boot 位于未加密分区 (/sda3) 上,而 swap 和 root 位于 LUKS 分区 (/sda4) 内的 LVM 上。我从 live-USB 进行了设置,系统基本可以正常工作。但是,系统的行为取决于原始 live-USB 是否存在。
如果 USB 存在,系统将在大约 3 秒内启动并正常关机。如果 USB 不存在,加密系统将挂载,但登录过程需要大约 60 秒。关机时,系统会声称 root 正忙,因此不会正常关机。
我不确定问题到底是什么,或者我该如何修复它。我怀疑这个问题是由于我在安装过程中从 live-USB chroot 到新安装时做错了什么而导致的。任何帮助都将不胜感激。
我会提供尽可能多的信息,如果这篇文章的剩余部分太长,我深表歉意。
关机期间的输出:
如果 live-USB 存在,则关机正常进行:
wait-for-state stop/waiting
* Stopping rsync daemon rsync [OK]
* speech-dispatcher disabled: edit /etc/default/speech-dispatcher
* Asking all remaining processes to terminate... [OK]
* Killing all remaining processes... [OK]
ModemManager[971]: <info> Caught signal, shutting down...
ModemManager[971]: <info> ModemManager is shut down
nm-dispatcher.action: Caught signal 15, shutting down...
* Deactivating swap... [OK]
* Unmounting local filesystems... [OK]
* sda4_crypt (busy)...
* Stopping early crypto disks... [fail]
* Stopping early crypto disks... [OK]
* Will now halt
[ 155.0007241 reboot: Power down
系统干净关闭,我们没有遇到任何问题。
如果 live-USB 不存在,关机将按如下方式进行:
wait-for-state stop/waiting
* Stopping rsync daemon rsync [OK]
* speech-dispatcher disabled: edit /etc/default/speech-dispatcher
* Asking all remaining processes to terminate... [OK]
* Killing all remaining processes... [fail]
ModemManager[971]: <info> Caught signal, shutting down...
ModemManager[971]: <info> ModemManager is shut down
nm-dispatcher.action: Caught signal 15, shutting down...
* Deactivating swap... [OK]
* Unmounting local filesystems... [OK]
* sda4_crypt (busy)...
* Stopping early crypto disks... [fail]
* Stopping early crypto disks... [OK]
mount: / is busy
* Will now halt
[240.184072] INFO: task kworker/6:1:124 blocked for more than 120 seconds.
[240.184132] Not tainted 3.19.0-47-generic #53~14.04.1-Ubuntu
[240.184176] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
[240.184418] INFO: task alsa-sink-USB A:2037 blocked for more than 120 seconds.
[240.184469] Not tainted 3.19.0-47-generic #53~14.04.1-Ubuntu
[240.184512] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
[240.184710] INFO: task pulseaudio:2563 blocked for more than 120 seconds.
[240.184758] Not tainted 3.19.0-47-generic #53~14.04.1-Ubuntu
[240.184802] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
此时,系统只会继续定期发出上述错误,并且无法正常关闭。解决此问题的唯一方法是手动关闭机器。
设置:
我在台式机上双启动 Windows 10 和 Ubuntu 14.04。在安装 Ubuntu 之前,我安装了 Windows 10 并使用 VeraCrypt 对其进行了加密。这两个使用 /sda1 和 /sda2。然后,我尝试按照以下两个指南从 live-USB 安装 Ubuntu:
[1]https://thesimplecomputer.info/full-disk-encryption-with-ubuntu
[2]http://techblog.mastbroek.com/all-articles/dualboot-encrypted-windows-and-ubuntu/5/
我主要遵循 [1],基本上只参考了 [2] 来设置 LVM。/boot 位于未加密分区 /sda3 上,而 swap 和 root 位于 LUKS 分区 /sda4 内的 LVM 上。一切都使用 UUID 完成。当一切都完成后,我的系统如下所示:
$ sudo lsblk -o name,uuid,mountpoint
NAME UUID MOUNTPOINT
sda
├─sda1 16808C90808C784F
├─sda2
├─sda3 41589165-270f-4be5-bbfd-7fe66112f485 /boot
└─sda4 dd217bb3-30f3-496a-8dc9-12abc62e0b0f
└─sda4_crypt (dm-0) BJA0uf-k4EW-SpaJ-GfTN-5orX-K5AM-IGuKcD
├─MyVolume-swapvol (dm-1) 71149c9e-22b7-4349-8045-a632f2ff63c6 [SWAP]
└─MyVolume-rootvol (dm-2) 1c5cf473-72a5-4066-b65e-2fdbe78fa231 /
sdb
├─sdb1 8EBC75B8BC759C01
└─sdb2 D20877650877478D
sdc
└─sdc1 68463BC6463B9432
sdd
└─sdd1 B88407A8840767E8
sr0
fstab 的内容:
# <file system> <mount point> <type> <options> <dump> <pass>
UUID=1c5cf473-72a5-4066-b65e-2fdbe78fa231 / ext4 errors=remount-ro 0 1
# /boot was on /dev/sda3 during installation
UUID=41589165-270f-4be5-bbfd-7fe66112f485 /boot ext2 defaults 0 2
UUID=71149c9e-22b7-4349-8045-a632f2ff63c6 none swap sw 0 0
crypttab 的内容:
sda4_crypt UUID=dd217bb3-30f3-496a-8dc9-12abc62e0b0f none luks,discard,lvm=MyVolume
据我所知,上面的一切看起来都是正确的。我怀疑问题不在于安装/卸载加密系统,而在于 live-USB 上的文件存在一些奇怪的依赖关系。这似乎意味着当我从 live-USB chroot 到加密文件系统时,指南 [1] 的第 6 步出了问题。从 live-USB 内部开始的相关命令(直接来自 [1])是:
cd /mnt
mkdir root
mount /dev/mapper/root root
mount /dev/mapper/sda1 root/boot
chroot root
mount -t proc proc /proc
mount -t sysfs sys /sys
实际执行此操作时,我根据系统需要更改了 /sda1 和 /dev/mapper/...。
如果确实出了问题,我根本不知道如何诊断问题,更不用说修复它了。