UBUNTU 16.04 电源按钮不能关机的几种解决方法

首先来说,如果有可能的话尽可能查看发行版本的支持日期与 CPU 的发布日期尽可能的匹配。这里由于新的cpu都有着各种各样的节能技术,这会导致 OS 内核的 API 与 BIOS 不匹配,或者说 OS 内核就压根不支持这个新的特性。这就会导致特别多的问题出现,目前比较稳妥的方式是在对能耗要求不高的设备上,关闭所有的节能相关的选项会处理掉特别多的麻烦。

下面说说一些常见的方法怎么来处理,这里要介绍一个比较熟悉又陌生的内容 ACPI。 https://www.kernel.org/doc/ols/2005/ols2005v1-pages-59-76.pdf 和https://01.org/linux-acpi/documentation/debug-how-isolate-linux-acpi-issues 这两篇文章比较清晰的描述了ACPI 在 LINUX 上的实现。ACPI 就是个高级的电源接口,为的就是保证os与硬件之间的兼容性来设计的,这里面有很多的基础的接口。所以围绕着上面的不能关机的问题,最后大概率的还是会落到 ACPI 上面。下面我来说说思路,首先应该去DEBUG 关机的过程,从过程中去看到底是卡在那。

DEBUG 的过程也比较的简单,目前的 16.04 LTS 的系统使用的 systemd 来记录日志

  • systemd 超时时间设置 systemd 默认是 90S 可以先改成 10S 看看效果,是不是因为超时卡住了。

  • 关闭 swap,关闭 usb 3.0 的 legacy 模式

    sudo swapoff -a
    
  • 尝试安装 TLP 实验一下

  • 看日志 journalctl -b -1 -e 对比正常的日志与异常的日志,可以看出,卡在哪,一般正常的日志应该是journal stopped 结尾的。以这个为依据,用同样的 OS 来对比。先改一下配置文件记录日志

    vim /etc/systemd/journald.conf
    [Journal]
    Storage=persistent
    sudo systemctl restart systemd-journald
    

    然后改一下grub,改完以后 sudo update-grub 生效。之后先重启一遍让这个生效。

    vim /etc/default/grub
    GRUB_CMDLINE_LINUX_DEFAULT="quiet splash" 
    to
    GRUB_CMDLINE_LINUX_DEFAULT="" 
    

    这个配置可以打印出来更多的信息更容易判断问题。

    systemd[1]: Reached target Shutdown.
    systemd[1]: Reached target Final Step.
    systemd[1]: systemd-reboot.service: Succeeded.
    systemd[1]: Finished Reboot.
    systemd[1]: Reached target Reboot.
    systemd[1]: Shutting down.
    systemd-shutdown[1]: Syncing filesystems and block devices.
    systemd-shutdown[1]: Sending SIGTERM to remaining processes...
    systemd-journald[262]: Journal stopped
    

    下面是几种修改方法,能应对 90% 以上的问题 都是改 grub 的

    GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
    to
    GRUB_CMDLINE_LINUX_DEFAULT="quiet splash" acpi=force apm=power_off
    
    sudo gedit /etc/modules
    apm power_off=1 
    
    GRUB_CMDLINE_LINUX_DEFAULT="quite splash"
    to
    GRUB_CMDLINE_LINUX_DEFAULT="pci=nocrs acpi=force noefi"
    
    GRUB_CMDLINE_LINUX_DEFAULT="quite splash"
    to
    GRUB_CMDLINE_LINUX_DEFAULT="intel_idle.max_cstate=1"
    
    GRUB_CMDLINE_LINUX_DEFAULT="quite splash"
    to
    GRUB_CMDLINE_LINUX_DEFAULT="quiet splash acpi_rev_override=1"
    
    GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"To:GRUB_CMDLINE_LINUX_DEFAULT="quiet splash reboot=warm,cold,bios,smp,triple,kbd,acpi,efi,pci,force"
    
上一篇
下一篇