为什么开机慢?

为什么开机慢?

我使用的是 Fedora 23,MATE 版本。电脑感觉启动很慢。我怎样才能加快速度?

详细信息https://i.stack.imgur.com/vpJEG.jpg

$ systemd-analyze 
Startup finished in 16.571s (firmware) + 2.605s (loader) + 824ms (kernel) + 1.997s (initrd) + 48.466s (userspace) = 1min 10.464s

$ systemd-analyze blame
         31.448s mlocate-updatedb.service
         18.211s akmods.service
         16.019s firewalld.service
          9.127s systemd-journald.service
          7.709s accounts-daemon.service
          7.368s dev-sdd3.device
          7.037s systemd-udev-settle.service
          5.219s abrtd.service
          4.854s chronyd.service
          4.629s ModemManager.service
          4.081s livesys.service
          3.958s unbound-anchor.service
          3.920s systemd-logind.service
          3.823s rsyslog.service
          3.781s gssproxy.service
          3.780s akmods-shutdown.service
          3.698s avahi-daemon.service
          3.651s mcelog.service
          3.636s rtkit-daemon.service
          2.735s polkit.service
          2.163s systemd-udevd.service
          2.150s lvm2-monitor.service
          1.569s proc-fs-nfsd.mount

$ systemd-analyze critical-chain 
The time after the unit is active or started is printed after the "@" character.
The time the unit takes to start is printed after the "+" character.

graphical.target @35.395s
└─lightdm.service @34.563s +830ms
  └─systemd-user-sessions.service @34.146s +129ms
    └─remote-fs.target @34.143s
      └─remote-fs-pre.target @34.143s
        └─iscsi-shutdown.service @34.128s
          └─network.target @34.019s
            └─NetworkManager.service @33.009s +1.009s
              └─firewalld.service @16.979s +16.019s
                └─polkit.service @17.870s +2.735s
                  └─basic.target @12.883s
                    └─sockets.target @12.864s
                      └─dbus.socket @12.844s
                        └─sysinit.target @12.704s
                          └─sys-fs-fuse-connections.mount @48.351s +3ms
                            └─system.slice
                              └─-.slice

答案1

这是已知问题,描述于红帽 Bugzilla:

systemd 缺乏 cron 的随机延迟功能,这对我们来说是一个打击。我已经看到有一个功能请求。但直到那时,似乎在运行 updatedb 之前手动设置随机睡眠是解决方法。我建议现在恢复使用 cron 来运行 updateb,或者在运行 updateb 之前进行随机或特定的睡眠:例如 sleep 1h

解决方法:

sed 's/daily/weekly/' /usr/lib/systemd/system/mlocate-updatedb.timer >/etc/systemd/system/mlocate-updatedb.timer

现在我只需要忍受周一的缓慢启动。

答案2

我建议采用以下解决方法:将 mlocate-updatedb.service 启动延迟几分钟(例如 10 分钟),以便如果需要在系统启动时运行,它会在一段时间后启动。

以下将执行此操作,并且如果 mlocate 包更新,它不会被替换:

mkdir /etc/systemd/system/mlocate-updatedb.service.d
cat <<EOF > /etc/systemd/system/mlocate-updatedb.service.d/mlocate-updatedb.conf
[Service]
ExecStart=
ExecStart=/bin/sleep 10m
ExecStart=/usr/libexec/mlocate-run-updatedb
EOF

这样做的好处是它可以防止缓慢启动(尚未测试,但它应该这样做,并且仍然会每天更新定位数据库。

对于带有 systemd-222-14.fc23.x86_64(及更高版本)的 Fedora 23: systemd 计时器现在有一个新选项:RandomizedDelaySec,它似乎提供了此问题的解决方案。因此,添加这样的行也应该可以解决问题:RandomizedDelaySec=30m

(请注意,延迟仍然是随机的,因此有时它可能非常小并导致启动缓慢。)

更新:更新已推送到 Fedora 测试存储库,该更新似乎已将服务类型从 更改oneshotsimple.这将导致 systemdupdatedb在继续之前不等待终止。这也多少解决了这个问题。不过,我仍然建议使用sleepor RandomizedDelaySec,这样它就不会在启动过程中运行;因为它的大量 IO 仍然会减慢启动过程。

相关内容