[窍门]内核引导参数加上fastboot会让开机速度稍微变快一些(顺便带上了我自己的理解,不对望指正)

最大的社区版本,Ubuntu的发源地
回复
科学之子
帖子: 2284
注册时间: 2013-05-26 6:58
系统: Debian 9

[窍门]内核引导参数加上fastboot会让开机速度稍微变快一些(顺便带上了我自己的理解,不对望指正)

#1

帖子 科学之子 » 2016-07-30 22:05

[窍门]内核引导参数加上fastboot会让开机速度稍微变快一些(顺便带上了我自己的理解,不对望指正)
我只在我正在用的Debian上测试过,其它的发行版不确定是否有效
好像加上这个参数后作用就是避免在initrd阶段fsck(或者还有其它作用吗?如果有的话望指正,多谢)
但我搜"debian fastboot"出来一堆安卓
用gunzip和cpio解压我用的debian的initrd文件,grep发现里面有相应的脚本
貌似应该是发行版自己弄得initrd脚本来解析内核传入的参数
poloshiao
论坛版主
帖子: 18279
注册时间: 2009-08-04 16:33

Re: [窍门]内核引导参数加上fastboot会让开机速度稍微变快一些(顺便带上了我自己的理解,不对望指正)

#4

帖子 poloshiao » 2016-07-31 6:54

这个链接里说'fastboot'可禁用启动时的fsck
http://unixadminguide.blogspot.tw/2013/ ... linux.html
-f Skip fsck on reboot.
比較精準的說法是跳過或省略 fsck 程序 不是禁用

補充說明
最近 Server 從 Ubuntu 14.04 升級到 Ubuntu 16.04 剛好用到 fastboot 核心參數 為的就是跳過每次重開機都會執行的 fsck 程序 (在 /etc/fstab 的設定值 1 好像無效 原因待查)
科学之子
帖子: 2284
注册时间: 2013-05-26 6:58
系统: Debian 9

Re: [窍门]内核引导参数加上fastboot会让开机速度稍微变快一些(顺便带上了我自己的理解,不对望指正)

#5

帖子 科学之子 » 2016-08-01 1:28

poloshiao 写了:
这个链接里说'fastboot'可禁用启动时的fsck
http://unixadminguide.blogspot.tw/2013/ ... linux.html
-f Skip fsck on reboot.
比較精準的說法是跳過或省略 fsck 程序 不是禁用

補充說明
最近 Server 從 Ubuntu 14.04 升級到 Ubuntu 16.04 剛好用到 fastboot 核心參數 為的就是跳過每次重開機都會執行的 fsck 程序 (在 /etc/fstab 的設定值 1 好像無效 原因待查)
本来想早点回复您,但当时感觉状态不是很好
现在感觉状态也还不是很好,回帖可能写的乱七八糟,见笑,回头我状态好了再检查检查.
原因待查
具体原因我也还没弄清楚
但好像还是跟initrd文件有关
initrd里的"/init"脚本里面是先解析"/proc/cmdline"
碰到fastboot选项就将名为"fastboot"的环境变量设置为"y"
然后执行其它脚本
具体流程和脚本之间的层级结构仍没有弄清楚
但grep整个initrd的目录,会发现有"./scripts/functions"如果检测到["$fastboot" = "y"]就会跳过检测
所以猜测是由于先将变量fastboot设置为"y"导致检测被跳过

好像fstab的解析也是在initrd完成的,但解析的流程我还是没看明白
"./scripts/functions"中的一段貌似解析fstab的代码

代码: 全选

# Find a specific fstab entry
# $1=mountpoint
# $2=fstype (optional)
# returns 0 on success, 1 on failure (not found or no fstab)
read_fstab_entry() {
	# Not found by default.
	found=1

	for file in ${rootmnt}/etc/fstab; do
		if [ -f "$file" ]; then
			while read MNT_FSNAME MNT_DIR MNT_TYPE MNT_OPTS MNT_FREQ MNT_PASS MNT_JUNK; do
				case "$MNT_FSNAME" in
				  ""|\#*)
					continue;
					;;
				esac
				if [ "$MNT_DIR" = "$1" ]; then
					if [ -n "$2" ]; then
						[ "$MNT_TYPE" = "$2" ] || continue;
					fi
					found=0
					break 2
				fi
			done < "$file"
		fi
	done

	return $found
}
奇怪的是我grep整个initrd目录,只发现这一处的"MNT_PASS"难道是个Bug?
回复