NFS-Server Addon

Warum bringt ein strace ohne "kernel replace":
Code:
nfsservctl(0, 0x7f938b90, 0)            = -1 ENOSYS (Function not implemented)
exit(1)                                 = ?
Process 718 detached
Code:
/ $ cat /proc/kallsyms |grep nfs
9403bc40 W sys_nfsservctl
941f8bc0 T root_nfs_parse_addr
941fa1c4 t nfsaddrs_config_setup
Sehe ich das richtig, dass der Syscall nicht reinkompiliert wird, wenn nfs in der .config nicht aktiviert ist?

MfG Oliver
 
Ja, das siehst Du richtig.
Aus linux/fs/Makefile:
Code:
nfsd-$(CONFIG_NFSD)             := nfsctl.o
Der Systemaufruf nfsservctl ist dazu da, verschiedenen Funktionen für den NFS-Server auszuführen. Wenn NFS-Server nicht aktiviert wird, ist dieser Aufruf unnötig und fehlt im Kernel, bzw. stattdessen gibt es eine Funktion, die nur sagt "Function not implemented", was ja der Wahrheit entspricht.
 
Demnach völlig verständlich, daß AVM bei einer Embedded-FW, wo es auf jedes KB ankommt und NFS nicht vorgesehen ist, die Option deaktiviert hat. Das meinte ich weiter oben mit "Vorsicht vor Pauschalurteilen". Ich sage es nochmal, obwohl ja anscheinend nicht die technische, sondern die lizenzrechtliche Seite gemeint war (war nicht so zu verstehen).
 
@olistudent: Das Herablegen des Ports auf 2047 gibt by mir auch ein EADDRINUSE, kann aber mit netstat/lsof nicht herausbekommen, welches Prog den belegt. Gibt es da schon einen sichereren Lösungsansatz?
 
Wie oft denn noch? Du brauchst keinen Port zu verlegen, der Portmapper sorgt dafür, daß NFS auch auf anderen Ports als 2049 gefunden wird.
 
Der Portmapper sorgt dafür, daß NFSD auch auf einem anderen Port gefunden wird. Der NFSD muß aber erstmal dazu gebracht werden, einen anderen Port zu verwenden.

Wenn man einen abweichenden Port für den NFSD verwenden will, kann man beim Aufruf von nfsd die Option -p verwenden. Diese Option ist aber nur dann wirksam, wenn vorher /proc/fs/nfsd nicht gemountet wurde.

Ansonsten versucht nfsd, die Kernel-Prozesse zu starten, ohne die default Port-Nummer zu verändern. Die Folge ist, daß der Kernel Prozeß merkt, daß der gewünschte Port 2049 belegt ist und sich nicht startet.

Bei mir funktioniert es, den NFSD mit "nfsd -p 2047" zu starten, wenn /proc/fs/nfsd nicht gemountet ist. Bei capt_bluebaer ist vermutlich /proc/fs/nfsd gemountet und daher versucht nfsd es auf Port 2049, obwohl er in der Kommandozeile 2047 angegeben hat.
 
Kann sein, entschuldigt bitte meine Unwissenheit. Ich habe gestern einfach das Add-On installiert, geflasht, gesehen, daß 2049 belegt war (in diesem Fall zur Abwechslung durch multid), ganz naiv übers Web-If einen Export definiert und knfsd trotzdem gestartet. Es ging sofort und ohne weiteres Zutun, ohne Angabe oder Verschieben von Ports. War das so, weil der knfsd vorher noch nicht gestartet war? Das ist aber doch der Normalfall beim Systemstart. Kannst Du das nochmal erklären, Ralf?
 
Mit knfsd meinst Du vermutlich den Kernel-nfsd Prozeß. In der Prozeß-Liste wird er als "[nfsd]" angezeigt. Es kann davon einen oder mehrere geben. Dies ist immer so und notwendig, wenn Clients über NFS auf den Server zugreifen sollen. (Userspace NFSD ist etwas anderes.)

