Tag: sqlite3

  • 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!

  • Esportare gli SMS memorizzati su iPhone

    iTunes fa una copia di backup di tutto il contenuto di iPhone; tuttavia, per scrupolo, ho deciso di fare una copia di backup anche in un semplice file di testo, degli SMS che ho inviato/ricevuto, in modo che siano indicizzabili da Spotlight.

    Per prima cosa, trovate UDID del vostro device e installate il client sqlite3 da linea di comando [sqlite3 è il formato di database utilizzato da iPhone]; dopo aver fatto un backup iTunes del contenuto di iPhone, aprite un terminale e fate un dump CSV dei dati contenuti nel database degli SMS, salvato in un file locale dal backup di iTunes.

    cd ~/Library/MobileSync/UDID
    cp 3d0d7e5fb2ce288813306e4d4636395e047a3d28 ~/Desktop
    cd ~/Desktop
    sqlite3 3d0d7e5fb2ce288813306e4d4636395e047a3d28
    .header on
    .mode csv
    .output smsexport.csv
    select datetime(date, 'unixepoch', 'localtime') as "date", case when flags=3 then 'sent' else 'received' end as "from", address as phone, text as "message" from message;
    .quit

    A questo punto sul Desktop troverete un file smsexport.csv che potete aprire con un editor di testo (o con Excel) che conterra il testo di tutti gli SMS che sono memorizzati su iPhone.