Come riparare i segnalibri di Firefox

Sui miei Mac installo parecchi browser ma poi uso quasi sempre solo Firefox. Un po’ perché sono fedele, sono passato senza soluzione di continuità da Netscape a Mozilla a Firefox e non ho motivi seri per cambiare. E poi perché Firefox è multipiattaforma e può sincronizzare tutte le impostazioni e i dati personali (segnalibri, storia di navigazione, add-on, schede aperte, volendo anche le password) via cloud, una funzione utilissima quando si usano più Mac o si ha a che fare con computer e sistemi operativi diversi.

Certo, anche Google Chrome funziona ovunque, ma volete mettere il rispetto della privacy di quelli di Mozilla (la fondazione che supporta lo sviluppo di Firefox e del client di posta elettronica Thunderbird) con, diciamo così, la curiosità di Google?

Non che Firefox non abbia i suoi problemi. La ristrutturazione del codice di due anni fa ha reso il browser molto più veloce, ma purtroppo parecchie estensioni non sono mai state aggiornate per funzionare con il nuovo modello di codice (a me manca moltissimo ScrapBook che usavo per archiviare le pagine web e non sono ancora riuscito a rimpiazzarlo con qualcosa di altrettanto efficace).

E poi ci sono i segnalibri (bookmark per gli anglofili, preferiti per chi usa Safari). Se come me avete tanti segnalibri, non provate a sincronizzarli tramite il cloud di Firefox: è snervante, basta aggiungerne uno per innescare la sincronizzazione e intanto il browser rallenta in modo evidente. Per molto tempo, ad ogni nuova versione di Firefox ho sperato che ci fossero dei progressi in questo campo, ma poi sono sempre tornato a sincronizzare i miei segnalibri tramite Dropbox; la configurazione iniziale può essere un po’ fastidiosa, ma dopo va che è un piacere (varrebbe la pena riparlarne, prima o poi).

Firefox ha un problema ancora più serio con i segnalibri, che si presenta quando il browser va in crash. Ma prima bisogna fare una premessa.

Segnalibri e database

Da moltissimo tempo ormai Firefox salva i segnalibri in places.sqlite, un database SQLite che in macOS si trova nella cartella
~/Library/Application Support/Firefox/Profiles/abcd1234.default/ (come sempre ~ rappresenta la Home dell’utente). Questa cartella contiene tutti i file di configurazione e i database del browser, cioè il cosiddetto profilo dell’utente.1
Il nome abcd1234.default della cartella del profilo utente è solo un nome generico, il nome reale è costituito da una sequenza casuale di otto lettere e numeri seguiti dalla stringa .default e viene generato quando usiamo per la prima volta Firefox sul nostro computer, oppure quando lo ripristiniamo per correggere eventuali problemi.

Nelle versioni più recenti di Firefox il nome di questa cartella segue un nuovo formato, abcd1234.default-1234567890123 (otto lettere e numeri seguiti dalla stringa .default, da un trattino - e da altri 13 numeri), ma il succo del discorso non cambia, per cui nel seguito continuerò ad utilizzare per semplicità il formato più vecchio (e più breve).

Il nome della cartella del profilo utente può essere ricavato dal Terminale con il comando

$ ls -al ~/Library/Application\ Support/Firefox/Profiles/

In alternativa possiamo selezionare da Firefox la voce di menu Aiuto → Risoluzione dei problemi oppure scrivere about:support nella barra degli indirizzi (Figura 1). Si apre una pagina che contiene parecchie informazioni utili, fra cui il percorso completo alla cartella del profilo, a cui si può accedere dal Finder cliccando sul bottone cerchiato in rosso (Figura 1). Da questa pagina possiamo anche ripristinare il browser o riavviarlo con le estensioni disattivate.


Figura 1. Strumento per la risoluzione dei problemi di Firefox.


NOTA Ricordo che da Windows 7 in poi (in effetti da Vista, ma chi lo usa ancora?), la cartella del profilo di Firefox si trova in C:\Users\<nome utente>\AppData\Roaming\Mozilla\Firefox\Profiles\, mentre in Windows XP è in C:\Documents and Settings\<nome utente>\Application Data\Mozilla\Firefox\Profiles\. Su Linux invece la cartella del profilo si trova in ~/.mozilla/firefox/, dove come in macOS ~ rappresenta la Home dell’utente.


Quando Firefox va in crash

