摘 要:针对便携式移动办公的需求,提出了在USB 接口的移动存储设备上构建Linux 微型桌面操作系统的方法,分析了整个微型桌面系统的构成,并对构建过程中的内核编译、LFS、Squashfs、AUFS、Grub、Initrd、 XFCE等关键技术进行了研究,介绍了移植进USB 盘的方法、系统的启动过程和实现。本系统小型便捷、启动速度快、占用空间低、安全可靠的特点具有较高的应用价值。
1 引言
随着USB 3.0 标准的发布,存储容量为8GB 至128GB 的USB 接口移动存储设备成为主流。由于USB盘体积小、携带方便、同时具有热插拔功能,给移动数据存储带来了便利。而开源的Linux 操作系统具有的高可靠性和安全性、广泛的硬件支持、灵活实用的可定制性等特点,使得Linux 桌面系统在办公应用方面也逐步受到人们的青睐。如果在USB 接口的移动存储设备上实现一个Linux 微型桌面系统,将是一个不错选择。然而,将标准的Linux 发行版系统安装在USB盘上,将占用近2G 的存储空间,其中有许多软件我们移动办公并不需要。同时,人们从数据安全性角度的考虑,希望在不使用原有宿主机操作系统和数据的前提下进行便捷的移动办公。因此本文将从LFS 系统开始,在USB 盘上搭建Linux 微型桌面系统,实现操作系统与办公娱乐软件的一体化,并采用squashfs 文件系统压缩技术,对整个系统进行压缩,最后通过grub和initrd 实现系统的启动。
2 微型桌面系统的构成
本文是在LFS Live CD 6.3 宿主系统上,通过LFS技术构建基本Linux 系统后,使用chroot 命令转入基本系统,完成后续整个桌面系统的搭建。
基于USB 盘的微型桌面系统构成如图1 所示,由以下几部分组成的:
①启动引导管理器:选用Grub 0.97.Grub 程序是计算机加电启动,引导到USB 盘设备后运行的第一个程序,其目的是将Linux 内核从USB 盘加载到内核中。
然后转由内核执行后续操作。
②内核:作为Linux 操作系统的核心,它负责管理进程调度、内存管理、虚拟文件系统、网络接口、进程间通信,并提供对主板、显卡、网卡、声卡、存储器、USB 设备等驱动的支持。由于是移动系统,面临硬件平台多样性的问题,所以需要将一些常用基本驱动和USB 相关驱动编译进内核,而将squashfs、aufs、声卡、显卡等相关支持以模块的形式动态加载,这样在减少内核镜像大小的同时,提高了系统启动时间。
③基本Linux 系统:包括能够正常启动字符界面的基本文件系统结构、最常用的应用程序、基本函数库和相关的配置文件。
④图形桌面系统:桌面系统采用xfce4.6.2,并安装如下应用软件:永中office 2009 办公应用软件(集Word、Excel、PowerPoint 于一体);fcitx 中文输入法;MPlayer 媒体播放软件;网络配置工具软件;远程桌面连接控件软件;QQ;Vnc;实验室自主研发的播放浏览一体化的网络浏览器Hfox[2];其他软件:图片查看器、文本编辑器、PDF 阅读器、解压缩软件等。
图1 基于USB 接口的微型桌面Linux 系统的组成 整个微型桌面系统安装完成后要占用大约1.7GB磁盘空间,通过运行mksquashfs 命令压缩成只读系统镜像system.squashfs(约495MB)。
3 关键技术
3.1 内核编译
采用版本为2.6.27.27 的Linux 内核。为使系统更精简,部分模块将不会被编译进内核:声卡驱动模块等。系统将由U 盘引导,需要将SCSI 设备、Usbcore、Usb-storage 、Loopback device support 、RAM disksupport 和Initrd 等编译到内核中。
将Squshfs、AUFS 编译成模块,通过Initrd 引导加载。
常见的硬盘接口为IDE 和SATA,在Linux 中通常将这两类硬盘标识为不同的盘符名。为了避免内核挂载U 盘根系统出现盘符名不一致的情况,需要将IDE 和SATA 硬盘中盘符统一成/dev/sdX,在内核编译时需要加如下的选项:
编译出来的内核会将这两类硬盘同等对待。从而使不同接口硬盘的盘符名在Linux 中都统一为sdX,方便本系统的挂载。
3.2 LFS 构建系统
LFS(Linux From Scratch 的缩写),是从源代码开始搭建的Linux 系统。LFS 有以下几个优点:
①LFS 是非常灵活的,可以根据自身需求定制。
②构建的LFS 系统是一个非常紧凑的系统,可以大大节省磁盘空间。
③LFS 可自定义安装相关的安全补丁,系统有保障。
本文目的是设计一款微型桌面系统,根据其小巧灵活实用的特点,与使用标准的Linux 发行版和使用精简的Linux 系统相比,LFS 更适合。
3.3 SquashFS+LZMA 只读压缩系统
构建一个小型或嵌入式Linux 系统,存储设备(软盘、U 盘等)的空间资源非常有限,因此压缩应尽可能用在各个方面。
SquashFS 是一种在Linux 下使用的只读压缩文件系统,是目前最好的压缩文件系统之一,它的目的是为通用只读文件系统使用。目前,SquashFS 压缩文件系统应用很广,已在Linux Live CD 各发行版、嵌入式系统、以及在服务器及桌面系统中都有着大量的应用。
LZMA(Lempel-Ziv-Markov chain-Algorithm 的缩写),是一个Deflate和LZ77算法改良和优化后的压缩算法,是目前最好的压缩算法之一。
SquashFS 默认的压缩算法是GZIP,本文中采用给SquashFS 打补丁,使其支持LZMA 算法压缩。实验证明,通过LZMA 算法压缩比GZIP 算法压缩率更高,而压缩时间比GZIP 算法稍长。通过对整个系统采用GZIP 和LZMA 算法进行Squashfs 压缩,在压缩时间和存储空间的比较如表1 如示。
表1 两种压缩算法的比较。
目前Linux 内核还不支持LZMA,在编译内核时需要将CONFIG_SQUASHFS*中所有值置为N;再单独将带LZMA 支持的Squshfs 编译成模块,通过动态加载方式运行。 |