Ubuntu 22.04树莓派环境下/var/cache/fontconfig在/var分区挂载前被创建的问题咨询
嗨,我来帮你捋捋这个问题~ 你遇到的情况其实挺典型的——Ubuntu用的systemd启动流程里,根分区挂载后,有些基础服务会抢在/var分区挂载之前就往/var目录里写东西,尤其是字体缓存相关的操作。毕竟系统初始化时得加载字体配置,这就触发了fontconfig生成缓存的命令,刚好赶在/var分区挂载前,就把缓存目录写到根分区的/var挂载点里了。
下面给你几个实用的解决思路:
方法一:给fstab加参数强制挂载顺序
直接在/etc/fstab里给/var的分区条目加几个systemd专属参数,让系统必须先挂载好/var,再启动那些可能写/var的服务。比如把你的/var条目改成这样(记得替换成自己的分区路径和格式):
/dev/sdaX /var ext4 defaults,x-systemd.before=systemd-tmpfiles-setup.service,fontconfig.service 0 2
这里的x-systemd.before就是告诉systemd:“先把/var挂上,再启动systemd-tmpfiles-setup(负责创建系统临时目录的服务)和fontconfig服务”,从源头把写入操作挡在后面。
方法二:自定义systemd挂载单元(更精准可控)
如果fstab的参数不够灵活,你可以手动写个systemd的挂载单元,把/var的挂载时机卡得死死的:
- 新建一个
/etc/systemd/system/var.mount文件,内容如下(替换成自己的分区信息):
[Unit] Description=挂载独立的/var分区 # 明确要求在这些服务启动前完成挂载 Before=systemd-tmpfiles-setup.service fontconfig.service systemd-logind.service DefaultDependencies=no Conflicts=umount.target After=local-fs-pre.target [Mount] What=/dev/sdaX # 你的/var分区设备名,比如/dev/sda3 Where=/var Type=ext4 # 你的分区文件系统格式,比如ext4、btrfs Options=defaults # 你的挂载参数,比如defaults,noatime [Install] WantedBy=local-fs.target
- 启用这个挂载单元:
sudo systemctl enable var.mount
- 重载systemd配置然后重启:
sudo systemctl daemon-reload sudo reboot
这个方法相当于给/var挂载单独开了个“绿色通道”,优先级拉满,确保所有可能写/var的服务都得等它挂载完再启动。
方法三:检查initramfs的初始化脚本(进阶操作)
如果前两个方法都没搞定,可能是initramfs里的某个初始化脚本提前触发了fontconfig缓存生成。你可以这么排查:
- 先看看initramfs的钩子目录里有没有和fontconfig相关的脚本:
ls /etc/initramfs-tools/hooks/
- 如果发现带fontconfig的脚本,先给它改个名备份(比如加.bak后缀),然后更新initramfs:
sudo update-initramfs -u
不过这个操作要谨慎,initramfs是系统启动最早期的初始化环境,修改前最好把原脚本备份好,避免搞出启动问题。
最后验证的方法也很简单:重启后用SD卡挂载SSD的根分区,看看根分区下的/var目录是不是空的——如果没有fontconfig目录,就说明成功了。
备注:内容来源于stack exchange,提问作者SpaceManAce

