如何自己动手做一个迷你型Linux操作系统( 三 )


安排文件系统
大家已经看到,我们的 root 文件系统为了避免麻烦,用的是标准的 ext2 文件系统 。由于我们的硬盘空间很小,只有不到 16M,而且我们还要在上面放上 X Window,所以,如果我们全部用 ext2 的话,Flash 盘的有限空间会很快耗尽 。我们唯一的选择是采用一个适当的压缩文件系统 。考虑到 /usr 目录下面的内容在系统运行的时候,是不需要被改写的 。我们决定选择只读的压缩文件系统 cramfs 来容纳 /usr 目录下面的全部内容 。cramfs 是 Linus Torvalds 本人开发的一个适用于嵌入式系统的小文件系统 。由于它是只读的,所以,虽然它采取了 zlib 做压缩,但是它还是可以做到高效的随机读取 。既然 cramfs 不会影响系统读取文件的速度,又是一个高度压缩的文件系统,对于我们,它就是一个相当不错的选择了 。我们首先把 /usr 目录下的全部内容制成一个 cramfs 的 image 文件 。这可以用 mkcramfs 命令完成 。得到了这个 usr.img 文件之后,我们还要考虑怎样才能在系统运行的时候,把这个 image 文件 mount 上来,成为一个可用的文件系统 。由于这个 image 文件不是一个通常意义上的 block 设备,我们必须采用 loopback 设备来完成这一任务 。具体说来,就是在前面提到的 /etc/init.d/rcS 脚本的前面部分,加上一行 mount 命令: mount -o loop -t cramfs /usr.img /usr这样,就可以经由 loopback 设备,把 usr.img 这个 cramfs 的 image 文件 mount 到 /usr 目录上去了 。哦,对了,由于要用到 loopback 设备,读者朋友们在编译内核的时候,别忘了加入内核对这个设备的支持 。对于系统今后的运行来说,这个 mount 的效果是透明的 。cramfs 的压缩效率一般都能达到将近 50%,而我们的系统上绝大部分的内容是位于 /usr 目录下面,这样一来,原本可能要用到 18M 的 Flash 盘,现在可能只需要 11M 就可以了 。一个 14M 的 /usr 目录,给压缩成了仅仅 7M 。上面考虑了压缩问题,下面还要考虑到,Flash 盘毕竟不像普通硬盘,多次的擦写毕竟不太好,所以我们考虑,在需要多次擦写的地方,使用内存来做 。这个任务,我们考虑用 tmpfs 来完成 。至于 tmpfs 和经典的 ramdisk 的比较,我们这里就不多说了 。一般说来,tmpfs 更加灵活一些,tmpfs 的大小不像 ramdisk,可以顺着用户的需要增长或者缩小 。我们选择把 /tmp、/var 等几个目录做成 tmpfs 。这只需要我们在 /etc/fstab 里面加上两行类似下面的文字就可以了: none /var tmpfs default 0 0然后别忘了在 /etc/init.d/rcS 里面靠近开头的地方,加上 mount -a 。这样,就可以把 /etc/fstab 里面指定的所有的文件系统都 mount 上来了 。
X Window 进行到这里,读者朋友们可能会以为,X Window 的安装可能会很复杂 。其实不然,由于我们上面的架子搭好了,X Window 的安装非常简单,只需要把几个关键的程序拷贝过来就可以了 。一般说来,只需要 /usr/X11R6 目录下面的 bin 和 lib 两个目录 。然后,根据用户各自的需要,还可以做大幅的裁减 。比如,如果你的局域网上有一个开放的 xfs 字体服务器的话,你可以把所有本地的字体都删掉,而使用远端的字体服务器 。如果只需要运行有限的程序,别忘了把没有用的 library 都删掉 。此外,还可以把多余的 X Window 的 driver 都删掉,只保留本机的显示卡所需要的 driver 就可以了 。当然,这一关免不了要做多次测试 。其它技巧 如果你的工作系统式在另外一台机器上,通过局域网和本机互联的话,ssh 是一个不错的工具 。此外,ssh 中带的 scp 用起来和普通的 cp 拷贝程序差不多,非常方便 。用 ssh 和 scp 来共享文件,远程试验,你就可以不需要在办公室里跑来跑去的了 。

推荐阅读