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!