sync
オプションを使用してマウントする場合:
Sudo mount -o vers=4,soft,sync,sec=none -t nfs 192.168.1.198:/js.js /mnt/self
同期オプションが適用されていないようです:
$ cat /proc/mounts | grep nfs
192.168.1.198:/js.js /mnt/self nfs4 rw,relatime,vers=4.0,rsize=1048576,wsize=1048576,namlen=255,soft,proto=tcp,port=0,timeo=600,retrans=2,sec=null,clientaddr=192.168.1.198,local_lock=none,addr=192.168.1.198 0 0
ただし、noac
オプションを使用すると、sync
を意味します。
Sudo mount -o vers=4,soft,noac,sec=none -t nfs 192.168.1.198:/js.js /mnt/self
それから私はそれが適用されているのを見ます:
$ cat /proc/mounts | grep nfs
192.168.1.198:/js.js /mnt/self nfs4 rw,sync,relatime,vers=4.0,rsize=1048576,wsize=1048576,namlen=255,acregmin=0,acregmax=0,acdirmin=0,acdirmax=0,soft,noac,proto=tcp,port=0,timeo=600,retrans=2,sec=null,clientaddr=192.168.1.198,local_lock=none,addr=192.168.1.198 0 0
また、サブディレクトリの代わりにサーバーのルートをマウントする場合:
Sudo mount -o vers=4,sync,sec=none -t nfs 192.168.1.198:/ /mnt/self
次に、同期オプションが適用されていることもわかります。
$ cat /proc/mounts | grep nfs
192.168.1.198:/ /mnt/self nfs4 rw,sync,relatime,vers=4.0,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=null,clientaddr=192.168.1.198,local_lock=none,addr=192.168.1.198 0 0
これはカーネル3.8.0-28-Ubuntuの汎用です。 CentOSで2.6.32を使用して同じことを試みると、すべての場合に同期オプションが適用されます。
新しいバージョンのカーネルでサブディレクトリをマウントするときにnoacモードなしで同期モードを有効にするにはどうすればよいですか?
このコミットはこの問題を解決します。
コミットe890db0104826742818cbfb8fdb3000a38a9b97c
NFSv4:nfs4マウントの同期マウントオプションを修正
diff --git a/fs/nfs/super.c b/fs/nfs/super.c
index 71fdc0d..f6db66d 100644
--- a/fs/nfs/super.c
+++ b/fs/nfs/super.c
@@ -2478,6 +2478,10 @@ struct dentry *nfs_fs_mount_common(struct nfs_server *server,
if (server->flags & NFS_MOUNT_NOAC)
sb_mntdata.mntflags |= MS_SYNCHRONOUS;
+ if (mount_info->cloned != NULL && mount_info->cloned->sb != NULL)
+ if (mount_info->cloned->sb->s_flags & MS_SYNCHRONOUS)
+ sb_mntdata.mntflags |= MS_SYNCHRONOUS;
+
/* Get a superblock - note that we may end up sharing one that already exists */
s = sget(nfs_mod->nfs_fs, compare_super, nfs_set_super, flags, &sb_mntdata);
if (IS_ERR(s)) {