查看“Diskless Booting”的源代码
←
Diskless Booting
跳到导航
跳到搜索
因为以下原因,您没有权限编辑本页:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
“Diskless Booting无盘引导” 是通过网络引导的同义词。 操作系统的内核及其模块是从网络计算机下载的。 这对于Bochs模拟器太慢或必须使用软盘的大型项目非常有用,并且在某些公司环境中用于启用集中式操作系统更新。 为了通过网络启动内核,你需要一个DHCP服务器,一个TFTP服务器以及在另一台计算机上充当客户端的程序。 == GRUB Legacy方式 == 首先,你必须创建一个配置为支持网络的 [[GRUB Legacy]] 软盘。 你可以下载 [[GRUB Legacy]] 的当前源代码版本,并 <tt>./configure</tt> 支持你的网卡。 尽管这是最简单的方法,但GRUB Legacy似乎并不支持所有的网卡。 == PXELINUX方式 == 编译syslinux; 将创建一个 <tt>pxelinux.0</tt> 文件。 它是一个简单的通过tftp引导加载程序的PXE二进制文件,可以由客户端计算机 (而不是带有TFTP服务器的计算机) 引导。 相应地设置DHCP和TFTP以便文件启动后,你可以使用pxelinux加载syslinux附带的 “memdisk”。 此文件使用<tt>memdisk initrd=grub.ima</tt>语法加载,这将导致pxelinux通过TFTP加载memdisk和grub.ima。 Memdisk将拦截中断0x13,并以这种方式引导磁盘映像。 (但是,似乎并非所有 [[GRUB Legacy]] 磁盘映像希望都通过bios访问软盘。 如果你有这样的映像,你在这里就被卡住了。) 你应该获得一个 <tt>pxelinux.0</tt> 文件,该文件可以通过例如etherboot的方式加载。 许多现代计算机允许从NIC启动,因此你只需要启动TFTP和DHCP服务器。 此时,你可以对grub.ima磁盘映像进行更改,并在此处放置 [[GRUB Legacy]] 配置文件和内核的二进制文件。 例如,在linux下尝试 <tt>mount /tftpboot/grub.ima /mnt/fpy -o loop</tt>。 == gPXE + GRUB方式 == [[GRUB]] 从版本2可以在 [http://www.etherboot.org/wiki/start gPXE] 的网络上piggy-back,不像GRUB Legacy不支持更新的网卡。 gPXE项目是当前维护的一个开源免费网络引导加载程序。 从他们的网站上获取gPXE ISO,磁盘或USB磁盘映像很容易,但是你需要做一些额外工作才能使GRUB成功加载。 gPXE支持多引导,但是如果它检测到多引导映像,则它将不提供PXE服务。 不幸的是,它将你生成的GRUB映像检测为multiboot,而我发现解决此问题的唯一方法是在没有multiboot支持的情况下重新编译gPXE。 重新编译gPXE很容易: 解压缩,<tt>cd src; make</tt>。 在此之前,你将需要编辑 <tt>src/config/defaults/pcbios.h</tt> 并注释掉预定义 <tt>IMAGE_MULTIBOOT</tt> 的代码行。 编译后,你应该得到 <tt>bin/gpxe.{dsk,iso,usb}</tt>,你可以将其写入磁盘或CD。 要创建GRUB PXE可引导映像,可以按照 [http://www.gnu.org/software/grub/manual/grub.html#Network GRUB手册的网络章节] 中的建议进行操作。 <tt>grub-mkimage</tt> 的几个选项在过去的版本中不存在,如果不支持,则需要升级。 如果从源代码编译,则可以在源目录中获取所需的所有 <tt>*.{lst,mod,img}</tt> 文件。 如果你编译自己的GRUB,则不需要安装它,只需执行以下命令: <source lang="text"> ./grub-mkimage -d . --format=i386-pc --output=core.img --prefix="(pxe)/boot/grub" pxe pxecmd cat pxeboot.img core.img > grub2pxe </source> 你需要做的最后一件事是设置一个DHCP/BOOTP/TFTP服务器。 我使用了 <tt>dnsmasq</tt>,它预先安装在我的工作站上,并且似乎在发行版中广泛可用。 可以轻松地在命令行或 <tt>/etc/dnsmasq.conf</tt> 中进行配置,该命令行使用与长格式命令行选项相同的语法,但没有前导破折号。 你将需要以下选项: <source lang="text"> interface=... # 注意dhcp服务器运行在什么接口上! bind-interfaces # *真的* 只绑定该接口 dhcp-range=a.b.c.d,e.f.g.h # 无论你的专用网络使用什么 dhcp-boot=boot/grub/grub2pxe # 告诉机器启动grub dhcp-no-override # gpxe需要的某种工作环境 enable-tftp tftp-root=/tftp # 或任何方式 </source> 还有其他选择可以探索。 现在,请确保从GRUB源中获取 <tt>grub2pxe,*.lst,*.mod</tt>,并将它们放入 <tt>/tftp/boot/grub</tt> 或等效项中。 也把你的 <tt>grub.cfg</tt> 文件放在那里。 格式相当简单。 这是我使用的关键代码: <source lang="text"> set timeout=0 set default=0 menuentry "MY OS" { set root=(pxe) multiboot /kernel module /shell module /test } </source> 确保你的内核和模块出现在tftp根目录中,并且你应该设置为通过工作站之间连接的专用网络连接使用gPXE介质引导。 == 自制直接方式 == {{Main|PXE}} 上面的两个选项都涉及使用别人的代码来完成繁琐的工作,在某些情况下可能是不希望这么做 - 许可证冲突,技术问题 (例如,对于 “memdisk”,中断0x13钩子拦截在受保护模式下无法工作) 以及可能出于个人自豪感。 幸运的是,编写自己的PXE引导代码并不像听起来那么困难。 乍一看,PXE规范看起来相当令人生畏,但是其中大部分与BIOS和网卡有关,可以放心地忽略。 重要的部分是在第3章,PXE API。 PXE API能够在本机和其他几台电脑之间进行原始UDP连接,在这里首先,你可能只想使用TFTP来读取文件。 == 另见 == === 外部链接 === *[http://osdev.berlios.de/netboot.html Tutorial on network booting] *[http://home.dei.polimi.it/fornacia/progetto_minazzi/index.html#HOW%20TO%20INSTALL%20A%20TFTP%20SERVER Setting up a TFTP server] *[http://tftpd32.jounin.net/ TFTP32 server] *[http://download.intel.com/design/archives/wfm/downloads/pxespec.pdf PXE Specification] [[Category:Bootloaders]]
本页使用的模板:
模板:Main
(
查看源代码
)
返回至“
Diskless Booting
”。
导航菜单
个人工具
登录
命名空间
页面
讨论
变体
已展开
已折叠
查看
阅读
查看源代码
查看历史
更多
已展开
已折叠
搜索
导航
首页
最近更改
随机页面
MediaWiki帮助
工具
链入页面
相关更改
特殊页面
页面信息