前言
一直期待PortableApps的Portable Linux,可是到现在还没出来,等得真是急啊!呵呵,不过,在一个偶然的机会使我萌发了自己动手,在USB key装个Linux的想法。说干就干!于是,我就Google了一下,发现资料还不少,这使我的信心和干劲更足了。结果真还成功了,感觉整个过程值得总结一下,于是萌发了写这篇文章的冲动。可能你们看到这里已经想打人了,好了,废话少说,进入正题:
思路
我的思路就是用Linux 引导程序和Linux LiveCD,这也是网络上的主流思路。也有把Linux 直接装到移动因盘的,但这种解决方案非常复杂,要解决的问题很多。如硬件检测的问题,某些文件读写过多导致USB keys过早老化等问题。由于自己只有一个128M的U盘,所以还无法实验这种解决方案。如果你愿意送我一个256M或以上的U盘(移动硬盘更好),请给我发邮件,我愿意试试这种解决方案!
Linux Bootloader
网络上大多是用Syslinux。现在大多数发行版都是用GRUB,这里我也用GRUB。
Linux LiveCD
Google一下发现,可以用在 USB keys上的LiveCD还真多。我这里以FeatherLinux为例,其他还有很多,可以自由选择,我在后面会有个简单的介绍和比较。
操作系统
最好在Linux下操作。没有,只有Windows?建议刻录一张Linux LiveCD(如Ubuntu LiveCD),或者下载下来后VM一下也可以。这也嫌麻烦,那你可以去装个GRUB For Windows,不过我没试过,但应该可行。我这里以Ubuntu为例。
USB Key
最少也要64M,但可用的发行版不多。我用的是128M,256M有更好。1G?你可以直接把Knoppix LiveCD放到USB Key上了。你想装在移动硬盘上的话,用Knoppix LiveDVD,应该对你的容量没什么影响。
开始改造
在Ubuntu下,以GRUB + FeatherLinux解决方案为例:
1. 将你的U盘格式化为一个分区(如果你的U盘还要在windows上使用的话,那就用windows格式化吧,Linux可以读 windows的分区),我是在windows里做的;
2. 挂载USB key(需要的话);
3. 将下载好的FeatherLinux的USB 版.zip文件解压到U盘的根目录,我是在windows里做的;
4. 在U盘根目录中建立boot文件夹,再在boot文件夹中建立grub文件夹,我是在Linux里做的;
5. 将根目录下的/boot/grub/*拷贝到U盘中的boot/grub/目录中,我是在Linux里做的;
6. 进入GRUB,改写MBR。在这之前,你需要确定你U盘的位置:
1. 进入GRUB:
$ sudo grub
2. 找到U盘的路径:
grub> find /boot/grub/stage1
可能会有这样的结果:
(hd0,0)
(hd2,0)
这样就可以知道你的U盘路径是什么了。如果还不敢确定,在find一个U盘里有而根目录里没有的文件:
grub> find /KNOPPIX/KNOPPIX
结果出来了:
(hd2,0)
3. 现在可以放心地改写U盘的MBR了:
grub> root (hd2,0)
grub> setup (hd2)
4. 可以退出GRUB了:
grub> quit
7. 好了,你的U盘可以引导了。为了方便地进入FeatherLinux,还要改动U盘里的boot/grub/menu.lst文件,这个是我的:
default 0
root (hd0,0)
timeout 10
hiddenmenu
title Feather Linux – Normal
kernel /linux24 ramdisk_size=100000 init=/etc/init lang=us apm=power-off vga=791 nomce quiet BOOT_IMAGE=knoppix
initrd /minirt24.gz
title Feather Linux – Text
kernel /linux24 ramdisk_size=100000 init=/etc/init lang=us apm=power-off vga=normal nomce quiet BOOT_IMAGE=knoppix
initrd /minirt24.gz
title Feather Linux – 800*600
kernel /linux24 ramdisk_size=100000 init=/etc/init lang=us apm=power-off vga=788 xmodule=fbdev initrd=minirt24.gz nomce quiet BOOT_IMAGE=knoppix
initrd /minirt24.gz
title What’s this? It’s not what I want!
makeactive
chainloader +1
大功告成!重启系统,进入BIOS,更改启动选项,将USB-HDD(不一定是这个也可能是USB-ZIP什么的,自己试试)设为第一个。保存重启,看到了什么?是不是一个小企鹅和彩色的文字,哈哈,你成功了!
FAQ
1. 为什么要把U盘分为一个区?
网上有人说把GRUB和LiveCD 单独分区后,在windows系统中会出现不认盘,需要格式化的情况。为避免这种情况(并非绝对),还是建议分一个区就好了。
2. FeatherLinux的.zip包解压后一定要放在根目录吗?这样U盘一开,现得太乱了,我能放在一个文件夹里,如 boot/feather/里吗?
我一开始也是这样,但我没成功。这让我想起以前在windows里安装GRUB,然后下载 Knoppix的iso 文件,从硬盘进入LiveCD的情景。当时也是这样,.iso文件一定要放在某个分区的根目录,不然就说找不到文件。但网上也有说可以放到目录里的,你可以自己试试。
3. 从U盘启动后,我看到了可以的小企鹅和彩色的文字,但是好象有错误,进不了Linux,为什么?
你成功一半了,看到企鹅,说明你最少可以从U盘引导啦,进不了系统,可能是因为你的路径设置错误了,检查一下U盘的boot/grub/menu.lst 文件。
4. 什么?!在U盘上装Linux?这样会不会让U盘提早报废?
这个我也不知道。但是,如果你用的不是LiveCD,而是直接安装一个Linux系统到U盘或移动硬盘,那你的U盘/移动硬盘肯定会提早报废!因为系统里有很多日志文件,缓存文件,不断地读写会让你的U盘/移动硬盘提早报废的,因为他们没有硬盘那么结实!如果你真想把Linux安装在U盘/移动硬盘,那你得有把这些”害人”的文件找出来并”解决掉”的能力。相对来说, LiveCD就要好很多了。有些LiveCD更有启动后把整个LiveCD拷贝到内存的选项,这样又快,而且减少了对U盘的读取。至于到底会不会让U盘报废,影响有多大?这个问题使我想起了对原来BitTorrent出来的时候,大家都说BT伤硬盘,可是,现在呢?BT还是风行。这说明了什么?说明了东西是拿来用的,你要怕提早报废,那就用把它真空包装起来好了。
5. 我可以建立SWAP吗?
可以,但不要建立在U盘上,到硬盘上建吧。为什么?USB keys可经不起你这么折腾!
6. FeatherLinux系统里的VIM怎么好象有bug啊?!
我在窗口模式下用着有bug,主要是在编辑模式下,按下控制键和光标键都会出来一些乱码,删除字符后,显示也有问题。好象是终端模拟器的问题,因为它也有同样的问题。
7. 只能用FeatherLinux吗?还有其他在U盘上可用的LiveCD吗?
当然,开源总是有很多选择。这里只介绍几个我认为值得推荐的。
PuppyLinux: 这是一个非Knoppix的LiveCD,还不错,本来想用装这个的。
DamnSmallLinux: 这个看名字就知道,很小。另外,你还可以下载下来后,直接用它自带的QEMU在windows 看看效果。
Slax: 很漂亮,真的很漂亮,如果你的U盘有256M的话,甚至可以运行KDE。
8. 中文问题
很遗憾,上面的系统都不支持中文,甚至是显示!提供中文支持可能已经超出了我的能力范围,还得看大家了。这里只是介绍一个在USB keys上运行Linux的方法,其他的不在讨论范围。如果我解决了中文问题,会在另一篇文章里介绍的。