NFS'deki dosya kilitleri?


18

Sunucum NFS (Ağ Dosya Sistemi) kullanıyor ve PHP'nin flock () işlevini kullanamıyorum. Bir NFS'deki dosyaları kilitlemenin bir yolu var mı veya buna ihtiyaç var mı?

Yanıtlar:


11

Manuel sayfa flock(2)uzun bir süredir güncelliğini yitirmiş, ancak o zamandan beri şu şekilde güncellendi (benimki vurgulandı):

Linux 2.6.12'den bu yana, NFS istemcileri flock () kilitlerini tüm dosyada bayt aralığı kilitleri olarak taklit ederek destekler. Bu, fcntl (2) ve flock () kilitlerinin NFS üzerinden birbirleriyle etkileşime girdiği anlamına gelir. Linux 2.6.37'den bu yana çekirdek, flock () kilitlerinin (ve ayrıca fcntl (2) bayt bölge kilitlerinin) yerel olarak işlemesine izin veren bir uyumluluk modunu destekler; bkz. nfs (5) içindeki local_lock seçeneğinin tartışılması.

Bu, man-sayfa 4.00'ün yeni sürümünü gösteren http://man7.org/linux/man-pages/man2/flock.2.html resmi man-sayfaları web sitesinden.

Linux 2.6.12, 2005 yılında piyasaya sürüldü.

Bu aslında janneb'in cevabı hakkında bir yorum olması gerekiyordu, ama o zaman itibarım yoktu. Doküman güncellemesi 2014'te oldu: http://git.kernel.org/cgit/docs/man-pages/man-pages.git/commit/man2/flock.2?id=e449654fdb3f19aafc569df47d12bffdf6276236


11

PHP flock()işlevinin nasıl uygulandığını bilmiyorum , ancak flock()syscall için bir arayüz olduğunu varsayarsak , o zaman NFS'nin her yerinde çalışmaz. Gönderen flock()man:

flock (2) dosyaları NFS üzerinden kilitlemez. Bunun yerine fcntl (2) kullanın: yeterince yeni bir Linux sürümü ve kilitlemeyi destekleyen bir sunucu verildiğinde NFS üzerinde çalışır.

Ve elbette, bir man sayfasının söylediği her şey, ne kadar modası geçmiş olursa olsun, nihai gerçektir.


+1, alaycı! NFS SSS bölümündeki D10 maddesi ayrıntılı olarak açıklanmaktadır.
themel

8

flock()PHP de dahil olmak üzere Linux NFS'de gayet iyi çalışıyor. Yoğun olarak kullanıyoruz ve istendiği gibi çalıştığını doğrulamak için kapsamlı bir şekilde test ettik. İstemci ve sunucuda gerekli tüm hizmetleri çalıştırıp çalıştırmadığınızı kontrol edin. "Portmapper" ve "rpc.statd" ifadelerini arayın. Çalışmıyorsa, hangi init betiğinin dağıtımınızda onları başlattığını bulmanız gerekir. Debian tabanlı dağıtımlarda " /etc/init.d/portmap" ve " /etc/init.d/nfs-common".

İstemciden " rpcinfo -u $NFSSERVER status" çalıştırın ve yanıt alıp almadığınızı görün. Benim kurulum sonuç olarak "program 100024 sürüm 1 hazır ve bekliyor" olsun.

Oh, ayrıca, hem istemci hem de sunucu birbirleri için güvenilir ana bilgisayar adı girişlerine sahip değilse, bazı durumlarda NFS ve statd'nin üzülebileceğini unutmayın. /etc/hostsHer iki makinede iki kez kontrol edin .


1
Gerçekten sunucuya özgü ayrıntıları değiştirmek için bir konumda değilim. Flock () işlevi php.ini dosyasından bile devre dışıdır, çünkü işe yaramaz, en azından bana söylendi.
rFactor

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.