使用 Startpar 命令示例加速 Linux 引导过程
在典型的场景中,在启动过程中,运行级的系统启动脚本会被逐一执行。
在前一个脚本完全执行之前,特定的运行级别启动脚本不会执行。如果启动期间的特定服务由于某种原因挂起,则可能需要一段时间才能超时并继续执行下一个启动脚本。
Startpar 实用程序用于并行运行多个运行级脚本。这有助于加快服务器的启动过程。
Startpar 实用程序是 sysvinit 软件包的一部分。
下面给出了 startpar 的一般语法:
startpar –p par –i iorate –t timeout –T global timeout –a arg prg1 prg2
startpar –p par –I iorate –t timeout –T global timeout –M boot|start|stop
以下是 startpar 的各种选项:
- -p 并行运行的进程数。
- -i 更改进程块加权因子。默认值为 800。
- -t 如果没有输出,则清空脚本缓冲区的超时时间。
- -T 全局超时。它用于刷新先前脚本的缓冲区输出。
- -a 提供给所有脚本的参数。
- -M 将 startpar 切换到“make”模式。
- -P 指定上一个运行级别
- -N 指定下一个运行级别
当 startpar 正在执行运行级脚本时,脚本的输出被缓冲以允许对日志工具进行受控写入。
如果其他脚本并行运行,则等待记录完成,然后将数据从缓冲区写入记录区域。-t 和 -T 选项用于控制这些缓冲区的清除,具体取决于自上次捕获到缓冲区的输出以来的时间。
在我的系统上,我有以下版本的 startpar:
# startpar -v
startpar version 0.54
可以使用 -M 选项在“make”模式下使用 Startpar 命令。在这种模式下,startpar 使用以下文件来决定如何执行启动脚本。
/etc/init.d/.depend.start
/etc/init.d/.depend.stop
/etc/init.d/.depend.boot
这是 .depend.start 文件的示例:
# cat /etc/init.d/.depend.start
TARGETS = halt fbset lvm_wait_merge_snapshot microcode.ctl earlysyslog dbus acpid random purge-kernels reboot network haldaemon boot.clock syslog ford_tso_off Sts splash_early haveged rpcbind multipathd nfs smbfs kbd irq_balancer alsasound mcelog network-remotefs sshd java.binfmt_misc clamd logd gpm ntp single atd clamav-milter canna amavis cups nscd postfix xdm cron smartd
INTERACTIVE = kbd ntp single
network: dbus
haldaemon: dbus acpid
syslog: network earlysyslog
ford_tso_off: network
Sts: network
splash_early: syslog
haveged: syslog random
rpcbind: syslog
multipathd: syslog
nfs: rpcbind
.
.
.
.
mcelog: smbfs
network-remotefs: smbfs haldaemon
在“make”模式下,startpar 使用 .depend.start 文件来查找需要启动哪些依赖服务才能启动特定服务。
在上面的输出中,当 startpar 使用 make 选项以启动模式执行时,依赖的脚本在并行执行之前首先启动。
这是一个在系统启动序列期间如何在 make 模式下使用 startpar 的示例,
# startpar -p 4 -t 20 -T 3 -M start -P N -R 2
D-Bus already started. Not starting.
Starting acpid done
Re-Starting syslog services done
Starting service at daemon done
Starting sound driver done
Starting cupsd done
Starting CRON daemon/usr/sbin/cron: can't lock /var/run/cron.pid, otherpid may be 3506: Resource temporarily unavailable
startproc: exit status of parent of /usr/sbin/cron: 1
done
Starting irqbalance unused
HAL already started. Not starting.
Starting mcelog... already running done
Setting up network interfaces:
eth0 device: Intel Corporation 82545EM Gigabit Ethernet Co
eth0 IP address: 19.86.xxx.xxx/24 done
eth1 device: Intel Corporation 82545EM Gigabit Ethernet Co
eth1 IP address: 19.86.xxx.xxx/24 done
Setting up service network . . . . . . . . . . done
Hint: you may set mandatory devices in /etc/sysconfig/network/config
Setting up (remotefs) network interfaces:
Setting up service (remotefs) network . . . . . . . . . . done
Initializing random number generator done
Starting smartd unused
Disabling TSO on all interfaces and adding ETHTOOL_OPTIONS to nic config files done
Re-Starting syslog services done
Starting haveged daemon done
failed_service="alsasound"
skipped_service="irq_balancer smartd"
在上面的例子中,startpar 执行时总共有 4 个进程并行运行,超时时间为 20 秒,全局超时时间为 3 秒清空缓冲区,在 make 模式下 -M 带有“start”选项表示启动是在启动序列中使用。
这将使用 /etc/init.d/.depend。start 文件以验证相互依赖的脚本。-P 是以前的运行级别 -N 是新的运行级别。
这是另一个使用 startpar 来并行执行 2 个脚本的示例,如果需要,您还可以在 /etc/init.d/rc 上定义此脚本以确保这些脚本在系统启动期间并行启动。
# startpar -p 4 -t 20 -T 3 -a start /etc/init.d/ypxfrd /etc/init.d/drbd
Starting rpc.ypxfrd done
Starting DRBD resources:
此外,在某些 Linux 发行版中,您可以将系统设置为使用 /etc/init.d/rc 文件中的 startpar 选项。
在 rc 文件中,只需将值“CONCURRENCY=SHELL”更改为“CONCURRENCY=STARTPAR”,它应该会自动计算依赖关系并并行启动适用的脚本。
# vi /etc/init.d/rc
CONCURRENCY=STARTPAR
- 点赞
- 收藏
- 关注作者
评论(0)