NFS timeout parák

Fórumok

Sziasztok!

Az otthoni hálózatomon van egy debianos és egy ubuntus gép. A Debian a szerver, és NFS-en keresztül megoszt egy médiavinyót az Ubuntuval.

A problémám az, hogy a debianos szerver nem megy mindig, és ha az nfs fel van csatolva a kliens gépen miközben leáll a szerver, a kliens gép hosszú percekre unresponsive-vá válik. Nincs erre egy megoldás, hogy ez ne így legyen? Konkrétan nem bírok belépni a /media könyvárba ilyenkor.

A kliensen az fstab:
172.30.100.102:/ /media/eee nfs4 proto=tcp,port=2049,user
0 0

A szerveren:
/etc/exports:
/export 172.30.100.0/24(rw,fsid=0,no_subtree_check,sync)
/export/media 172.30.100.0/24(rw,nohide,insecure,no_subtree_check,sync)

Kösz előre is a segítséget.

Hozzászólások

Soft mount a te barátod.
man 5 nfs

Azt, hogy az writeback buffer biztosan elveszik ha megszakad a hálózati kapcsolat/leáll a szerver. Ezzel szemben hard mountnál a writeback buffer kiírásra kerül amint visszaállt a kapcsolat. A soft mount akkor okozhat súlyos adatvesztést, ha írás közben szakadozik a hálózat.

huh, erre a megoldasra en is kivancsi vok

--
A vegtelen ciklus is vegeter egyszer, csak kelloen eros hardver kell hozza!

Elég felhasználóbarát megoldás :) Szerintem ezért sem terjed a Linux, nincs egy normális hülyetűrő hálózati fájlrendszer implementáció benne. Még vállalati környezetben is necces, ráadásul kerberos nélkül zero security az nfs, kerberossal meg elég macerás.


import subprocess
import time
import threading
import ConfigParser

def check(ready, directory):
    #print "ls begin"
    res = subprocess.check_output(["ls", directory])
    #print "ls returned"
    ready[directory] = 1

def forceUnmount(mydir):
    params = "-l " + mydir;
    res = subprocess.check_output(["umount", "-l", mydir])

class MountChecker(object):
    def __init__(self, dirs):
        self.mounted_dirs = dirs
        self.ready = { '/': 0}

    def isResponsive(self, directory):
        self.ready[directory] = 0;
        mythread = threading.Thread(target = check, args=[self.ready, directory])
        mythread.start()
        time.sleep(0.01)
        if self.ready[directory] == 0:
            time.sleep(1)
        if mythread.isAlive():
            try:
                mythread._Thread__stop()
            except:
                print(str(mythread.getName()) + ' could not be terminated')
        return self.ready[directory]


    def do(self):
        for i in self.mounted_dirs:
            if self.isResponsive(i):
                print i + " is responsive"
            else:
                print i + " is NOT responsive"
                forceUnmount(i)

    def printDebug(self):
        for i in self.mounted_dirs:
            if self.isResponsive(i):
                print i + " is responsive"
            else:
                print i + " is NOT responsive"



mc = MountChecker(["/media/eee", "/media/Windows7_OS"]);
mc.do()

Csak forceUnmount() fv-t kell átírni, hogy ez megjavuljon. Gondolom, ha sima könyvtári rutinokból hívok egy listázást, az is jó lesz. Vagy esetleg van ötleted, hogyan tudnánk eldönteni, hogy responsive-e?

Ha használod a scriptet és nem tudod megcsinálni, akkor megcsinálom.
Nekem így is működik :)

ha legkozelebb belefutunk ilyenbe, stracevel megnezem mit csinal. de tippem szerint valami rendszerhivas van (stat, akarmi), ami meg varakozik a nemletezo nfs-re. Igy csak var-var-var... mivel D-s process lett, igy killelni sem lehet. :( persze umount force uten visszater, de akkor mar keso.

es ugyanigy befagy minden ami azt a mount-ot akarja hasznalni (df, ls, cd)

a progihoz azt tudom mondani, hogy valami timert/alarmot kene beallitani, es ha az lejar akkor is force umountolni. (ha meg ls/stat sikeres, akkor lelovi a timert)

--
A vegtelen ciklus is vegeter egyszer, csak kelloen eros hardver kell hozza!

"a progihoz azt tudom mondani, hogy valami timert/alarmot kene beallitani, es ha az lejar akkor is force umountolni. (ha meg ls/stat sikeres, akkor lelovi a timert)"

Igy mukodik, pontosan. 1sec-es timer van benne :)
Ha az ls nem tér vissza 1 sec-en belül, akkor umount -l, és kill ls.

Szerintem neked automount kell; csak akkor legyen csatolva a szerver, ha szükség van rá. Mondjuk én magam nagyon rég automountoltam, nem tudom milyen állapotban van ma.