我正在5.4.0-81-generic
从 PXE 运行 ubuntu 20.04 LTS(内核),我希望添加一个本地缓存。因为我不想在所有设备上都有一个分区用于缓存,所以我希望为此目的使用 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
我用系统服务做到了。
该脚本将 ramdisk 的 1k 块计数(来自
df
)作为 的dd
输入文件 (if=
) 参数的输入,否则 dd 将返回错误代码,因为磁盘已满并且&&
在这种情况下将无法工作。显然,这只适用于 ramdisk 为空的情况。