制作U盘Linux

来源:互联网 发布:淘宝卖水果利润怎么样 编辑:程序博客网 时间:2024/05/16 00:43
    最近打算制作一个U盘上的Linux,主要是想在学习Linux的过程中,借此来更进一步熟悉linux的结构和工作原理,另外,最近在测试工作中也确实需要一个基于U盘的Linux,比如有时候捕获网络封包,修复GRUB,使用ipmitool等,如果每次都重装系统,确实需要浪费不少的时间。本来已经有不少已经做得很好的映像可以下载,不过,还是遵照自己的习惯,自己动手,既能完全按照自己的要求打造,又能学到不少东西。

    对这个U盘Linux,目前的要求如下:
    1。大小尽量控制在128M内,以便能装进大多数U盘里面。
    2。要具备常用的一些工具,如tcpdump,ipmitool。暂时就想到这么些,因为主要是为使用ipmitool才有制作它的想法。其他的,今后有需要随时加就可以了。
    3。可以不需要图形系统,使用基于vesa的framebuffer console,时字体尽量看起来舒服些。
    3。尽量支持一些常见的网卡和sata、ide驱动。

    我打算的制作步骤如下:首先,不打算直接在U盘上制作根文件系统,按照我目前对Linux的了解,制作其根文件系统肯定是一个反复尝试的过程。如果直接在U盘上制作,势必会反复将U盘插到“主系统”(指用来制作这个U盘Linux的系统,下同)上拷贝文件,然后再插到测试机器上做启动测试,我很怀疑在这个Linux做完前,U盘或USB接口还是不是好的。另外,反复的拔来拔去,我也会受不了啊。

    我的打算是,用syslinux将U盘做成启动盘,然后将编译好的内核拷的U盘上,给内核传递参数,使其通过nfs挂载主系统的文件夹做为根文件系统,这样在主系统上就可以直接修改根文件系统,U盘一直可以插在被测机器上不用拿出来。还有一个办法就是连U盘都不用,直接将测试机用pxe的方式启动,不过这样要在主系统上安装dhcp和tftp服务,还是用个U盘来得简单。

    在主机上通过nfs输出目录的方法简单说一下,先在/home/foxhu下新建一个目录ulinux作为工程根目录,再在ulinux下建一个目录rootfs作为U盘linux的根目录,然后修改/etc/exports,添加下面一行:
    /home/foxhu/ulinux/rootfs *(rw,sync,no_root_squash)
    再启动portmap和nfs两个服务就可以了。

    这里顺便提一下,我主系统用的版本是SUSE Linux Enterprise Desktop 10,不过对于制作这个U盘Linux来说,主系统的版本并不是很重要。

    接下来,就要编译一个内核了,我的打算是,先编译一个内核,专门用来制作根文件系统,也就是说这个内核不是最后用的,只是用来制作跟文件系统,主要原因是内核编译的一些选项目前还不能确定,比如要支持哪些驱动等,要到今后慢慢完善。这个内核可以编译的很简洁,基本上只要支持rootfs on nfs就可以了,不过我还是选了一些其他的东西,像vesa framebuffer console,不过一定要把测试机的网卡选上,因为一会要用它来挂载nfs根文件系统。还有就是这些选项都要直接编译进内核,不要编译成模块。

    内核编译完成了,就可以准备将其拷贝到U盘上了,不过先要用syslinux将U盘制作成启动盘,我使用的方法是先用fdisk给U盘分一个区,格式化为fat32,然后用syslinux /dev/sda1就可以将syslinux的文件拷贝到这个分区上,这个时候如果从U盘启动系统,应该能够看到syslinux的提示信息和boot提示符,表示syslinux安装正常,如果不行的话,可以看看syslinux的文档或到网上找一下,这一步就不说了,没有多少问题。
 
    将刚才编译的内核拷到U盘上刚才做的分区里面,注意这个目录里面应该有ldlinux.sys文件,这是刚才安装syslinux生成的。为了让syslinux能够在启动后自动载入内核,还要给syslinux写一个配置文件,配置文件一定要命名为syslinux.cfg,里面只要有一行就可以:
default bzImage ip=172.18.130.253:172.18.130.82:172.18.130.2:255.255.255.0:client:eth0:off nfsroot=172.18.130.82:/home/foxhu/ulinux/rootfs root=/dev/nfs rw vga=0x317

其中ip参数指定ip地址信息,格式为:

client-ip:server-ip:gateway:netmask:hostname:device:autoconf
这个可以参考linux内核Documentation/nfsroot.txt。
nfsroot指定从哪个系统上挂载根文件系统,root指定使用nfs作为根文件系统,rw表示以读写方式挂载,vga=0x317用来设置显示模式。

   一切准备就绪后,可以启动测试机试一下,应该可以看到内核启动的信息,如果没有,则检查syslinux的设置。在内核启动完成后,会通过nfs挂载根文件系统,可以观察内核输出信息的最后有没有"mounted nfs root"等字样,还是不停的尝试挂载动作。如果是后者,则需要检查一下给内核传递的参数是不是正常,以及主系统上的nfs server是不是正常,必要时可以在主系统上用tcpdump看下网络的情况。如果内核能够正常挂载nfs rootfs的话,就可以告一段落了,下面就是制作根文件系统了。当然,这次启动成功挂载nfs rootfs后,内核还是会立马panic,因为根文件系统上什么都还没有,包括最开始的init程序。这在下一步再说,先休息一下......
原创粉丝点击