3.2. 设计

再次查看 Bootdisk-HOWTO,并留意有多少实用程序可以被压缩到 1.44M 软盘中。 有三个因素使这成为可能。 一是使用共享库。 第二是精简二进制文件。 第三是使用压缩文件系统。 我们可以使用所有这些技术来节省根磁盘空间。

3.2.1. 共享库

首先,为了使用共享库,我们需要重新构建 BASH shell。 这次我们将配置它,而不使用--enable-static-link选项。 一旦 BASH 重建完成,我们需要弄清楚它链接了哪些库,并确保将它们包含在根磁盘上。ldd 命令使这项工作变得容易。 通过在命令行中键入 ldd bash,我们可以看到 BASH 使用的所有共享库的列表。 只要将所有这些库复制到根磁盘,新的 BASH 构建就应该可以正常工作。

3.2.2. 精简二进制文件

接下来,我们应该精简任何复制到根磁盘的二进制文件。strip 的手册页没有对它的作用给出太多描述,只是说“strip 丢弃目标文件中的所有符号。” 移除二进制文件的一部分似乎会使其失效,但事实并非如此。 它之所以有效,是因为大量丢弃的符号用于调试。 虽然调试符号对于致力于改进代码的程序员非常有帮助,但除了占用更多磁盘空间外,它们对普通最终用户没有太大作用。 由于空间非常宝贵,我们绝对应该在将 BASH 和任何其他二进制文件复制到内存盘之前,尽可能多地移除它们的符号。

精简文件以节省空间的过程也适用于共享库文件。 但是在精简库时,重要的是使用--strip-unneeded选项,以免损坏它们。 使用--strip-unneeded会缩小文件大小,但会保留重定位所需的符号,这是共享库正常运行所必需的。

3.2.3. 压缩根文件系统

最后,我们可以解决如何构建压缩根文件系统的问题。 Bootdisk-HOWTO 提出了三种构建压缩根文件系统的方法,即使用内存盘、备用硬盘分区或回环设备。 本项目将专注于使用内存盘方法。 如果根文件系统要从内存盘运行,那么在内存盘上构建它似乎是合乎逻辑的。 我们要做的就是在内存盘设备上创建第二个扩展文件系统,挂载它并将文件复制到其中。 一旦文件系统中填充了根磁盘所需的所有文件,我们只需卸载它,压缩它并将其写入到软盘。

Note

为了使这项工作能够进行,我们需要确保用于构建的系统具有内存盘支持。 如果内存盘不可用,也可以使用回环设备。 有关使用回环设备的更多信息,请参阅 Bootdisk-HOWTO。