|
很早就有这样的想法,也学习了sir论坛savagePig兄的帖子“最简单的制作从USB启动的系统的方法”,获益良多,但发现用某些版本的内核时
,在有sata硬盘的机子上,会把移动硬盘认成sdb,而没有sata硬盘时就会认成sda,这样在不同的机子上有可能需要修改GRUB菜单中的
“root=/dev/sd**”项才能启动;另外为了应对不同的显卡,要用VESA驱动,不但性能低(看片不大爽),而且在某些显卡上(如i810)只能
用640*480的分辨率,这样一来还得手动修改显卡配置文件。不是很完美。
于是想到live cd能很好地识别硬件,能否利用一下呢?苦于不知如何下手。这时无意中看到了ubuntu中文论坛上gnix_oag兄的帖子,受到启发
,便拿dubuntu来试验,从中学习了gnix_oag兄和lvjinhua兄的脚本,几经摸索,终于感觉比较成熟了,拿出来请sir坛高人们指教(不是故作
谦虚,我可不谦虚,只是sir坛上的高人实在太多了,怕怕……呵呵)。
(本文适合有一定linux经验,熟悉系统安装、grub使用的朋友)
第一步:把dubuntu安装到移动硬盘上
1.到www.dubuntu.com下载dubuntu的 ... -livecd-i386.iso。
2.光盘里有个hd_boot-686文件夹,按照里面的readme说明,可以把iso从硬盘直接引导起来,不用刻盘。
3.引导起来后,运行桌面上的“DUBUNTU简易安装程序”,按照提示安装到移动硬盘(假设安装到第一分区,下文均按此假设来描述;当然也可
以先安装到本地硬盘上,等做好设置后再拷到移动硬盘上)。
第二步:修改initrd文件
这里是关键了。我们知道此时系统的grub菜单里会有类似下面的内容:
- title dubuntu
- root (hd*,0)
- kernel /boot/vmlinuz-2.6.15-23-686 root=/dev/sda1 ro splash
- initrd /boot/initrd.img-2.6.15-23-686
复制代码
也就是说grub通过initrd.img-2.6.15-23-686把系统引导起来(原理参看 “ LinuxSir.Org > Linux 综合讨论区 —— LinuxSir.Org > Linux
基础建设讨论专版 > initrd 有什麼用?[附原理详解] ”)。
其实这个initrd.img-2.6.15-23-686文件里包含有3种启动方式:live cd启动方式、本地启动、网络启动。启动时选用哪一种,是由grub菜单
和initrd.img-2.6.15-23-686里面的脚本来控制的。上面的写法就是指定了由本地启动。而我们的目的是要用live cd方式启动,这样就可以检
测硬件;不过以live cd方式启动后,对系统所作的设置是无法保存的,重启后又恢复了最初的样子,所以我们要对initrd.img-2.6.15-23-686
作些修改。
启动到刚才装好的系统里(在其它合适的系统里操作也可以,而我自己是在dubuntu里做的,所以就这样来描述了),将/boot/initrd.img-
2.6.15-23-686复制一份到桌面,改名为initrd.img-2.6.15-23-686.gz,双击,将会自动由解压软件打开,里面是一个cpio格式的包文件,将
它解压缩到某文件夹如:/home/dubuntu/123。
打开终端,进入该目录 cd /home/dubuntu/123 ,运行命令 cpio -iF initrd.img-2.6.15-23-686,解出包里的内容;打开/home/dubuntu/123
文件夹,删除initrd.img-2.6.15-23-686,并修改以下文件:
1. ……/123/scripts/casper 的内容换成如下:
2. ……123/lib/casper/shutdown 后面一部分内容注释掉或删除
- #eject -p -m /cdrom >/dev/null 2>&1
- # XXX - i18n
- #echo -n "Please remove the disc, close the tray (if any) and press ENTER: "
- #if [ -x /sbin/usplash_write ]; then
- # /sbin/usplash_write "TIMEOUT 0"
- # /sbin/usplash_write "TEXT Please remove the disc, close the tray (if any)"
- # /sbin/usplash_write "TEXT and press ENTER to continue"
- #fi
- #read x < /dev/console
- exit 0
复制代码
注意最后一句 exit 0 得留着!
3. 删除 ……123/scripts/casper-bottom 中无用的脚本,改12fstab
这里的脚本就是用来检测、配置硬件的,经试验,留下8个即可:
12fstab 20xconfig 23networking 31disable_update_notifier
13swap 22gnome_panel_data 30accessibility 32disable_hibernation
为了完美起见,12fstab最后部分可以改一下,不改好像问题也不大
- cat > $FSTAB <<EOF
- # unionfs / unionfs rw 0 0
- $rootdev / $(get_fstype "${rootdev}") rw 0 0
- tmpfs /tmp tmpfs nosuid,nodev 0 0
- EOF
- rm -f /root/etc/rcS.d/S10checkroot.sh
- log_end_msg
复制代码
OK!这样就改好了,可以攒起来了。还是打开终端进入 /home/dubuntu/123 目录,运行命令
find . | cpio -L -o -H newc | gzip -9 > ../initrd.686m.gz
等命令执行完,在/home/dubuntu 文件夹里就会出现我们需要的 initrd.686m.gz 文件! 把它拷到 /boot 里备用。
第三布:修改GRUB菜单
以移动硬盘第一分区作为root,把grub安装到移动硬盘上;然后修改grub菜单 /boot/grub/menu.lst ,加上如下内容:
- title Dubuntu 686m
- kernel (hd0,0)/boot/vmlinuz-2.6.15-23-686 boot=casper ramdisk_size=1048576 root=/dev/ram rw splash
- initrd (hd0,0)/boot/initrd.686m.gz
复制代码
启动到grub菜单时选它就行。
OK!搞定了!洪哥我们动手吧!NO NO,别性急,千万别忘了最后一步──
第四步:创建记号文件
在移动硬盘第一分区──也就是系统所在的分区──的根目录下创建一个文件,命名为 .mobile_system ,用它来标记系统所在的分区。
现在完工了!重启电脑进入BIOS设为从移动硬盘启动,试试能行不? |
|