![在 ramdisk(tmpfs)上运行 cachefilesd 缓存以进行 PXE NFS 启动](https://linux22.com/image/940724/%E5%9C%A8%20ramdisk%EF%BC%88tmpfs%EF%BC%89%E4%B8%8A%E8%BF%90%E8%A1%8C%20cachefilesd%20%E7%BC%93%E5%AD%98%E4%BB%A5%E8%BF%9B%E8%A1%8C%20PXE%20NFS%20%E5%90%AF%E5%8A%A8.png)
我正在通过 PXE 运行 ubuntu 20.04 LTS(内核5.4.0-81-generic
),并且希望添加本地缓存。因为我不想在所有设备上都设置一个用于缓存的分区,所以我希望为此使用 ramdisk。
我已设法fsc
在启动过程中启用该选项这个答案。
但是,当我运行该cachefilesd
服务时,它会失败,-95: Operation not supported.
这可能是因为tmpfs
不支持user_xattr
必需的。
我读过了这里您可以编译/修补内核以启用user_xattr
,尽管这存在安全风险。除了维护麻烦之外,我不希望走那么远,也不想在每次内核更新时都花大力气来自动化它。
它表明您可以创建一个 tmpfs,然后创建一个环回设备,将其格式化为 ext4,然后在其上运行您的 fs-cache。
但是,由于我使用的是 PXE 并且 NFS 挂载点是,那么我在启动期间(最好是在启动/
之前)该如何执行此操作?cachedfilesd.service
我的引导程序(vesamenu.c32
)
# [...]
label ubuntunfs
menu label ^Ubuntu NFS
text help
Run ubuntu from Network File System.
endtext
kernel ubuntu/boot/vmlinuz
initrd ubuntu/boot/initrd.img
append root=/dev/nfs nfsroot=192.168.1.5:/srv/tftp/ubuntu,rw,fsc,relatime ip=dhcp rw
# [...]
我的 fstab
/proc /proc proc defaults 0 0
/sys /sys sysfs defaults 0 0
/dev/nfs / nfs defaults,relatime,fsc 1 1
# ramdisk for fs-cache for nfs
tmpfs /media/ramdisk tmpfs defaults,size=5% 0 0
none /tmp tmpfs defaults 0 0
none /var/run tmpfs defaults 0 0
none /var/lock tmpfs defaults 0 0
none /var/tmp tmpfs defaults 0 0
我的 /etc/cachefilesd.conf
dir /media/ramdisk
tag mycache
brun 90%
bcull 70%
bstop 30%
frun 90%
fcull 70%
fstop 30%
culltable 14
答案1
我通过 systemd 服务完成了此操作。
[Unit]
Description=Cache creator
Before=cachefilesd.service
[Service]
ExecStart=/bin/bash -c "dd if=/dev/zero of=/media/ramdisk/cache.ext4 bs=1k count=`df /media/ramdisk | tail -n 1 | sed -e 's/ \+/ /g' | cut -d ' ' -f 2` && mke2fs /media/ramdisk/cache.ext4 && mount -o rw,noatime,nodiratime,user_xattr /media/ramdisk/cache.ext4 /media/cache/"
Restart=no
Type=oneshot
[Install]
WantedBy=multi-user.target
该脚本将df
ramdisk 的 1k 块计数(来自)作为dd
的输入文件(if=
)参数的输入,否则 dd 将返回错误代码,因为磁盘已满,并且&&
在这种情况下无法工作。显然,这仅在 ramdisk 为空时才有效。