‘清除孤立的inode’和状态在hibernate恢复时丢失
我安装了一个新的16.04 LTS。 我遇到了Wifi applet显示错误(从Suspend恢复后)和hibernate恢复的一些问题。 我使用此处显示的方法在菜单上启用了hibernate模式。 现在hibernate恢复不会间歇性地工作。 有时它工作正常,有时它在简历上显示文字,说明“清除孤立的inode”,系统只是重新启动,没有先前的内存状态。
这是一些信息:
$ sudo blkid /dev/sda1: LABEL="System Reserved" UUID="50921EE4921ECE7A" TYPE="ntfs" PARTUUID="dda192f8-01" /dev/sda2: LABEL="Primary Disk" UUID="765E305F5E3019F7" TYPE="ntfs" PARTUUID="dda192f8-02" /dev/sda3: LABEL="Secondary Disk" UUID="E2D42C6AD42C42E1" TYPE="ntfs" PARTUUID="dda192f8-03" /dev/sda5: UUID="dbaad068-46da-4637-9c45-5c32c20d3cfe" TYPE="swsuspend" PARTUUID="dda192f8-05" /dev/sda6: UUID="31385b29-f351-4a10-9dcf-c92efd58334b" TYPE="swap" PARTUUID="dda192f8-06" /dev/sda7: UUID="1f734f56-7328-4029-88a0-fa995426d4d2" TYPE="ext4" PARTUUID="dda192f8-07" $ cat /etc/initramfs-tools/conf.d/resume RESUME=UUID=31385b29-f351-4a10-9dcf-c92efd58334b
我只是“修复”了同样的问题,因此即使您的问题不同,也会提供我的解决方案。
我首先遍历了by-uuid
问题(因为我删除了systemd,我认为sysvinit可能导致设备顺序混乱,正如其他地方所建议的那样,并且uuid引用应该已经解决了问题。或者我认为。
这似乎是好一周,甚至两个,然后它再次开始。
在此之后,我想起了我对Gentoo的麻烦,我必须在grub.cfg中明确设置resume=/dev/disk/by-uuid/{}
,否则无论如何都不会恢复。 在那里,它解决了我的问题。 我甚至安装了dracut来管理我的initramfs。 它再次工作了一段时间,然后它没有。
然后我尝试了不同的东西,如降级内核,安装bootlogd
,但没有任何建议有什么特别之处。
此时,我开始寻求更多帮助。 我在kernel.org上掌握了所有 – 不太可读 – 的信息。 我试过这个,那个,我不太记得我做了什么,但是嘿。
它有时会起作用,然后它再次没有。
现在,我实际上是偏执狂,寻找内核中的隐藏模块并设想冷启动攻击,确定有人可能得到我的BIOS支持,从hibernate状态恢复,然后重置计算机并从一些外国成像系统转储内存启动。 (请注意,所有这些绝对不是牵强附会,只是 – 事实certificate – 完全不相关。)
在这个任务中 – 今天晚上 – 我设法找到了这个网站: https : //01.org/blogs/rzhang/2015/best-practice-debug-linux-suspend/hibernate-issues 。 从这里开始,我将参数2.1 initcall_debug , 2.3 ignore_loglevel和2.4 dynamic debug添加到我的grub.cfg作为内核启动参数。
然后又发生了。
但现在我更专注。 我注意到我的“孤立的inode”内容是由于“ Superblock上次写入时间是未来的 ”。 我花了几个小时发现当时的情况,大约半年前,再次无济于事。 我只是假设它与缺乏systemd和我使用localtime作为hwclock的习惯有关(由于偶尔使用W7进行双启动),所以它必须在6-10分钟(不精确的时钟源)到2的间隔内最多小时(我在GMT + 1 DST)。
男孩,我错了。
碰巧现在,添加了ignore_loglevel内核参数后,bootlog包含我的时钟在启动时所处的确切日期,以及修改时间。
我的时钟实际上设置为2013年6月6日,这可能是BIOS发布日期或类似的东西。 这是三年的差异(根据ntpdate,为97010350.488716秒)。
因此,我终于发现我的CMOS电池被破坏了 。 它可能有点充电 – 即使它不是可充电的 – 当我长时间离开计算机时,它可能已经拾取了足够的电荷以“存活”1-2天 – 或者它可能只是温度, 谁知道。 (这不是我的主要计算机,所以它确实连续几天每隔一周无动力。)
tl;博士 :
也就是说,我建议换掉你的CMOS电池,或者 – 如果它是笔记本电脑或类似电脑 – 那么
-
(可选,如果使用Xenial 16.04的默认安装,则不需要此操作)安装并配置bootlogd,以便在/ var / log / boot中找到bootlog。 (使用systemd,您只需运行
journalctl -b
即可获取journalctl -b
。) -
编辑
/boot/grub/grub.cfg
文件,并在第一行的末尾添加initcall_debug ignore_loglevel
,以linux /boot/vmlinuz...
开头,以menuentry
开头的第一行。 -
马上重启。 这非常重要,因此您可以在激活新设置的情况下hibernate。
-
hibernate,让机器关闭相当长的时间,比如至少几小时,然后恢复。
-
最后,运行
journalctl -b > /var/log/boot
如果你不记得删除了一个名为systemd
东西和/或安装了一个名为upstart
,openrc
或sysvinit
。
对于所有这些步骤,您需要是root用户,因此建议您在每次重新启动后以sudo -s
命令开始,并首先安装Midnight Commander( apt install mc
或Software Center)之类的东西并使用它( mc
)来使用配置和日志。
现在你有一个登录/var/log/boot
,你可以在其中查找启动时的事件,就像“孤立的inode”的实际原因一样。 如果您发现“未来的修改时间”有问题,或者有很多小时或更长时间的差异,那么您肯定也会注意到您的CMOS / RTC电池注定失败,并且需要更换它。
好吧,我很惊讶没有人建议这一点,因为我已经有这个问题很长一段时间了。 看起来的答案就是盯着我的脸。 显然我的交换分区大小与我的内存大致相同。 另外,我没有在我的grub文件中添加指向我的交换分区的UUID的链接。 将交换分区大小增加到内存的两倍并在grub文件中添加其UUID后,hibernate恢复在过去几天正常工作。 虽然,从hibernate状态恢复的时间要长一点,但我并没有抱怨。
您需要确保在以下文件中定义了交换分区:
-
/etc/initramfs-tools/conf.d/resume
-
/etc/default/grub
UPDATE
使用低级接口uswsusp
作为默认的hibernate机制大大改善了我的恢复时间到一分钟之内!
sudo apt-get install uswsusp
创建文件/etc/pm/config.d/00sleep_module
并添加以下行:
-
SLEEP_MODULE="uswsusp"
- 无论发行版16.04如何,安装USB记忆棒都无法启动
- 即使关机后电池也会耗尽
- 升级Ubuntu 16.04后,以太网不稳定
- 关于compiz,libkf5akonadisearch-bin包的Unknown Multi-Arch类型从14.04升级到16.04的错误
- 如何在Ubuntu 16.04上安装Skype?
- .cache / upstart / Unity7.log增长以消耗整个可用磁盘空间。 Python cypto涉嫌
- 在Windows 10上安装具有双启动选项的Ubuntu-mate – usb启动没有发生
- 在ubuntu 16.04中,phpmyadmin缺少mbstring
- 升级到Ubuntu 16.04后PHP和Apache2坏了