如何配置systemd实现GPU、Weston及虚拟化驱动早加载与非关键服务延迟
配置systemd实现关键模块早加载与非关键组件延迟激活
一、处理非关键内核模块
你已经通过/etc/modules-load.d/配置完成GPU等关键模块的早加载,针对非关键模块,按以下方式处理:
- 首先移除非关键模块在
/etc/modules-load.d/目录下的所有配置文件(或删除对应文件中的模块条目),避免systemd-modules-load.service开机自动加载它们。 - 若需要统一管理非关键模块的手动加载,可创建自定义systemd服务单元:
- 创建文件
/etc/systemd/system/load-non-critical-modules.service,写入以下内容:[Unit] Description=Load non-critical kernel modules manually [Service] Type=oneshot ExecStart=/usr/bin/modprobe <模块1> <模块2>... ExecStop=/usr/bin/rmmod <模块2> <模块1>... # 可选,用于卸载模块 RemainAfterExit=yes [Install] WantedBy=multi-user.target - 执行
systemctl daemon-reload刷新配置,然后执行systemctl disable load-non-critical-modules.service,确保开机不自动启动。 - 需要加载非关键模块时,手动执行
systemctl start load-non-critical-modules.service;卸载则执行systemctl stop load-non-critical-modules.service。
- 创建文件
二、延迟非关键systemd服务
针对不需要开机启动的服务,直接通过以下操作设置延迟激活:
- 执行
systemctl disable <服务名>,该命令会移除服务的开机启动链接,开机时不会自动启动,需要时手动执行systemctl start <服务名>即可激活。 - 若某些服务存在强制依赖导致无法禁用,可先执行
systemctl mask <服务名>彻底屏蔽(注意:屏蔽后无法手动启动,如需恢复执行systemctl unmask <服务名>)。 - 可通过
systemctl list-unit-files --type=service查看所有服务的启动状态,确认非关键服务已设置为disabled或masked。
三、关于systemd-modules-load.service的处理
该服务负责加载/etc/modules-load.d/、/run/modules-load.d/、/usr/lib/modules-load.d/下配置的模块,你已通过它实现关键模块的早加载,因此无需修改该服务的状态,保持默认的enabled即可——只要你已移除非关键模块的配置,它只会加载你需要的关键模块,不会影响非关键组件的延迟激活。
验证命令
- 查看模块加载状态:
lsmod | grep <模块名> - 查看服务状态:
systemctl status <服务名> - 手动加载单个模块:
modprobe <模块名> - 手动卸载单个模块:
rmmod <模块名>
内容的提问来源于stack exchange,提问作者Malin Shaik
相关产品推荐
相关产品推荐

