克隆脚本,如附录 B所示,不是必需的。你可以使用init=/bin/bash作为内核参数,最终得到一个 shell,你可以从中运行可用的命令和程序。
这里展示该脚本是为了以正式的方式展示命令,并提出一种减少因错误输入而造成损坏可能性的方法。 你必须更改变量tftp_server, nic_module, major_a, family_a和image_a以适应你的环境和应用。
请注意,数组major_a和family_a是对应的。给定族名称的错误主设备号会误导用户。 你可以通过列出/dev目录来找到感兴趣设备(整个磁盘和分区)的主设备号和次设备号。 主设备号和次设备号位于常规文件大小所在的位置,在命令 ls -l 的输出中,用逗号分隔。
# ls -l /dev/fd0 /dev/hda /dev/hda1 /dev/hdc brw-rw---- 1 root disk 2, 0 Apr 11 11:25 /dev/fd0 brw-rw---- 1 root disk 3, 0 Apr 11 11:25 /dev/hda brw-rw---- 1 root disk 3, 1 Apr 11 11:25 /dev/hda1 brw-rw---- 1 root disk 22, 0 Apr 11 11:25 /dev/hdc |
命令 set -e 指示 shell 在任何命令返回非零代码时中止脚本。 消息"Kernel panic: Attempted to kill init!" 将会跟随,就像正常结束一样。 不要惊慌! 在这种情况下这是正常的。 只需关闭计算机。 按下 Ctrl-Alt-Del 在退出脚本之前平稳重启,以避免出现这个难看的消息。
命令 insmod 将加载网络接口模块,命令 dhcpcd 将启动 DHCP 客户端。 请注意,Grub 在其启动期间使用 DHCP 与 Linux 执行相同的操作无关。
该脚本进行一个大循环,并且在每次迭代中,它会询问三个操作之一:从网络复制到设备、从设备复制到网络或 运行 fdisk。 然后脚本询问要使用哪个块设备。 数组major_a保存允许使用的块设备的主设备号,数组family_a保存设备族的相应名称。 接下来,脚本询问要使用的块设备的次设备号。