我正在尝试在我的其中一台服务器上设置 nfs 共享的 cachefilesd。但是没有成功。
服务正在运行,我的驱动器已安装,但似乎“fsc”选项被完全忽略。
我的 fstab(出于隐私和相关性的考虑,特定文件夹名称已被编辑):
$ cat /etc/fstab
# <device> <dir> <type> <options> <dump> <fsck>
UUID=c456dea4-e0c6-42f5-a206-d0ed2e94bc6a / ext4 rw,relatime,discard,data=ordered 0 1
UUID=693dee2e-78bb-4d4d-84e4-082328488cfe /boot ext4 rw,relatime,discard,data=ordered 0 2
UUID=843c20a9-258a-4078-bb78-0549217623e4 none swap defaults 0 0
192.168.200.20:/mnt/tank/share1 /mnt/share1 nfs4 nolock,noatime,context="system_u:object_r:httpd_sys_content_rw_t:s0" 0 0
192.168.200.20:/mnt/tank/share2 /mnt/sub/share2 nfs4 fsc,nolock,noatime 0 0
192.168.200.20:/mnt/tank/share3 /mnt/sub/share3 nfs4 nolock,noatime 0 0
192.168.200.20:/mnt/tank/share4 /mnt/sub/share4 nfs4 fsc,nolock,noatime 0 0
问题
无论我做什么,即使手动安装共享(mount -t -o fsc ...),FSC 选项也未启用:
$ cat /proc/fs/nfsfs/volumes
NV SERVER PORT DEV FSID FSC
v4 c0a8c814 801 0:55 c7d8b1ef:bb64cbde no
v4 c0a8c814 801 0:54 d9a63e22:cc9a3fde no
v4 c0a8c814 801 0:57 5a567c31:75f052de no
v4 c0a8c814 801 0:59 1673eeb4:b0583de no
v4 c0a8c814 801 0:60 9acb69e2:fb267bde no
v4 c0a8c814 801 0:58 a367662d:5b53a6de no
v4 c0a8c814 801 0:61 69fdc16c:c38e18de no
v4 c0a8c814 801 0:63 706408fe:60f412de no
v4 c0a8c814 801 0:64 af123987:8f7131de no
查看 nfsstat 你会发现 fsc 选项被完全忽略了:
$ nfsstat -m
/mnt/sub/share4 from 192.168.200.20:/mnt/tank/share4
Flags: rw,noatime,vers=4.1,rsize=131072,wsize=131072,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=192.168.200.10,local_lock=none,addr=192.168.200.20
/mnt/sub/share3 from 192.168.200.20:/mnt/tank/share3
Flags: rw,noatime,vers=4.1,rsize=131072,wsize=131072,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=192.168.200.10,local_lock=none,addr=192.168.200.20
/mnt/share1 from 192.168.200.20:/mnt/tank/share1
Flags: rw,noatime,vers=4.1,rsize=131072,wsize=131072,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=192.168.200.10,local_lock=none,addr=192.168.200.20
/mnt/sub/share2 from 192.168.200.20:/mnt/tank/share2
Flags: rw,noatime,vers=4.1,rsize=131072,wsize=131072,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=192.168.200.10,local_lock=none,addr=192.168.200.20
故障排除信息
服务正在运行:
$ sudo systemctl status cachefilesd.service
● cachefilesd.service - LSB: CacheFiles daemon
Loaded: loaded (/etc/init.d/cachefilesd; generated)
Active: active (running) since Tue 2019-04-30 04:05:28 UTC; 5min ago
Docs: man:systemd-sysv-generator(8)
Process: 21405 ExecStop=/etc/init.d/cachefilesd stop (code=exited, status=0/SUCCESS)
Process: 22001 ExecStart=/etc/init.d/cachefilesd start (code=exited, status=0/SUCCESS)
Tasks: 1 (limit: 4915)
CGroup: /system.slice/cachefilesd.service
└─22022 /sbin/cachefilesd
Apr 30 04:05:28 orochi systemd[1]: Starting LSB: CacheFiles daemon...
Apr 30 04:05:28 orochi cachefilesd[22001]: * Starting FilesCache daemon cachefilesd
Apr 30 04:05:28 orochi cachefilesd[22020]: About to bind cache
Apr 30 04:05:28 orochi cachefilesd[22020]: Bound cache
Apr 30 04:05:28 orochi cachefilesd[22022]: Daemon Started
Apr 30 04:05:28 orochi cachefilesd[22001]: ...done.
Apr 30 04:05:28 orochi systemd[1]: Started LSB: CacheFiles daemon.
RUN=yes 选项已取消注释:
$ cat /etc/default/cachefilesd
# Defaults for cachefilesd initscript
# sourced by /etc/init.d/cachefilesd
# You must uncomment the run=yes line below for cachefilesd to start.
# Before doing so, please read /usr/share/doc/cachefilesd/howto.txt.gz as
# extended user attributes need to be enabled on the cache filesystem.
RUN=yes
# Additional options that are passed to the Daemon.
DAEMON_OPTS=""
secctx system_u:system_r:cachefiles_kernel_t:s0 选项已取消注释(带和不带都试过):
$ cat /etc/cachefilesd.conf
###############################################################################
#
# Copyright (C) 2006,2010 Red Hat, Inc. All Rights Reserved.
# Written by David Howells ([email protected])
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version
# 2 of the License, or (at your option) any later version.
#
###############################################################################
dir /var/cache/fscache
tag mycache
brun 10%
bcull 7%
bstop 3%
frun 10%
fcull 7%
fstop 3%
# Assuming you're using SELinux with the default security policy included in
# this package
secctx system_u:system_r:cachefiles_kernel_t:s0
在一个类似但最终无益的答案中,有人还包括了这样的输出:
$ lsmod | grep cachefiles
cachefiles 45056 1
fscache 61440 3 cachefiles,nfsv4,nfs
和这个:
$ grep CONFIG_NFS_FSCACHE /boot/config-4.15.0-20-generic
CONFIG_NFS_FSCACHE=y
答案1
我遇到了同样的问题。偶然发现了对我有用的东西。
看起来默认 rsize 存在问题,导致 fsc 选项无法生效。如果我提供的 rsize 值为 524288(而不是默认的 1048576),则 fsc 选项会生效。
sudo mount -t nfs4 hex:/mnt/hexhd /mnt/hexhd -o fsc,rsize=524288
nfsstat -m
/mnt/hexhd from hex:/mnt/hexhd
Flags: rw,relatime,vers=4.2,rsize=524288,wsize=1048576,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=192.168.50.216,fsc,local_lock=none,addr=192.168.50.185
uname -a
Linux tri 5.4.0-72-generic #80-Ubuntu SMP Mon Apr 12 17:35:00 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
答案2
/etc/fstab
我在 AWS 上的一个 Ubuntu 18.04 实例上遇到了同样的问题,并设法通过安装 NFS 卷而不是mount
在启动后使用命令来修复它。这是我的工作/etc/fstab
线路:
fs-xxxxx.efs.eu-west-1.amazonaws.com:/ /var/www/site/blahblah nfs4 nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,fsc,noresvport,_netdev 0 0
我尝试使用其他操作系统,例如 Amazon Linux 2 和 Ubuntu 16.04,并且 fsc 选项与 mount 命令配合使用效果很好。