2013-02-17 37 views
5

は、2.6.10カーネルのターゲットで実行するアプリケーションを開発しました。 Windowsマシン上の共有フォルダは、コマンドを介して搭載されている:Linuxのクライアント側でCIFS(samba)のキャッシュを無効にする方法

mount -t cifs -o username=xxx,password=xxx,forcedirectio //192.168.170.67/57 /fsRecord 

コマンドオプションforcedirectioから理解できるように、私は、クライアント側のキャッシュを無効にしたいです。しかし、私はできません。

ターゲット上の空きRAMの容量は40 MBです。約10MBのサイズのファイルをコピーすると、空きRAMサイズは30MBに減少します。

カーネル2.6.10はcifs.1.28を使用しています。また、oplockEnabledを0(ソースコードと/ proc/fs/cifs/OplockEnabledの両方)に設定しました。しかしそれはキャッシングを止めませんでした。 CIFSクライアントでのキャッシュを無効にするにはどうすればよいですか?おそらく、遅すぎる

答えて

4

が、アーチに、私は次のようにこれを実現:

/etc/modprobe.d/cifs.conf 
------------------------- 
# Disable caching and the CIFS oplog for stable NTFS network shares 
options cifs enable_oplocks=0 

install cifs /sbin/modprobe --ignore-install cifs $CMDLINE_OPTS && echo 0 > /proc/fs/cifs/LinuxExtensionsEnabled && echo 0 > /proc/fs/cifs/LookupCacheEnabled 
remove cifs /sbin/modprobe -r cifs 

ここで有効なモジュールオプションを決定するための便利な機能です。

# Shamelessly ripped the Kernel_Modules ArchWiki entry: 
# https://wiki.archlinux.org/index.php?title=Kernel_modules&oldid=286087#Bash_function_to_list_module_parameters 

function aa_mod_parameters() 
{ 
    N=/dev/null; 
    C=`tput op` O=$(echo -en "\n`tput setaf 2`>>> `tput op`"); 
    for mod in $(cat /proc/modules|cut -d" " -f1); 
    do 
     md=/sys/module/$mod/parameters; 
     [[ ! -d $md ]] && continue; 
     m=$mod; 
     d=`modinfo -d $m 2>$N | tr "\n" "\t"`; 
     echo -en "$O$m$C"; 
     [[ ${#d} -gt 0 ]] && echo -n " - $d"; 
     echo; 
     for mc in $(cd $md; echo *); 
     do 
      de=`modinfo -p $mod 2>$N | grep ^$mc 2>$N|sed "s/^$mc=//" 2>$N`; 
      echo -en "\t$mc=`cat $md/$mc 2>$N`"; 
      [[ ${#de} -gt 1 ]] && echo -en " - $de"; 
      echo; 
     done; 
    done 
} 

modprobe.dの構文の詳細については、man 5 modprobe.dを参照してください。

さらに、CIFSマウントでは、cacheオプションが使用されます。 the mount.cifs manualによれば、cache=noneを設定するとキャッシングが無効になりますが、デフォルトはcache=strictです。

関連する問題