2013-02-17 15 views
5

hanno sviluppato un'applicazione per l'esecuzione su una destinazione con kernel 2.6.10. Una cartella condivisa su una macchina Windows è montato tramite il comando:come disattivare la memorizzazione nella cache in CIFS (samba) sul lato client in linux

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

Come si può capire dalla opzione di comando forcedirectio, voglio disabilitare la cache sul lato client. Ma non posso.

La quantità di RAM libera sul target è 40 MB. Quando copio un file della dimensione di circa 10 MB, la dimensione della RAM libera diminuisce a 30 MB.

Il kernel 2.6.10 utilizza cifs.1.28. Ho anche impostato oplockEnabled come 0 (sia nel codice sorgente che in/proc/fs/cifs/OplockEnabled). Ma non ha smesso di memorizzare nella cache. Come posso disabilitare la memorizzazione nella cache sul client di cifs per davvero?

risposta

4

Forse troppo tardi, ma in Arch compio questo con il seguente:

/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 

Ecco una funzione utile per determinare le opzioni di modulo valido.

# 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 
} 

Vedi man 5 modprobe.d per ulteriori informazioni sulla sintassi modprobe.d.

Inoltre, i supporti CIFS rispettano l'opzione cache. Secondo the mount.cifs manual, l'impostazione cache=none dovrebbe disabilitare la memorizzazione nella cache, mentre l'impostazione predefinita è cache=strict.