Usare un database per gestire i segnalibri è molto efficace, soprattutto quando il numero di segnalibri memorizzati è piuttosto grande.2 Inoltre, un database consente di implementare un meccanismo di sicurezza in base al quale tutte le operazioni da effettuare (inserimento di nuovi dati, cancellazioni, spostamenti e così via) vengono prima salvate in un file separato, che in Firefox si chiama places.sqlite-wal, per essere poi applicate al database principale places.sqlite solo al momento della chiusura del browser.3

Una volta conclusa l’operazione di aggiornamento di places.sqlite, il file places.sqlite-wal non serve più e viene cancellato. Quando eseguiamo di nuovo Firefox, il browser crea un nuovo file places.sqlite-wal in cui salvare le nuove modifiche ai segnalibri e il ciclo ricomincia.

Ma se Firefox in crash (ormai succede di rado ma succede), le modifiche contenute nel file wal non possono essere applicate al database places.sqlite. In genere non è un problema, al primo riavvio Firefox nota che places.sqlite-wal è ancora sul disco rigido e lo utilizza per aggiornare il database principale.

Purtroppo a volte qualcosa va storto, magari il crash avviene proprio mentre Firefox sta scrivendo nel file wal, magari Firefox si blocca e dobbiamo forzarne la chiusura, magari ci sono problemi durante la sincronizzazione dei segnalibri via cloud o via Dropbox, magari il file wal viene cancellato per sbaglio. In tutti i casi, l’effetto finale è che il database places.sqlite si corrompe e ci si ritrova con dei segnalibri scomparsi o con Firefox che fa i capricci. La funzione di ripristino del browser esiste anche per questo, basta usarla e tutto dovrebbe andare a posto, mantenendo inalterate tutte le impostazioni e i dati personali.

Ma un (brutto) giorno si lancia Firefox e si scopre di aver perso tutti i segnalibri…

Riparare il database

È proprio quello che è successo a me qualche settimana fa. Per fortuna Firefox fa periodicamente il backup dei segnalibri sul Mac, per cui possiamo sempre recuperare una versione precedente di places.sqlite perdendo al massimo le aggiunte degli ultimi giorni. E se per qualche motivo il backup di Firefox non funzionasse, c’è sempre la possibilità di recuperare le ultime versioni di places.sqlite da Time Machine, dall’account Dropbox o dal cloud di Firefox (per chi lo usa).

Ma che fine hanno fatto i segnalibri scomparsi? Andando a curiosare nella cartella del profilo (come già notato più sopra, lo si può fare dal Terminale con il comando cd ~/Library/Application Support/Firefox/Profiles/abcd1234.default/ seguito da ls -alh places*, oppure selezionando la voce di menu Aiuto → Risoluzione dei problemi e cliccando sul bottone Mostra nel Finder posto accanto alla voce Cartella del Profilo, come mostrato in Figura 1), oltre al solito places.sqlite si trova un altro file piuttosto grande, places.sqlite-corrupt. La dimensione di places.sqlite è decisamente piccola, troppo piccola per poter contenere tutto l’elenco dei segnalibri. È evidente che i veri segnalibri sono nel secondo file, quello che Firefox considera “corrotto”, mentre places.sqlite è solo un database quasi vuoto, generato automaticamente all’avvio da Firefox.

Quando è successo a me, la prima cosa che ho fatto è stata quella di ripristinare il browser creando un nuovo profilo, sostituendo poi il file places.sqlite generato automaticamente con la copia più recente che avevo su Dropbox. Firefox ha funzionato senza problemi per un giorno o due, poi ha deciso che places.sqlite era di nuovo corrotto e mi sono ritrovato di nuovo senza segnalibri. Chiaramente ci voleva una soluzione migliore.

La rete ha tutte le risposte, basta solo trovarle (cosa spesso non molto facile, dato il marasma di sciocchezze che si trova in rete). Ne ho lette tante, finché non sono arrivato all’articolo, places.sqlite Database Troubleshooting, contenuto nel sito ufficiale degli sviluppatori di Mozilla. L’articolo è molto chiaro, si vede che è scritto da gente competente, mi è bastato seguire pedissequamente le istruzioni per riparare il file places.sqlite e risolvere definitivamente il problema.

L’articolo però è scritto da sviluppatori per sviluppatori e presuppone che chi lo legge conosca perfettamente (o quasi) i comandi per gestire un database SQLite dal Terminale. In realtà proprio all’inizio viene citata una estensione piuttosto nota, Places Maintenance, che dovrebbe fare automaticamente quanto descritto nel testo. Ma il link non funziona più e quindi sembra che non ci siano alternative all’uso del Terminale.4

Ho deciso quindi di riportare le istruzioni presenti nell’articolo e di spiegare cosa fa ciascuna di esse, cercando così di rendere fruibile la procedura anche a chi non è molto esperto di Terminale o di database.

