2013-02-17 19 views
5

haben eine Anwendung entwickelt, um auf einem Ziel mit Kernel 2.6.10 zu laufen. Ein gemeinsam genutzter Ordner auf einem Windows-Rechner wird über den Befehl montiert:wie Caching in CIFS (Samba) auf Client-Seite in Linux zu deaktivieren

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

Wie Sie aus der Befehlsoption forcedirectio verstehen kann ich das Caching auf der Client-Seite deaktivieren möchten. Aber ich kann nicht.

Die Menge an freiem RAM auf dem Ziel ist 40 MB. Wenn ich eine Dateigröße von etwa 10 MB kopiere, verringert sich die freie RAM-Größe auf 30 MB.

Der Kernel 2.6.10 verwendet cifs.1.28. Ich setze auch oplockEnabled als 0 (sowohl im Quellcode als auch in/proc/fs/cifs/OplockEnabled). Aber es hörte nicht auf zu cachen. Wie kann ich Caching auf CIFS-Client für echt deaktivieren?

Antwort

4

Vielleicht zu spät, aber in Arch erreichen ich dies mit dem folgenden:

/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 

Hier ist eine praktische Funktion gültige Moduloptionen zu bestimmen.

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

Siehe man 5 modprobe.d für weitere Informationen über modprobe.d Syntax.

Zusätzlich können CIFS-Halterungen eine cache Option enthalten. Gemäß the mount.cifs manual sollte die Einstellung cache=none das Caching deaktivieren, während der Standardwert cache=strict lautet.