SQLite3, NFS e FreeBSD: risolviamo il problema di locking dell’I/O error

Ho recentemente risolto un problema con FreeBSD, SQLite3  e un file-system montato via NFS.

Veniamo ai dettagli: FreeBSD 9.2-RELEASE (“xray“) monta un file-system condiviso via NFS da un server Linux (“zulu“), già condiviso con altre macchine, e con cui non si presentano problemi particolari.

Il comportamento particolare di FreeBSD si manifesta quando tento di aprire un database SQLite3 direttamente sul file-system condiviso:

xray # mount -t nfs -o udp, nfsv3 zulu:/exportnfs /nfs
xray /nfs % sqlite3 test.sqlite3
SQLite version 3.8.2 2013-12-06 14:53:30
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> .schema
Error: disk I/O error

Dopo varie prove, e constatando che il problema si verifica solo con FreeBSD, mi imbatto nell’interessante articolo sullo strato più basso di SQLite, quello a contatto con il sistema operativo, ovvero il VFS.
Scopro che, passando l’opzione -vfs unix-dotfiles riesco ad evitare il problema di I/O error.

Capisco quindi che il problema è tra le opzioni di locking del client NFS di FreeBSD. Soluzione? Leggo il man di mount_nfs e trovo l’opzione nolockd. Faccio un remount ed il problema è risolto!

Leave a Reply