Linux: CIFS / Samba montajı birkaç dakika kilitleniyor


26

Gentoo ve Windows kutusu olan küçük bir yerel ağım var. Windows kutusundan kaynaklanan bir paylaşım Gentoo kutusuna şöyle bir komutla bağlarım:

mount -t cifs -o username=WindowsUsername,password=thepassword,uid=pistos //192.168.0.103/Users /mnt/windowsbox

Çoğu zaman, her şey sadece işe yarıyor ve sorunsuz okuyup yazabiliyorum. Bununla birlikte, birkaç haftada bir, bağlantı veya bağlama noktası kesiliyor veya takılıyor gibi görünüyor, böylece bağlama noktasına erişmeye çalışan herhangi bir işlem D durumunda (disk veya G / Ç beklemesi) sıkışmış olur. Bu işlemler TERM ve KILL sinyallerine karşı geçirimsiz hale gelir. Windows kutusunun ağdan çıkarılması ve yeniden bağlanması yardımcı olmuyor. Dondurulmuş durum 5+ dakika sürer. Bu gerçekten sinir bozucu ve normal bir işe giriyor, çünkü Farklı Kaydet diyaloglarını, lskomutlarını vb umount. Sonunda, ölü durum kendiliğinden çözülür ve bağlama noktası sökülmez veya umountgecikme olmadan mümkün olur .

Benim tahminim, bu bağlantı / mount boşta olduğunda ya da Windows makinesi boşta olduğunda oluyor. Ben gerçekten emin değilim.

Bu neden oluyor ve bunu önlemek için ne yapabilirim? Veya bu D-durum süreçlerini nasıl başarılı bir şekilde öldürebilirim?

Muhtemelen ilgili: CIFS bağları beklemeye devam ediyor


1
İki makine arasında herhangi bir tür güvenlik duvarı kullanılıyor mu?
Schrute

@Schrute: Linux'ta hangi varsayılanların (iptables?) Olduğunu ve Windows'un çalıştığını farz ediyorum. Güvenlik duvarlarının bağlantıların zaman aşımına uğradığını mı düşünüyorsun? Böyle bir şeyi hiç duymamıştım.
Pistos

Bunun linux kutusunun bir sorunu olabileceğini düşünüyorum. Benzer bir sorun gördüm - cifs ve Windows ile değil - ancak nfs paylaşımına bağlı. Tasarruf mümkün değildi - Var olan nfs sunucusuna erişilirken bazı işlemlerin askıya alınmasından kaynaklandığını tahmin ediyorum. Bu genellikle sunucu kilitlendiğinde olur.
cornelinux

1
Tavsiyem linux makinesinde bir halka-tampon ağ yakalaması ayarlamaktır (yani, tcpdump -i eth0-C5 -W 10 -s 0 -v -w -w /tmp/cifs.pcap host 192.168.0.103 Bağlantıyı kestiğinizde işlemin sona ermesini önlemek için ekranın alt kısmında). Sorun oluştuğunda, birkaç saniye sonra izlemeyi durdurun ve en azından paket izini incelerken hangi tarafın soruna neden olduğunu belirleyebilmelisiniz (ör. Sunucu yanıt vermiyor, oturum bağlantısı kesiliyor vb.).
GeekyDeaks

1
@Pistos - Wireshark senin arkadaşın! İzler kafa karıştırıcı görünebilir, ancak wireshark yardımcı olmak için karelerin kodunu çözecektir. İlk önce, oturumu bırakan sunucu veya istemci (FIN paketleri) gibi temelleri ortadan kaldırmak, ardından sunucu yanıt vermiyor gibi diğerlerine ilerlemek istiyorsunuz. Vaktiniz varsa, 2013'te CIFS'te bir sharkfest videosu vardı ( youtube.com/watch ? v = XbvFXSPig-w ) ama çok uzun :)
GeekyDeaks

Yanıtlar:


11

Sorunun neden olduğundan emin değilsiniz, ancak geçici bir çözüm olarak, her dakika kron gibi bir şey koymaya touch /mnt/windowsbox/keepalive.txtya echo "I am still alive." >/mnt/windowsbox/keepalive.txtda çalıştırmaya çalıştınız mı? Bu şekilde bağlantı aktif kalmalıdır.


İyi bir fikir. Bunu yerine koydum ve ne olacağını göreceğim.
Pistos

2
Bu problemi çözmüş gibi görünüyor, söylemeliyim
Pistos

Bunu duymak güzel!
Janne Pikkarainen

1
Pat cevabı @ göre, tek bir kalp atışı ile ilgili olacak bir kalp atışı için her dakika, her biri 5 dakika (300 saniye) bu Döşeme olabilir */5 * * * *crontab planı içinde
woodvi

Bunu şimdilik kullanıyorum. 3 gün içinde, birkaç saat yeniden başlatıldıktan sonra üç ayrı Ubuntu Server 16 LTS makinem (iki fiziksel, bir VM) SMB bağlantılarını bıraktım. Başlangıçta, SMB bağlantısı sorunsuz monte edilir, ancak sonunda yanıt vermez hale gelir.
user38537,


0

Başka bir olası cevap, cron aracılığıyla düzenli aralıklarla bağdaki bir dosyaya yazılmasını önerdi. Bunun yerine, paylaşıma bağlanmak ve bağlantıyı kesmek için smbclient programını kullanmanızı öneririm.

Bunu başarmak için böyle bir bash betiği yazdım:

#!/bin/bash

su usernamehere -c "smbclient \\\\\\\\\\\\\\\\servernamehere\\\\\\\\sharenamehere passwordhere -c exit" >/dev/null 2>&1

Bu komut, paylaşıma yeni bir bağlantı yapar ve daha sonra komut komutunda yeni kurulan bağlantıyı hemen keserek exit komutunu çalıştırır. Sunucu adından önce 8 ve paylaşım adından önce 4 eğik çizgi olmalıdır, çünkü ters eğik çizgilerden kaçılması gerekir ve çift tırnaklı bir dizginin içindeyken çıkışlardan kaçılması gerekir. Belki bunu yapmanın daha akıllıca bir yolu vardır, ancak bu işe yaramış gibi görünüyor.

Belki de bir seferde birkaç dakika boyunca bağlantıyı açık tutmasını sağlayarak bunu daha da güvenilir hale getirmenin bir yolu var, ama bu benim ligimin biraz dışında.


İlginç bir teklif. Diğer çözümle daha önce başaramadığım bir şey olsa bile, gitmeliydim.
Pistos,

Bunun nasıl yardımcı olacağını anlamıyorum? Janne'nin çözümü, cifs müşterisi tarafından yapılan bağlantıyı canlı tutuyor, oysa bu, smbclient ile yeni, ilgisiz bir bağlantı yaratacaktı - bu nasıl yardımcı olabilirdi?
flungo

1
Bilginize, smbclient ters eğik çizgi yerine bunları kullanmak istiyorsanız, eğik çizgi destekler, bu yüzden //servername/sharnamekaçan gereken yerlerde çok daha kolaydır.
Steve Friedl
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.