Das Userspace Programm nfsd hat nur die Aufgabe, den Kernel nfsd zu starten.

Es gibt zwei Möglichkeit dafür. Man kann mit "mount -t nfsd nfsd /proc/fs/nfsd/" eine nfsd Pseudo-Dateisystem mounten, über das der Kernel-nfsd gesteuert werden kann. Oder man kann das weglassen, dann wird die ältere Methode genommen, über den Systemaufruf nfsservctl().

Anscheinend kann bei der neuen Methode ("echo 5 > /proc/fs/nfsd/threads") nur die Anzahl der Threads/Prozesse bestimmt werden, aber nicht der Port. Außerdem können auf diese Art nur neue nfsd Prozesse erstellt werden, die Anzahl kann so nicht reduziert werden.

Bei gemountetem /proc/fs/nfsd ist der Aufruf "nfsd -p xxx yy" identisch mit "echo yy > /proc/fs/nfsd/threads". yy ist dabei die Anzahl der gewünschten Kernel nfsd-Prozesse. xxx ist der gewünschte Port, dieser wird ignoriert und grundsätzlich 2049 verwendet.

Bei "man exportfs" steht da noch etwas mehr dazu.
 
/proc/fs/nfsd ist bei mir tatsächlich gemounted gewesen, ich habe alles gestartet wie in Ralf's Beitrag #128. Muss es morgen mal ohne probieren.
 
Das beantwortet zwar nicht meine Frage, wieso es bei mir wunderbar funktioniert ohne jeglichen Eingriff und trotz belegtem 2049 (bzw. weshalb es bei jemand anderem Probleme zu geben scheint), aber interessant war es trotzdem, danke. Ich benutze übrigens Olivers Paket von Beitrag #1.
 
Ich verwende das Paket nicht, sondern habe nur mal die Programme erstellt und von Hand gestartet. Im Moment habe ich keine Verwendung für einen NFS-Server an einem USB 1 Anschluß.

Eine Möglichkeit ist, daß Du einfach Glück hast mit den Ports bei Dir. Wenn ein Programm keinen Port spezifiziert, werden Nummern von 2048 ab vergeben. Wenn dann während des Starts ein Programm den Port 2049 bekommt und dann wieder schließt, dann ist der Port erstmal frei.

Du kannst aber auch nachsehen, ob das Startskript einen anderen Port auswählt. Oliver schreibt ja "Ich hab den Port des nfsd umgelegt".
 
Das Start-Script von Oliver's Addon-Paket mountet auch kein /proc/fs/nfsd, der nfsd wird mit -p 2047 auf einen freien Port gelegt und funktioniert. Bei mir war /prod/fs/nfsd vor dem Aufruf -p 2047 gemounted und nach RalfFriedl Erklärung weiter oben wird dieser Parameter in dem Fall ignoriert und der nfsd versucht, seinen Standard-Port 2049 zu bekommen. Der war natürlich schon besetzt. Das hat mich irritiert, weil ich dachte 2047 sei belegt. Jetzt aber leuchtet es mir ein.
Ich persönlich tendiere aber zu dieser Lösung:
Code:
[I]Original von RalfFriedl [/I]
Ich habe mal in die /etc/init.d/rc.S diese Zeile eingefügt, damit sind die unteren Ports frei.

Code:
echo 40000 49999 > /proc/sys/net/ipv4/ip_local_port_range
Bin aber zu blöd, es manuell in den ds-mod einzutragen, kann mir da 'mal jemand auf die Sprünge helfen, an welcher Stelle in den Quellen es eingetragen werden muß und ob es am Anfang oder Ende des Scripts stehen muss?
 
Ich würde die hohen Ports grundsätzlich in den ds-mod aufnehmen. Es betrifft nur die die Programme, die keine konkrete Portnummer angeben, und bei denen sollte es nicht von Bedeutung sein, welcher Port zugeteilt wird.
 
