我使用的是 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 测试存储库,该更新似乎已将服务类型从 更改oneshot
为simple
.这将导致 systemdupdatedb
在继续之前不等待终止。这也多少解决了这个问题。不过,我仍然建议使用sleep
or RandomizedDelaySec
,这样它就不会在启动过程中运行;因为它的大量 IO 仍然会减慢启动过程。