使用 Startpar 命令示例加速 Linux 引导过程

举报
Tiamo_T 发表于 2022/09/14 23:44:22 2022/09/14
【摘要】 在典型的场景中,在启动过程中,运行级的系统启动脚本会被逐一执行。

在典型的场景中,在启动过程中,运行级的系统启动脚本会被逐一执行。

在前一个脚本完全执行之前,特定的运行级别启动脚本不会执行。如果启动期间的特定服务由于某种原因挂起,则可能需要一段时间才能超时并继续执行下一个启动脚本。

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
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。