Der knfsd raucht desöfteren beim stream versuch meienr dbox2 mit stack trace ab, vielleicht kann damit jemand etwas anfangen?

Code:
Dec 12 23:16:28 fritz user.warn kernel: nfsd: unexporting all filesystems
Dec 12 23:16:28 fritz user.alert kernel: CPU 0 Unable to handle kernel paging request at virtual address 0000007c, epc == 940651e4, ra == 940651e0
Dec 12 23:16:28 fritz user.warn kernel: Oops in arch/mips/mm/fault.c::do_page_fault, line 167[#1]:
Dec 12 23:16:28 fritz user.warn kernel: Cpu 0
Dec 12 23:16:28 fritz user.warn kernel: $ 0   : 00000000 1000ce01 00000000 00000000
Dec 12 23:16:28 fritz user.warn kernel: $ 4   : 00000000 00000000 00000000 0000000e
Dec 12 23:16:28 fritz user.warn kernel: $ 8   : 00040000 00000040 fffc0000 00000004
Dec 12 23:16:28 fritz user.warn kernel: $12   : 9434d6ac 00000012 9434d7b8 00000000
Dec 12 23:16:28 fritz user.warn kernel: $16   : 9442fe00 9442fe4c 00000000 00000000
Dec 12 23:16:28 fritz user.warn kernel: $20   : 00000002 00000000 95837094 95f34e78
Dec 12 23:16:28 fritz user.warn kernel: $24   : 00000000 00000008                  
Dec 12 23:16:28 fritz user.warn kernel: $28   : 944bc000 944bfe28 95fcaaf4 940651e0
Dec 12 23:16:28 fritz user.warn kernel: Hi    : 00000000
Dec 12 23:16:28 fritz user.warn kernel: Lo    : 00000000
Dec 12 23:16:28 fritz user.warn kernel: epc   : 940651e4 file_fsync+0xe4/0x104     Tainted: P     
Dec 12 23:16:28 fritz user.warn kernel: ra    : 940651e0 file_fsync+0xe0/0x104
Dec 12 23:16:28 fritz user.warn kernel: Status: 1000ce03    KERNEL EXL IE 
Dec 12 23:16:28 fritz user.warn kernel: Cause : 3080000c
Dec 12 23:16:28 fritz user.warn kernel: BadVA : 0000007c
Dec 12 23:16:28 fritz user.warn kernel: PrId  : 00018448
Dec 12 23:16:28 fritz user.warn kernel: Modules linked in: nfsd lockd sunrpc exportfs vfat fat nls_cp437 nls_iso8859_1 usb_storage sd_mod scsi_mod tiap kdsldmod usbahcicore usbcore isdn_fbox_fon4 ubik2 tiatm Piglet
Dec 12 23:16:28 fritz user.warn kernel: Process nfsd (pid: 1346, threadinfo=944bc000, task=945273f8)
Dec 12 23:16:28 fritz user.warn kernel: Stack : 95f34e78 95fcaaf4 00000000 00000000 c0245e30 95f34e78 9464184c 9464184c
Dec 12 23:16:28 fritz user.warn kernel:         c02722c4 94a50608 95fcaaf4 9464184c 94a50f00 94a50608 94a50f00 94a50608
Dec 12 23:16:28 fritz user.warn kernel:         00000000 c027557c 94187c44 944bfe80 941868d0 00000000 00000008 00000000
Dec 12 23:16:28 fritz user.warn kernel:         00000000 00000000 00000000 00000010 94a50e00 94a506f8 94a50608 94a50600
Dec 12 23:16:28 fritz user.warn kernel:         94a50400 c0288f00 94a50440 94725520 01000000 c027d360 94a50400 94a50400
Dec 12 23:16:28 fritz user.warn kernel:         ...
Dec 12 23:16:28 fritz user.warn kernel: Call Trace:
Dec 12 23:16:28 fritz user.warn kernel:  [<c02722c4>] nfsd_sync_dir+0x50/0x74 [nfsd]
Dec 12 23:16:28 fritz user.warn kernel:  [<c027557c>] nfsd_create_v3+0x3a0/0x614 [nfsd]
Dec 12 23:16:28 fritz user.warn kernel:  [<94187c44>] schedule_timeout+0xac/0xe4
Dec 12 23:16:28 fritz user.warn kernel:  [<941868d0>] schedule+0x220/0x8ec
Dec 12 23:16:28 fritz user.warn kernel:  [<c027d360>] nfsd3_proc_create+0x18c/0x1b0 [nfsd]
Dec 12 23:16:28 fritz user.warn kernel:  [<c026e82c>] nfsd_dispatch+0x12c/0x270 [nfsd]
Dec 12 23:16:28 fritz user.warn kernel:  [<c02fe1c4>] svc_recv+0x494/0x5c4 [sunrpc]
Dec 12 23:16:28 fritz user.warn kernel:  [<c02fca78>] svc_reserve+0x58/0x80 [sunrpc]
Dec 12 23:16:28 fritz user.warn kernel:  [<940b23a0>] memset+0x0/0x1c
Dec 12 23:16:28 fritz user.warn kernel:  [<c02fc2b8>] svc_process+0x51c/0x914 [sunrpc]
Dec 12 23:16:28 fritz user.warn kernel:  [<c0290000>] tiwlan_ddaFreeWbuf+0x2f94/0x3404 [tiap]
Dec 12 23:16:28 fritz user.warn kernel:  [<c0290000>] tiwlan_ddaFreeWbuf+0x2f94/0x3404 [tiap]
Dec 12 23:16:28 fritz user.warn kernel:  [<c0290000>] tiwlan_ddaFreeWbuf+0x2f94/0x3404 [tiap]
Dec 12 23:16:28 fritz user.warn kernel:  [<94030000>] send_signal+0x4/0x1a8
Dec 12 23:16:28 fritz user.warn kernel:  [<c026e4d8>] nfsd+0x26c/0x494 [nfsd]
Dec 12 23:16:28 fritz user.warn kernel:  [<c026e26c>] nfsd+0x0/0x494 [nfsd]
Dec 12 23:16:28 fritz user.warn kernel:  [<94007a0c>] kernel_thread_helper+0x10/0x18
Dec 12 23:16:28 fritz user.warn kernel:  [<940079fc>] kernel_thread_helper+0x0/0x18
Dec 12 23:16:28 fritz user.warn kernel: 
Dec 12 23:16:28 fritz user.warn kernel: 
Dec 12 23:16:28 fritz user.warn kernel: Code: 0d01930b  8e040094  0252100b <ae60007c> 8fbf0020  8fb3001c  8fb20018  8fb10014  8fb000

Hier die export options (vz. weggelassen)

Code:
(rw,anonuid=0,anongid=0,insecure,sync)
 
Zuletzt bearbeitet von einem Moderator:
Seltsam. Was macht das tiwlan da im Call Trace?

MfG Oliver
 
Muss gestehen weiss nicht welche Komponente das ist...
 
Dimi, nach meiner kürzlichen PN jetzt eben nochmal die öffentliche Belehrung im Forum: Es gibt Code-Tags (im erweiterten Editor das "#"-Symbol). Nutze sie, siehe oben.
 
okay , sorry...
Code:
Habs gefunden
 
Vielleicht kurz zur Erklärung, der Abflug mit Stack Trace ist reproduzierbar, sobald ich die sync option nutze. Sobald der mount des Clients steht und versucht wird Daten zu schreiben (Aufnahme Stream ) fliegt der knfsd ab.
 
Hast du replace kernel aktiviert? Wenn nicht könntest du mal damit probieren.

MfG Oliver
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.