Le istruzioni commentate

Come già detto, per riparare places.sqlite bisogna usare necessariamente il Terminale. Chi non è pratico, prima di andare avanti farebbe bene a leggere le istruzioni di base per usare il Terminale sul Mac.

Prima di iniziare a lavorare è bene chiudere Firefox, in modo da evitare conflitti nel momento in cui ripristineremo la versione riparata del file places.sqlite.

Lanciamo il Terminale (come sanno bene i lettori più affezionati di questo blog, il Terminale si trova nella cartella Applicazioni → Utility), creiamo sul Desktop (o dove preferiamo) la cartella di lavoro fixplaces

$ mkdir ~/Desktop/fixplaces

e copiamo in questa cartella il file places.sqlite-corrupt dal nostro profilo Firefox, in modo da lavorare su una copia e non sul file originale

$ cp -p ~/Library/Application Support/Firefox/Profiles/abcd1234.default/places.sqlite-corrupt ~/Desktop/fixplaces

(naturalmente nel comando precedente bisogna sostituire a abcd1234.default il vero nome della cartella contenente il nostro profilo Firefox). Spostiamoci ora nella cartella di lavoro

$ cd ~/Desktop/fixplaces

e iniziamo il processo di riparazione del database. In macOS è installato di default il programma sqlite3, che permette di interagire dal Terminale con un database SQLite. Lanciamo sqlite3, facendo seguire al nome del programma quello del database su cui deve operare

$ sqlite3 places.sqlite-corrupt
sqlite>

Il prompt del Terminale diventa sqlite>, ad indicarci che siamo entrati in una sessione di lavoro SQLite.

La prima cosa da fare è controllare l’integrità del database contenente i segnalibri places.sqlite-corrupt, in modo da essere sicuri che ci siano veramente dei problemi

sqlite> PRAGMA integrity_check;

Attenzione, non dimenticate mai di aggiungere il ; alla fine di ciascuna istruzione SQLite!

Se il controllo dell’integrità del database non da errori possiamo uscire dalla sessione SQLite con

sqlite> .exit

(un comando SQLite puntato non ha bisogno del ; finale) e chiederci cosa possa essere successo (chissà, magari abbiamo trovato un baco e in quel caso faremmo bene ad avvisare gli sviluppatori di Mozilla).

Ma se Firefox considera corrotto il file places.sqlite-corrupt, è molto difficile che il controllo di integrità dia un esito positivo, per cui nella stragrande maggioranza dei casi dovremo andare avanti eseguendo

sqlite> .clone places.sqlite

che clona il database corrotto places.sqlite-corrupt nel nuovo file places.sqlite e mentre lo fa ripara automaticamente la struttura delle tabelle. Fatto questo eseguiamo un ultimo comando

sqlite> PRAGMA user_version;

che ci restituisce un numero intero NN (nel mio caso era 52) che dobbiamo segnarci da qualche parte perché ci servirà fra poco. Abbiamo finito di lavorare sul database places.sqlite-corrupt e quindi usciamo dalla sessione SQLite con il comando

sqlite> .exit
$

che ci fa tornare al solito prompt di bash. A questo punto dobbiamo eseguire di nuovo il programma sqlite3, lavorando questa volta sul database clonato places.sqlite

$ sqlite3 places.sqlite
sqlite>

Ripetiamo il controllo di integrità (la prudenza non è mai troppa),

sqlite> PRAGMA integrity_check;

che questa volta dovrebbe dare esito positivo.

Siamo a buon punto, ma ci sono ancora dei dettagli da sistemare. Prima di tutto dobbiamo inserire nel database clonato il valore della variabile user_version, cioè il numero intero NN che ci siamo segnati poco fa

sqlite> PRAGMA user_version = NN;

poi dobbiamo azzerare il file wal

sqlite> PRAGMA journal_mode = truncate;

aggiornare la dimensione delle pagine in cui è suddiviso il file del database

sqlite> PRAGMA page_size = 32768;

ripulire definitivamente la struttura del database

sqlite> VACUUM;

e infine ripristinare l’uso del file wal

sqlite> PRAGMA journal_mode = wal; 

Abbiamo finito, per cui possiamo eseguire

sqlite> .exit
$

e tornare di nuovo a bash. L’ultimissima cosa da fare è copiare il file riparato places.sqlite dalla cartella di lavoro al nostro profilo Firefox (prima di farlo non dimenticate di controllare che Firefox sia chiuso)

$ cp -p places.sqlite ~/Library/Application Support/Firefox/Profiles/abcd1234.default/

Finalmente possiamo eseguire di nuovo Firefox e, se non abbiamo fatto errori, ritroveremo di nuovo tutti i segnalibri. Quando siamo sicuri al 100% che tutto funzioni correttamente, possiamo cancellare il file places.sqlite-corrupt dal profilo di Firefox, tanto non ci serve più (e comunque c’è sempre Time Machine).

Conclusioni

Mettere le mani in un database non è una cosa semplice e mette sempre un po’ di ansia. Ma queste istruzioni sono davvero a prova di bomba (gli sviluppatori di Mozilla sanno il fatto loro), basta solo seguire le istruzioni con un po’ di attenzione e di pazienza e tutto dovrebbe andare bene. In caso contrario, segnalatemi i problemi nei commenti e farò il possibile per rispondere.


  1. Per confronto, Safari salva i segnalibri in Bookmarks.plist, un file XML che si trova in ~/Library/Safari/, mentre Chrome usa un file JSON, Bookmarks, situato in ~/Library/Application Support/Google/Chrome/Default/
  2. Le prime versioni di Firefox salvavano i segnalibri in un semplice file HTML, bookmarks.html. Il passaggio al database places.sqlite si è dimostrato una scelta azzeccata, ma all’inizio era stato accolto con parecchio scetticismo. 
  3. Il suffisso wal sta per write-ahead logging, un tipo particolare di file di journaling
  4. Una volta finito di scrivere l’articolo ho scoperto che Places Maintenance è stato integrato in Firefox e che per utilizzarlo basta andare quasi in fondo alla pagina about:support e premere il bottone Verifica integrità che si trova sotto l’intestazione Database Places (Figure 2 e 3). Avendo già risolto il problema tramite la procedura descritta nell’articolo, non ho però potuto verificarne l’efficacia.

    Figura 2. Verifica dell’integrità del database dei segnalibri tramite lo strumento integrato in Firefox.

    Figura 3. Risultato prodotto dallo strumento di verifica dell’integrità del database dei segnalibri. 
Tagged with: , , , , , , ,
Pubblicato su software
7 comments on “Come riparare i segnalibri di Firefox
  1. MailMasterC ha detto:

    Storia biografica simile alla mia, anche io ho trasferito i bookmarks da Netscape a Firefox (pur avendo iniziato le mie peregrinazioni digitali con Mosaic e Lynx) anche io resto fedele a Mozilla, ma devo dire che non ho mai avuto problemi (che io ricordi, quindi non negli ultimi 15-20 anni) di bookmark corrotti. Piuttosto, mi chiedo perché li tengo ancora, quando di fatto ne uso forse 4-5 di tutti quelli memorizzati e quando una volta ogni 2-3 anni vado a fare pulizia scopro che molti sono disattivati o puntano ad altro. Devo dire che li tengo quasi per nostalgia… sarà anche che ho cambiato il mio modo di usare il pc e soprattutto la mia presenza davanti allo schermo, eppure i bookmarks oggi mi sembrano così desueti, quando 10 anni fa erano la mia vita (o quasi!).
    E comunque anche a me ScrapBook manca tantissimo! Lo usavo poco, ma quando serviva era di una comodità assoluta!

    Piace a 1 persona

    • Sabino Maggi ha detto:

      Forse è un problema di dimensioni del file places.sqlite, io uso moltissimo i bookmark e quindi ne ho salvati tanti (e sto anche provando a metterli in modo più razionale, ma è un lavoro molto lungo e noioso). Come fai a non usare i bookmark?
      Tanto per fare un esempio, io conservo i link a decine e decine di siti che contengono informazioni importanti per ogni argomento di lavoro che devo affrontare, al software che uso, ad articoli che mi interessa potenzialmente rivedere, etc. Prima questi ultimi li salvavo in Scrapbook ma ora non posso fare altrimenti.

      PS La mia cartella Scrapbook contiene ~7GB di dati e quasi mezzo milione di file, lo so perché prroprio ieri ho dovuto trasferirla da un Mac in dismissione a quello che devo usare da ora in poi e mi ha fatto letteralmente impazzire. Ho provato tre modi diversi per copiare la cartella e ovviamente ha funzionato solo il terzo…

      "Mi piace"

      • MailMaster C. ha detto:

        Credo che semplicamente uso il pc e soprattutto internet in modo diverso da qualche anno fa. Prima dell’arrivo di google avere una buona dotazione di bookmark era essenziale, perché le capacità di discovery di altavista o yahoo erano scarse comparate alle attuali. Oggi, se mi serve qualche informazione, sto prima a cercarla su google (e ritrovarla) che andare a ravanare sui miei ormai scarsi bookmark (già organizzati per tematiche e sottocartelle, ovviamente, alla old style!). Per lavoro non faccio più ricerca di nulla, e comunque molti siti sono bloccati, per esempio non posso scaricare i paper da academia.edu pur accedendo al sito, sembra perché il repository non sia gradito ai firewall aziendali.
        Le mie attività personali si stanno distaccando dall’uso intensivo del PC ed internet in particolare, e la 30ina di tab oggi aperte sono tutti i siti che mi servono adesso (e circa metà di queste la settimana prossima le faccio fuori).
        Articoli interessanti da rileggere finiscono tutti su pocket (ho un back log di almeno 5 mesi!).
        Scrapbook lo usavo sporadicamente per salvare qualche pagina annotata, ma ormai è roba passata. Però con il passaggio che hai fatto hai materiale per un’altro articolo! 🙂
        Insomma, per me i bookmark organizzati e ordinati oggi non sono una priorità, anzi, potrei anche farne a meno… ma sono nostalgico! 🙂

        PS: ma su twitter ti è partito il dito sul forward dei tuoi precedenti tweet? 🙂

        "Mi piace"

        • Sabino Maggi ha detto:

          Io invece ho bisogno di ritrovare un bel numero di siti, sia per motivi di lavoro che per altro. Faccio un esempio: in questo momento uso moltissimo R e Python (e Jupyter), quando trovo documentazione interessante in proposito salvo i link nei bookmark per poterla recuperare facilmente, andare solo a memoria per me è impossibile. Ecco perché usavo massicciamente Scrapbook (e prima ancora salvavo il pdf della pagina), ora che non c’è più i bookmark sono indispensabili. Ovviamente cerco di tenerli organizzati per sottocartelle (old style, proprio come te), è faticoso ma è anche molto più veloce quando devo recuperarne qualcuno.

          Pocket mi piace molto, ma lo uso solo per le letture rilassanti o curiose, farei sempre il confronto con Scrapbook e sarebbe improponibile. 😱

          "Mi piace"

        • Sabino Maggi ha detto:

          Academia.edu ormai è praticamente solo a pagamento, molto meglio ResearchGate. E per scaricare gli articoli scientifici, se non hai un accesso “istituzionale” e non li trovi su ResearchGate o nei siti personali degli autori, la soluzione migliore è SciHub. Io lo uso spesso anche se ho un accesso “istituzionale”, è molto più veloce degli strumenti ufficiali. 😴

          "Mi piace"

          • MailMaster C. ha detto:

            C’è in particolare un autore che seguo volentieri che pubblica su Academia.edu, quindi qualche paper interessante lo prendo da lì, ma di mio non ci ho messo nulla; chi seguo evidentemente crede nella condivisione delle informazioni e i suoi articoli sono gratuiti.
            ResearchGate non lo conosco, grazie.
            SciHub e LibGen sono fedeli compagni da molto tempo, anche se li uso poco perché non faccio ricerca di mio, quindi giusto quando mi incuriosisce qualche articolo o libro provo a cercarli lì. Poi avere il tempo di leggere quello che scarico è un altro paio di maniche! 🙂

            "Mi piace"

        • Sabino Maggi ha detto:

          Però con il passaggio che hai fatto hai materiale per un’altro articolo!

          Purtroppo è una questione troppo specifica per essere utile ad altri. Ma per fortuna il materiale da scrivere non manca, anzi, quello che manca è il tempo per mettersi al Mac a raccontare.

          ma su twitter ti è partito il dito sul forward dei tuoi precedenti tweet?

          Solo un esperimento, nemmeno troppo riuscito. Dovrei ripeterlo in modo più sistematico, ma non ho nessuna voglia di “studiare” i meandri del funzionamento di Twitter.

          "Mi piace"

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo di WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione /  Modifica )

Google photo

Stai commentando usando il tuo account Google. Chiudi sessione /  Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione /  Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione /  Modifica )

Connessione a %s...

Questo sito utilizza Akismet per ridurre lo spam. Scopri come vengono elaborati i dati derivati dai commenti.

Informativa
Questo sito utilizza cookie di terze parti per inviarti pubblicità e servizi in linea con le tue preferenze. Se vuoi saperne di più o negare il consenso a tutti o ad alcuni cookie, clicca qui. Scorrendo questa pagina, cliccando su un link o su qualunque altro elemento o proseguendo la navigazione in altra maniera, acconsenti all'uso dei cookie.
Follow MelaBit on WordPress.com
Categorie
%d blogger hanno fatto clic su Mi Piace per questo: