2013-02-17 49 views
5

में क्लाइंट पक्ष पर सीआईएफएस (सांबा) में कैशिंग को अक्षम करने के लिए 2.6.10 कर्नेल के साथ एक लक्ष्य पर चलाने के लिए एक अनुप्रयोग विकसित किया है। एक विंडोज़ मशीन पर एक साझा फ़ोल्डर आदेश के माध्यम से रखा जाता है:लिनक्स

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

आप कमांड विकल्प forcedirectio से समझ सकते हैं के रूप में, मैं ग्राहक पक्ष पर कैशिंग अक्षम करना चाहते हैं। लेकिन मैं नहीं कर सकता।

लक्ष्य पर मुफ्त रैम की मात्रा 40 एमबी है। जब मैं 10 एमबी के आकार की फ़ाइल कॉपी करता हूं, तो फ्री रैम आकार 30 एमबी तक घट जाता है।

कर्नेल 2.6.10 cifs.1.28 का उपयोग करता है। मैंने oplock को 0 के रूप में सेट किया है (दोनों स्रोत कोड और/proc/fs/cifs/oplockEnabled में)। लेकिन यह कैशिंग बंद नहीं किया था। मैं वास्तविक रूप से सीआईएफ क्लाइंट पर कैशिंग अक्षम कैसे कर सकता हूं?

उत्तर

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 देखें।

इसके अतिरिक्त, सीआईएफएस cache विकल्प का सम्मान करता है। the mount.cifs manual के अनुसार, cache=none सेटिंग को कैशिंग अक्षम करना चाहिए, जबकि डिफ़ॉल्ट cache=strict है।