⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 boot-blocks.html

📁 FreeBSD操作系统的详细使用手册
💻 HTML
字号:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta name="generator" content="HTML Tidy, see www.w3.org" /><title>MBR, 和引导阶段一,二,三</title><meta name="GENERATOR" content="Modular DocBook HTML Stylesheet Version 1.7" /><link rel="HOME" title="FreeBSD 使用手册" href="index.html" /><link rel="UP" title="FreeBSD引导过程" href="boot.html" /><link rel="PREVIOUS" title="引导问题" href="boot-introduction.html" /><link rel="NEXT" title="内核在引导时的交互" href="boot-kernel.html" /><link rel="STYLESHEET" type="text/css" href="docbook.css" /><meta http-equiv="Content-Type" content="text/html; charset=GB2312" /></head><body class="SECT1" bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#840084"alink="#0000FF"><div class="NAVHEADER"><table summary="Header navigation table" width="100%" border="0" cellpadding="0"cellspacing="0"><tr><th colspan="3" align="center">FreeBSD 使用手册</th></tr><tr><td width="10%" align="left" valign="bottom"><a href="boot-introduction.html"accesskey="P">后退</a></td><td width="80%" align="center" valign="bottom">章 12. FreeBSD引导过程</td><td width="10%" align="right" valign="bottom"><a href="boot-kernel.html"accesskey="N">前进</a></td></tr></table><hr align="LEFT" width="100%" /></div><div class="SECT1"><h1 class="SECT1"><a id="BOOT-BLOCKS" name="BOOT-BLOCKS">12.3. MBR,和引导阶段一,二,三</a></h1><div class="SECT2"><h2 class="SECT2"><a id="BOOT-BOOT0" name="BOOT-BOOT0">12.3.1. MBR, <ttclass="FILENAME">/boot/boot0</tt></a></h2><p>FreeBSD MBR放置在<tt class="FILENAME">/boot/boot0</tt>. 这是真实MBR的一份<spanclass="emphasis"><i class="EMPHASIS">复制品</i></span> ,真正的MBR必须放在磁盘FreeBSD区域以外的特定部分.</p><p><tt class="FILENAME">boot0</tt> 是非常简单的, 因为在 <abbr class="ABBREV">MBR</abbr>里的代码只有512 字节. 如果你安装了FreeBSD MBR且装了多个操作系统,在引导时你会看到如下的内容:</p><div class="EXAMPLE"><a id="BOOT-BOOT0-EXAMPLE" name="BOOT-BOOT0-EXAMPLE"></a><p><b>例子 12-1. <tt class="FILENAME">boot0</tt> Screenshot</b></p><pre class="SCREEN">F1 DOSF2 FreeBSDF3 LinuxF4 ??F5 Drive 1Default: F2</pre></div><p>其它操作系统, 特别是 <span class="TRADEMARK">Windows</span>&reg;&nbsp;95,以用自己的MBR覆盖现有MBR而著称。 如果发生了这种事情,或者你想用FreeBSD的MBR覆盖现有的MBR,你可以使用以下的命令:</p><pre class="SCREEN"><samp class="PROMPT">#</samp> <kbd class="USERINPUT">fdisk -B -b /boot/boot0 <varclass="REPLACEABLE">device</var></kbd></pre><p><var class="REPLACEABLE">device</var>是要写入MBR的设备名,比如<ttclass="DEVICENAME">ad0</tt> 代表第一个IDE磁盘, <ttclass="DEVICENAME">ad2</tt>代表第二个IDE控制器上的第一个IDE磁盘, <ttclass="DEVICENAME">da0</tt>代表第一个SCSI 磁盘,等等.</p><p>如果你是linux用户,你可能更喜欢使用 <b class="APPLICATION">LILO</b>来控制引导过程,你可以编辑 <tt class="FILENAME">/etc/lilo.conf</tt>文件, 或者在安装FreeBSD过程中选择 <varclass="OPTION">Leave The Master Boot Record Untouched</var> .如果你安装了FreeBSD引导管理器, 你可以启动linux然后更改 <b class="APPLICATION">LILO</b>的配置文件 <tt class="FILENAME">/etc/lilo.conf</tt>,加入以下的选项:</p><pre class="PROGRAMLISTING">other=/dev/hdXYtable=/dev/hdbloader=/boot/chain.blabel=FreeBSD</pre><p>这样就可以通过 <b class="APPLICATION">LILO</b>来引导FreeBSD和linux. 在我们的例子中,我们使 <var class="REPLACEABLE">XY</var> 确定驱动器号和分区 . 如果你使用的是 <acronymclass="ACRONYM">SCSI</acronym> 驱动器, 你需要将 <varclass="REPLACEABLE">/dev/hdXY</var>改成<var class="REPLACEABLE">/dev/sdXY</var>,这里再次使用了<var class="REPLACEABLE">XY</var> 的语法.如果你安装的两个系统在同一驱动器上,<varclass="OPTION">loader=/boot/chain.b</var>选项可以 去掉.现在你可以执行<ttclass="COMMAND">/sbin/lilo -v</tt>使修改生效.</p></div><div class="SECT2"><h2 class="SECT2"><a id="BOOT-BOOT1" name="BOOT-BOOT1">12.3.2. 第一阶段, <ttclass="FILENAME">/boot/boot1</tt>, 和第二阶段, <ttclass="FILENAME">/boot/boot2</tt></a></h2><p>概念上,第一,第二阶段同属于一个程序, 处于磁盘的相同区域. 但由于空间限制,它们被分为两部分.可是你总是会一起安装它们.</p><p>它们放置在引导分区的引导扇区里.在引导扇区里能找到 <ahref="boot-blocks.html#BOOT-BOOT0">boot0</a>, <abbr class="ABBREV">MBR</abbr>以及其它用于引导系统的程序. <ttclass="FILENAME">/boot</tt>目录下的文件是真实文件的拷贝,真实文件放置在FreeBSD文件系统之外.</p><p><tt class="FILENAME">boot1</tt> 非常简单,因为它再多也只能有512字节,只能识别储存着分区信息的<i class="FIRSTTERM">disklabel</i>, 及寻找执行 <ttclass="FILENAME">boot2</tt>.</p><p><tt class="FILENAME">boot2</tt> 稍微有点加强, 能够理解FreeBSD的文件系统以便于寻找里面的文件,能提供选择内核和加载器的简单界面.</p><p>因为 <a href="boot-blocks.html#BOOT-LOADER">loader</a> 有着更强的功能 ,提供了一套易于使用的引导配置,<tt class="FILENAME">boot2</tt>一般都执行loader ,但以前它的任务是直接运行内核.</p><div class="EXAMPLE"><a id="BOOT-BOOT2-EXAMPLE" name="BOOT-BOOT2-EXAMPLE"></a><p><b>例子 12-2. <tt class="FILENAME">boot2</tt>的屏幕输出</b></p><pre class="SCREEN">&gt;&gt; FreeBSD/i386 BOOTDefault: 0:ad(0,a)/kernelboot:</pre></div><p>如果你要更改已安装的 <tt class="FILENAME">boot1</tt> 和 <ttclass="FILENAME">boot2</tt> 请使用命令<span class="CITEREFENTRY"><spanclass="REFENTRYTITLE">disklabel</span>(8)</span>.</p><pre class="SCREEN"><samp class="PROMPT">#</samp> <kbd class="USERINPUT">disklabel -B <varclass="REPLACEABLE">diskslice</var></kbd></pre><p><var class="REPLACEABLE">diskslice</var> 是用于引导的磁盘和分区, 比如 <ttclass="DEVICENAME">ad0s1</tt> 代表第一个IDE磁盘上的第一个分区.</p><div class="WARNING"><blockquote class="WARNING"><p><b>dangerously dedicated</b>如果你在<span class="CITEREFENTRY"><spanclass="REFENTRYTITLE">disklabel</span>(8)</span>命令中只使用了磁盘名, 比如 <ttclass="DEVICENAME">ad0</tt>,就会破坏磁盘上的所有分区. 这当然不是你所希望的,所以在按下 <bclass="KEYCAP">回车</b>之前 一定要对命令进行多次确认.</p></blockquote></div></div><div class="SECT2"><h2 class="SECT2"><a id="BOOT-LOADER" name="BOOT-LOADER">12.3.3. 第三阶段, <ttclass="FILENAME">/boot/loader</tt></a></h2><p>加载器(loader) 是三个阶段中的最后阶段,且是放置在 文件系统之中的, 一般是文件<ttclass="FILENAME">/boot/loader</tt>.</p><p>loader被作为一种友好的配置方式,使用了一组内建且易用的命令集.这些命令由一个强大的多的解释器支持构建,其本身带有复杂得多的命令集 .</p><div class="SECT3"><h3 class="SECT3"><a id="BOOT-LOADER-FLOW" name="BOOT-LOADER-FLOW">12.3.3.1.Loader程序流程</a></h3><p>初始时, loader会探测控制台和磁盘,识别是从哪块盘引导的.它会根据这些信息设置变量,启动解释器以接受通过脚本或交互方式传来的用户命令.</p><p>loader然后会读取并运行<tt class="FILENAME">/boot/loader.rc</tt>, 默认地读取<ttclass="FILENAME">/boot/defaults/loader.conf</tt>以设置可靠的默认变量, 读取<ttclass="FILENAME">/boot/loader.conf</tt> 对这些变量作本地修改 .<ttclass="FILENAME">loader.rc</tt> 依据这些变量进行动作,加载任何被选择的模块和内核.</p><p>最后, 默认地, loader会停留10秒等待按键,若没有发生中断,就开始引导内核.如果被中断,用户会得到一个命令行提示符,在这里用户得更改变量, 卸载所有模块, 加载模块,最后引导 或重新引导.</p></div><div class="SECT3"><h3 class="SECT3"><a id="BOOT-LOADER-COMMANDS" name="BOOT-LOADER-COMMANDS">12.3.3.2.Loader 内建的命令</a></h3><p>这些是最常用的loader命令.对所有可用命令的解释请参见 <span class="CITEREFENTRY"><spanclass="REFENTRYTITLE">loader</span>(8)</span>.</p><div class="VARIABLELIST"><dl><dt>autoboot<var class="REPLACEABLE">seconds</var></dt><dd><p>在给定的时间内如果没有中断发生就引导内核.它显示一个倒数计时,默认的时间 范围是10秒.</p></dd><dt>boot [<span class="OPTIONAL"><var class="REPLACEABLE">-options</var></span>] [<spanclass="OPTIONAL"><var class="REPLACEABLE">kernelname</var></span>]</dt><dd><p>立即按照给定的选项(如果有的话)和内核名(如果是内核的)引导内核 .</p></dd><dt>boot-conf</dt><dd><p>基于变量对各种模块进行自动配置(和引导内核时发生的一样). 你只须记住要先使用 <ttclass="COMMAND">unload</tt>命令,然后修改一些 变量,比如 <ttclass="ENVAR">kernel</tt>.</p></dd><dt>help [<span class="OPTIONAL"><var class="REPLACEABLE">topic</var></span>]</dt><dd><p>显示从文件<tt class="FILENAME">/boot/loader.help</tt>读取的帮助信息.如果给定 的主题是<var class="LITERAL">index</var>,那么列出来的是所有可用的主题.</p></dd><dt>include <var class="REPLACEABLE">filename</var> ...</dt><dd><p>通过给定的文件名处理文件. 文件被读入,然后被一行一行地 解释.任何错误都会立即中止include命令.</p></dd><dt>load [<span class="OPTIONAL"><var class="OPTION">-t</var> <varclass="REPLACEABLE">type</var></span>] <var class="REPLACEABLE">filename</var></dt><dd><p>加载内核, 内核模块,或者是给定类型的文件(通过给定的文件名).任何在文件名后面的参数都会被传给文件.</p></dd><dt>ls [<span class="OPTIONAL"><var class="OPTION">-l</var></span>] [<spanclass="OPTIONAL"><var class="REPLACEABLE">path</var></span>]</dt><dd><p>显示给定路径或者是根目录(如果路径没有指定)下面的文件列表. 如果指定了 <varclass="OPTION">-l</var> 选项, 文件大小也会显示.</p></dd><dt>lsdev [<span class="OPTIONAL"><var class="OPTION">-v</var></span>]</dt><dd><p>列出所有可以加载模块的设备 如果指定了<var class="OPTION">-v</var>选项,会列印出更多的细节.</p></dd><dt>lsmod [<span class="OPTIONAL"><var class="OPTION">-v</var></span>]</dt><dd><p>显示已被加载的模块. 如果指明了 <var class="OPTION">-v</var> 选项,会显示更多的细节.</p></dd><dt>more <var class="REPLACEABLE">filename</var></dt><dd><p>显示指定的文件,每隔<var class="VARNAME">LINES</var> 停顿一次 .</p></dd><dt>reboot</dt><dd><p>立即重启系统.</p></dd><dt>set <var class="REPLACEABLE">variable</var>, set <varclass="REPLACEABLE">variable</var>=<var class="REPLACEABLE">value</var></dt><dd><p>设置loader的环境变量.</p></dd><dt>unload</dt><dd><p>移除所有已被加载的模块.</p></dd></dl></div></div><div class="SECT3"><h3 class="SECT3"><a id="BOOT-LOADER-EXAMPLES" name="BOOT-LOADER-EXAMPLES">12.3.3.3.Loader 示例</a></h3><p>这里有一些实际中loader用法的示例</p><ul><li><p>只是简单的引导默认内核,不同的是进入单用户模式:</p><pre class="SCREEN"><kbd class="USERINPUT">boot -s</kbd></pre></li><li><p>卸载默认内核和模块,然后加载旧的(或者其它)的内核:</p><pre class="SCREEN"><kbd class="USERINPUT">unload</kbd><kbd class="USERINPUT">load <var class="REPLACEABLE">kernel.old</var></kbd></pre><p>你可以使用被称为一般内核的<tt class="FILENAME">kernel.GENERIC</tt>,或者你以前安装的内核 <tt class="FILENAME">kernel.old</tt>(当你升级或配置了你自己的内核,etc.).</p><div class="NOTE"><blockquote class="NOTE"><p><b>注:</b> 使用以下命令加载常用的模块和另一个内核:</p><pre class="SCREEN"><kbd class="USERINPUT">unload</kbd><kbd class="USERINPUT">set kernel="<var class="REPLACEABLE">kernel.old</var>"</kbd><kbd class="USERINPUT">boot-conf</kbd></pre></blockquote></div></li><li><p>加载内核配置脚本 :</p><pre class="SCREEN"><kbd class="USERINPUT">load -t userconfig_script <varclass="REPLACEABLE">/boot/kernel.conf</var></kbd></pre></li></ul></div></div></div><div class="NAVFOOTER"><hr align="LEFT" width="100%" /><table summary="Footer navigation table" width="100%" border="0" cellpadding="0"cellspacing="0"><tr><td width="33%" align="left" valign="top"><a href="boot-introduction.html"accesskey="P">后退</a></td><td width="34%" align="center" valign="top"><a href="index.html"accesskey="H">起点</a></td><td width="33%" align="right" valign="top"><a href="boot-kernel.html"accesskey="N">前进</a></td></tr><tr><td width="33%" align="left" valign="top">引导问题</td><td width="34%" align="center" valign="top"><a href="boot.html"accesskey="U">上一级</a></td><td width="33%" align="right" valign="top">内核在引导时的交互</td></tr></table></div></body></html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -