【问题标题】:Optimizing an embedded linux system's root file system size优化嵌入式 linux 系统的根文件系统大小
【发布时间】:2012-05-17 16:58:30
【问题描述】:

我正在开发一个在 linux 上运行的嵌入式系统。为了减少产品的启动时间(它是一个 IP 网络摄像机),我想减少根文件系统的大小。我已经有一个功能性的根文件系统,目前正在手动删除部分并查看根文件系统是否会挂载。是否有比当前试错法更合乎逻辑的方法来减小文件系统大小更新了更多详细信息:目标上使用的原始文件系统是我们组织中跨多个嵌入式产品使用的通用文件系统.我想将文件系统精简到运行我的特定产品(即 IPNetCam)所需的最低限度。我想知道是否有任何分析方法可以确定启动和运行特定应用程序所需的确切文件集。

【问题讨论】:

  • 文件系统大小可能不是影响启动时间的主要因素。此外,检查挂载文件系统的能力并不能说明您是否拥有运行系统所需程序所需的组件。需要注意的主要问题是您的发行版是否打包了您不需要的大量库、各种额外的守护程序(您可能有一个您不知道的 ssh 或 Web 服务器),或者更糟糕的是,测试/演示程序。诸如busybox之类的东西通常具有可以包含/删除各种功能的配置。
  • @ChrisStratton 嵌入式系统是固定功能(IP 网络摄像头),所以如果我能够安装 rfs 并运行设备应该没问题。最终用户一旦部署就不会修改它。我正在寻找您提到的要删除的内容。我想知道是否有一种结构化的方式,我可以只选择根文件系统所需的最低限度
  • @ChrisStratton 文件系统将在 NAND 中闪存,复制到 RAM 并安装在设备中。因此,通过减少根文件系统的总大小,我们可以减少设备启动所需的时间(启动时间是指内核启动、应用程序开始运行并且 IPNetcam 可以使用)
  • @Badria - 除非您的 NAND 接口非常慢,否则与其他启动时间来源相比,这可能不是很长的时间。
  • 我对“当前手动删除部分并查看根文件系统是否会挂载”部分有点困惑。您是说您正在切断文件系统映像末尾的部分内容以缩小它吗?这不是一个好主意,它可能会导致静默损坏(“mount”可能不会检测到任何错误)。为此,您需要使用工具来缩小文件系统。对于 ext2/3/4,这描述了如何:microhowto.info/howto/…

标签: linux filesystems embedded


【解决方案1】:

如果您还没有这样做,您应该使用压缩文件系统,例如SquashFS。这将大大减少启动映像的占用空间。

【讨论】:

    【解决方案2】:

    列出您的操作系统及其应用程序使用的文件的一种方法是:

    • 打开文件系统上的 atime 标志(如果尚未设置)
    • 重启
    • 在您的应用程序运行足够长的时间后,使用 atime 查看上次启动后访问了哪些文件:

    # last reboot | head -1
    reboot   system boot  2.6.35-30-generi Sun May 20 10:08 - 10:48  (00:40)
    # touch -d "2012-05-20 10:07" /tmp/ref
    # find / -xdev -anewer /tmp/ref > /tmp/usedFiles
    

    当然,此方法会忽略在您的示例运行中未访问但在不常见或特殊情况下仍然需要的文件。当文件系统以只读模式访问时,您还需要在早期阶段添加引导加载程序或操作系统直接读取的文件。

    【讨论】:

    • 另外,无需生成辅助进程(在本例中为head)。你可以简单地运行:last reboot -1
    • last -1 reboot 仍会输出两行额外的行,因此我更喜欢将我感兴趣的唯一一行保留为 head -1
    猜你喜欢
    • 1970-01-01
    • 2011-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多