(net-fs/nfs-utils-1.2.3-r1, 2.6.38.5-zen+ Gentoo)
谷歌搜索这似乎是一个完整的死胡同。man nfsstat对这个主题几乎一无所知。我能得到的最接近的是找出可能以前是“ newcreds ”的东西。
newcreds 必须刷新身份验证信息的次数。
我的问题是,我认为我在 OpenVPN 上看到的 NFS 性能低于标准,唯一我可以立即看到与所有 nfsstat Google 结果显着不同的是,我的“呼叫”字段完全等于“authrefrsh”,因此非常高. 所有搜索结果输出的 authrefrsh 始终为 0 或非常低的数字。在我可以继续调试其他一些方面之前,我可以使用找出这意味着什么。
监视操作正在出现一个基于 NFS 共享移植的包。emerge 在运行过程中确实会遍历一棵大树,但是以前的经验表明我看到的性能是异常的。
$ watch -n 1 nfsstat -c
Every 1,0s: nfsstat -c Sat May 21 23:04:55 2011
Client rpc stats:
calls retrans authrefrsh
308565 2211 308565
Client nfs v3:
null getattr setattr lookup access readlink
0 0% 172372 55% 17 0% 30485 9% 36057 11% 26831 8%
read write create mkdir symlink …Run Code Online (Sandbox Code Playgroud) 考虑以下 Docker 容器:
docker run --rm -it -v /tmp:/mnt/tmp alpine sh
Run Code Online (Sandbox Code Playgroud)
这会将主机目录 /tmp 挂载到 alpine 容器内的 /mnt/tmp 中。
现在,在主机系统上,我将 NFS 卷挂载到 /tmp 目录:
mkdir /tmp/nfs
mount -t nfs4 192.168.1.100:/data /tmp/nfs
Run Code Online (Sandbox Code Playgroud)
挂载在主机系统上工作,我看到以下内容:
# ls /tmp/nfs
file1 file2 file3
#
Run Code Online (Sandbox Code Playgroud)
但是在 Docker Container 上,我看到一个空白目录:
# ls /mnt/tmp/nfs
#
Run Code Online (Sandbox Code Playgroud)
我知道我可以通过直接在 Docker 容器中进行挂载来解决这个问题。但是我真的很想知道为什么挂载在主机容器上有效,而在 docker 容器中无效?
我想在局域网上设置多台计算机,都连接到一台 unix 服务器。
主要目标是用户帐户应该只存在于服务器上。这样任何用户都可以通过任何给定的计算机访问他的正常界面。
这样做有哪些不同的方法,这些方法的优缺点是什么?
旁注:我正在寻找一种简单的方法,需要在单个终端上完成绝对最少的工作。如果用户可以玩游戏并做资源密集型的事情,那将是一个奖励。
我正在尝试保护我的authorized_keys文件以防止它被修改。我运行这个:
[root@localhost]# chattr +i authorized_keys
chattr: Inappropriate ioctl for device while reading flags on authorized_keys
Run Code Online (Sandbox Code Playgroud)
我认为这可能是由于文件系统:
[root@localhost]# stat -f -c %T /home/user/
nfs
Run Code Online (Sandbox Code Playgroud)
有没有办法用chattr修改它?
我有一个自己编写的 FUSE 文件系统,我安装在我的 NFS 服务器上的 mountpoint 上/export/example/mount。然后我通过 NFS 导出 FUSE 的父目录。该/etc/exports所包含的选项nohide,crossmnt,subtree_check,ro,no_root_squash,并允许所有人免费使用:
/export/example *(nohide,crossmnt,subtree_check,ro,no_root_squash)
Run Code Online (Sandbox Code Playgroud)
我可以在我的 NFS 客户端上安装这个导出并访问它。一旦我在 NFS 中访问 FUSE,我的客户端就会挂起,直到我umount进入 NFS(我需要使用选项-f来完成它)。
我已经尝试以我的工作用户和 root 身份安装 FUSE。结果是一样的。
服务器运行的是 Ubuntu 12.04,客户端运行的是 SuSE 9.3。FUSE 是用 Python 编写的,可以在本地运行,没有任何问题。只有通过 NFS 导出失败。我没有安全限制,因为所有这些都在只有受信任用户的专用网络上。
有没有人知道什么会导致我的麻烦或(甚至更好)如何解决问题?
我曾考虑用 SSHFS 替换 NFS 来解决这个问题,但这不起作用,因为客户端系统太旧而无法支持 SSHFS(因为它基于 FUSE,并且不支持 FUSE)。
我有一个服务器,它通过NFS将一个包含约 700 万个文件(主要是图像)的目录从其本地磁盘导出到网络客户端。
为了 HA,我需要添加第二个,并使其与第一个保持同步,两者之间的增量尽可能小。
研究建议为此使用lsyncd或其他基于inotify的解决方案,但鉴于创建inotify手表的文件数量需要永恒。对于同样的事情rsync的。
其他可能的解决方案似乎是DRDB,或群集文件系统,如头孢或glusterfs,可是我不得不与那些没有经验,不知道哪一个会更合适,并与许多文件以及应对并仍提供不俗的表现。
请注意,活动主要是读取,很少发生写入。
我有一个服务器 A,它安装了一个卷,它通过 NFS 与服务器 B 和 C 共享。
如果我使用仅存在于服务器 A 上的 Y 组中的用户 X 在该卷上创建一个文件,是否会在通过 NFS 共享该文件时产生任何问题?如果 3rd 方权限包括读取,服务器 B 和服务器 C 是否能够读取文件?
rm -rf在对目录或仅rm -rf通过 NFS的目录进行操作之前,先登录具有该目录的机器在时间上会有很大的不同吗?
问题:当通过 NFS 启动二进制文件(例如 /usr/bin)时,例如在网络引导系统中,NFS 可能会很慢。RAM 缓冲区缓存可能不足以避免缓慢。
想法:似乎我们应该能够拥有一个本地磁盘缓存,它可以在从 NFS 中提取文件时将文件保存在本地。
问题:有没有人在任何 UNIX 系统上看到过类似的东西?
背景:
在 FreeBSD 中,有很多使用 unionfs 来构建惊人的堆叠文件系统的好方法。我目前在 AWS 上有一个系统,它只使用 1 GB 的磁盘,因为它通过 NFS 挂载了大部分 /usr 文件系统树。在过去,您可以轻松做到这一点,因为 /usr 不是基本引导所必需的。现在它更难了(尤其是在 AWS 上,在启动失败时你无法跳出控制台)但我通过从本地驱动器上的 /usr 树中获取最少必要的东西来进行管理,然后,当网络启动时,我在 /usr 树上挂载 NFS。
我什至有一个后门,我仍然可以在其中写入底层最小本地硬盘驱动器 /usr 树,以防我需要更新正在运行的系统上的某些内容。
真漂亮。
除了 NFS (Amazon EFS) 非常慢。并且缓冲区缓存工作得不够好。例如,用于管理 AWS 资源的 aws 命令行界面使用 Python,每次调用 aws 命令时都会吸入大量包含。运行一个简单的 aws CLI 命令需要 20 秒。即使重复运行它,您也会认为缓存、NFS 属性缓存等可能会有所帮助,但事实并非如此。
可能的解决方案(在 FreeBSD 上):
所以我想做的是在 NFS 层之上放置另一个 unionfs 层,它是一个基于本地磁盘的 UFS 文件系统。但它会在启动时开始为空,然后,每次我们从 NFS 加载任何内容时(假设现在它是稳定的二进制文件,而不是动态更新的数据),它会在磁盘上留下一个副本。
此解决方案的实施:
所以这就是我认为应该做的。在/usr/src/sys/fs/unionfs/union_vnops.c我们有这个非常简单的代码:
static int
unionfs_open(struct …Run Code Online (Sandbox Code Playgroud) 我的系统运行 SLES 11.4,并且使用 NFS v3。
/etc/fstab在 NFS 客户端系统上的文件中,我有:
mastersystem:/masterdata /data nfs defaults 0 0
Run Code Online (Sandbox Code Playgroud)
有人可以告诉我如何找出默认值吗?我正在寻找文件系统中的哪个位置,它说从执行man nfs?显示的列表中使用任何选项作为默认选项。