Portál AbcLinuxu, 10. května 2025 05:35
Mám na serveru připojené dva vzdálené filesystémy (CIFS a SSHFS) a na nich jsou soubory, které jsou čteny jedním démonem.
Občas se ale musí server odpojit od sítě (neřešte proč ) a pak nastává problém, že všechny programy, které z mountpointů čtou nebo se do nich snaží přistoupit prostě zamrznou. Zatuhne prostě celý proces a nejde s tím nic dělat než ručně sestřelit (někdy nejde ani to).
Nelze někde nastavit nějaký timeout, po kterém by se share prostě prohlásil za nedostupný a sám se odpojil? Ten výše zmiňovaný démon se s tím vyrovná - prostě ten soubor nenajde a bude to periodicky zkoušet. Bohužel v případě jeho kompletního zatuhnutí to nejde. On zatuhne i bash, když do složky snažím přistoupit...
Na připojení používám autofs, takže to by problém nebyl. Jen s tím odpojení nedostupného...
Díky
CIFS standardně má zapnutý parametr připojení soft, takže proces po vypršení časového limitu dostane chybový kód (přečtěte si mount.cifs(8)).
Co ale může být problém, a je to záležitost individuální potřeby, je velikost časové limitu. Na současných jádrech by měl být 60 sekund.
Nebo si upravit jádro. fs/cifs/connect.c:
static bool server_unresponsive(struct TCP_Server_Info *server) { /* * We need to wait 2 echo intervals to make sure we handle such * situations right: * 1s client sends a normal SMB request * 2s client gets a response * 30s echo workqueue job pops, and decides we got a response recently * and don't need to send another * ... * 65s kernel_recvmsg times out, and we see that we haven't gotten * a response in >60s. */ if (server->tcpStatus == CifsGood && time_after(jiffies, server->lstrp + 2 * SMB_ECHO_INTERVAL)) { cifs_dbg(VFS, "Server %s has not responded in %d seconds. Reconnecting...\n", server->hostname, (2 * SMB_ECHO_INTERVAL) / HZ); cifs_reconnect(server); wake_up(&server->response_q); return true; } return false; }
a SMB_ECHO_INTERVAL je definováno v cifsglob.h:
/* SMB echo "timeout" -- FIXME: tunable? */ #define SMB_ECHO_INTERVAL (60 * HZ)
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.