Riparare un places.sqlite di Firefox danneggiato (segnalibri e cronologia)

Quando Firefox decide che places.sqlite è malformato, rinomina il file senza avvisare, ne avvia uno vuoto e ripristina soltanto i segnalibri da un backup: la cronologia va persa. Il vecchio database di solito è ancora leggibile pagina per pagina, e può essere ricostruito senza che lasci mai il tuo dispositivo.

Il tuo file non lascia mai il tuo dispositivo — la riparazione avviene nel browser. 0 byte caricati.

Your data is the big block — usually intact. What breaks is the small index. Repair rebuilds it.

Drop a file here or browseTap to choose a file

ZIP · Office · PDF · video · JPG · PNG · RAR/7z · SQLite — repaired right here in your browser. Nothing is uploaded

0 bytes uploadedFree: 3 repairs/day — up to 500 MB video, 100 MB docs & archives, 50 MB photos. Free download. Single repair €5.90. No account required.

Ripara ora

  1. Trascina il file
  2. La riparazione avviene in locale
  3. Scarica il risultato

places.sqlite è l'unico database SQLite in cui Firefox conserva tutta la tua cronologia di navigazione, ogni segnalibro, oltre a tag, parole chiave e annotazioni delle pagine. Quando si guasta, o vedi Firefox reimpostarsi in silenzio — i segnalibri riappaiono ma la cronologia è sparita — oppure uno strumento segnala "database disk image is malformed" (immagine su disco del database malformata). Questo è il SQLITE_CORRUPT di SQLite (codice di risultato 11): una pagina o un puntatore si è rotto e il motore rifiuta l'intero file, anche se le tue righe di solito restano intatte nelle loro pagine foglia. Rilascia places.sqlite (o il file places.sqlite.corrupt che Firefox ha lasciato) qui sopra e il recupero percorre le pagine nel tuo browser, ricostruisce lo schema e scrive un database nuovo che si apre davvero, senza caricare nulla.

Cosa contiene places.sqlite e cosa si è rotto davvero

Tutto il sistema di segnalibri e cronologia di Firefox vive in un solo file. moz_places conserva una riga per ogni URL che hai visitato o aggiunto ai segnalibri: il suo url, il suo title, rev_host (l'host invertito, per raggruppare rapidamente i domini), visit_count, last_visit_date, un guid, un url_hash e frecency, un punteggio esclusivo di Firefox che combina frequenza e recenza (frequency + recency) e ordina i suggerimenti della barra degli indirizzi. Ogni singola visita è una riga in moz_historyvisits, il cui place_id rimanda a moz_places.id. Il tuo albero dei segnalibri è moz_bookmarks: ogni riga porta un parent, una position, un title, un guid e una chiave esterna fk verso moz_places. L'albero pende da cartelle radice fisse con guid permanenti di 12 caratteri: root________, menu________ (Menu dei segnalibri), toolbar_____ (Barra dei segnalibri), unfiled_____ (Altri segnalibri), mobile______ e tags________. Intorno a esse ci sono moz_origins, moz_keywords, le tabelle di annotazioni moz_anno_attributes/moz_annos/moz_items_annos, moz_inputhistory e moz_meta. I favicon non sono qui: dalla versione 55 di Firefox vivono in un favicons.sqlite separato, nello stesso profilo.

Fisicamente, il file è un array piatto di pagine di dimensione fissa. Firefox crea places.sqlite con una dimensione di pagina di 32 KiB (PRAGMA page_size = 32768, compilata come SQLITE_DEFAULT_PAGE_SIZE) — otto volte il valore predefinito di 4 KiB di SQLite — e lo esegue in modalità WAL, quindi accanto vedrai due file gemelli: places.sqlite-wal (il registro di scrittura anticipata, il write-ahead log) e places.sqlite-shm (un indice in memoria condivisa). La pagina 1 contiene l'intestazione e lo schema; ogni tabella e indice è un b-tree le cui pagine interne puntano verso il basso alle pagine foglia che contengono le tue righe.

Questi puntatori sono il punto debole. Una scrittura interrotta, un guasto a metà di un checkpoint, un disco pieno, un settore difettoso o un byte capovolto in una pagina interna da 32 KiB bastano: SQLite segue il puntatore, trova qualcosa che non è una pagina valida e dichiara malformata l'intera immagine, mentre le tue righe restano intatte nelle pagine foglia che non ha mai raggiunto. A rompersi è stata la mappa, non i dati.

Cosa fa Firefox quando rileva la corruzione, e perché la cronologia sparisce

Firefox controlla places.sqlite all'avvio. Se l'apertura si scontra con SQLITE_CORRUPT o fallisce un controllo di integrità, il servizio Places tratta il file come inservibile e fa qualcosa di drastico senza chiedere: rinomina places.sqlite in places.sqlite.corrupt nella cartella del profilo, crea un places.sqlite nuovo e vuoto e poi ripristina i segnalibri dal file con la data più recente nella cartella bookmarkbackups: bookmarks-YYYY-MM-DD_<count>_<hash>.jsonlz4, compresso con il mozLz4 di Mozilla (un'intestazione magica di 8 byte mozLz40\0, poi una dimensione decompressa di 4 byte in little-endian e infine un blocco LZ4; non è LZ4 standard, quindi gli strumenti normali non lo aprono).

Ecco l'inghippo che spinge le persone a cercare una soluzione: viene fatto il backup solo dei segnalibri. La cronologia, i punteggi di frecency, le parole chiave e la cronologia di digitazione non vengono mai scritti in quei file .jsonlz4, quindi un reset ricostruisce in silenzio il tuo albero dei segnalibri e scarta tutto il resto. I segnalibri tornano con un bell'aspetto; mesi o anni di cronologia semplicemente spariscono dal database attivo.

Le stringhe di errore che vedrai davvero, e cosa significano: database disk image is malformed (immagine su disco del database malformata) è SQLITE_CORRUPT (codice di risultato 11): una pagina danneggiata, un offset di cella errato o un conteggio delle pagine che non concorda con la dimensione del file. file is not a database (il file non è un database) è SQLITE_NOTADB (codice 26): l'intestazione magica di 16 byte SQLite format 3\000 è danneggiata, anche se le pagine dietro di essa sono spesso intatte. E The bookmarks and history system will not be functional because one of Firefox's files is in use by another application (il sistema dei segnalibri e della cronologia non funzionerà perché uno dei file di Firefox è in uso da un'altra applicazione) è tutt'altra cosa: è un blocco (SQLITE_BUSY), di solito un secondo processo di Firefox o un antivirus che tiene occupato il file, non una corruzione. Poiché la rinomina avviene in modo automatico, quando ti accorgi della barra vuota i dati buoni sono già in places.sqlite.corrupt e il places.sqlite attivo è vuoto.

Come il recupero lo ricostruisce in locale

Invece di rattoppare il file rotto sul posto, lo strumento legge direttamente le sue pagine da 32 KiB, ricostruisce lo schema a partire dalla pagina 1, percorre il b-tree di ogni tabella e ricorre a una scansione grezza delle pagine senza puntatori per le righe che i puntatori rotti non riescono più a raggiungere: la stessa strategia del comando .recover di SQLite. I record che non possono essere attribuiti a una tabella conosciuta vengono collocati in una tabella lost_and_found anziché essere scartati, così una riga rovinata di moz_places o moz_bookmarks viene conservata invece di perdersi. Se hai ancora il file gemello places.sqlite-wal, aggiungilo nello slot opzionale: in modalità WAL, le visite e i segnalibri più recenti possono vivere solo in quel registro finché non viene fatto il checkpoint, e i suoi frame confermati vengono sovrapposti prima della scansione. Il risultato è un places.sqlite nuovo che si apre davvero e che scarichi: copialo di nuovo nel profilo con Firefox chiuso, oppure aprilo in modalità sola lettura per esportare segnalibri e cronologia.

Usa il file places.sqlite.corrupt se Firefox ha già reimpostato il tuo profilo: è lì che si trova ancora la tua cronologia. Per trovarlo, apri about:profiles e premi "Apri cartella" (Open Directory, cartella radice) del profilo in uso, oppure vai direttamente in %APPDATA%\Mozilla\Firefox\Profiles\<nome> su Windows, ~/Library/Application Support/Firefox/Profiles/<nome> su macOS o ~/.mozilla/firefox/<nome> su Linux. Copia il file altrove con Firefox completamente chiuso, così nulla lo tiene bloccato.

Perché tutto questo non deve essere caricato: places.sqlite è, letteralmente, un registro completo di ogni pagina che hai visitato. È il file che meno vorresti vedere copiato sul server di un'azienda di riparazione "solo per sistemarlo", secondo condizioni di conservazione che non hai mai letto. Qui viene letto dal tuo disco e ricostruito nella scheda del browser: puoi aprire il pannello Rete (Network) e verificare che 0 byte del database lascino mai il tuo computer.

Cosa può e cosa non può riparare

Può riparare

  • "database disk image is malformed" causato da una pagina da 32 KiB danneggiata o da un puntatore b-tree rotto, quando sopravvivono le pagine foglia che contengono le tue righe
  • La cronologia che Firefox scarta al reset: le righe di moz_places e moz_historyvisits estratte dal file anche dopo un ripristino dei soli segnalibri
  • Il file places.sqlite.corrupt che Firefox ha rinominato reimpostando il tuo profilo
  • Un'intestazione danneggiata ("file is not a database") quando le pagine dietro la firma magica di 16 byte di SQLite sono intatte
  • Visite e segnalibri senza checkpoint da un file gemello places.sqlite-wal fornito

Non può riparare

  • Righe fisicamente sovrascritte o troncate alla fine del file: quei byte non esistono più
  • Un places.sqlite che Firefox ha già sostituito con un database nuovo e vuoto (recupera invece il file .corrupt rinominato)
  • Ricostruire i favicon: vivono in un favicons.sqlite separato; recupera quel file per conto suo
  • Decomprimere un backup dei segnalibri .jsonlz4: è un archivio mozLz4, non un database SQLite (importalo dalla Libreria di Firefox stessa)
  • Un file da 0 byte, o uno che è rumore ad alta entropia da cima a fondo (prima è un lavoro di recupero dati del dispositivo di archiviazione)

Se una riparazione fallisce, ti diciamo perché (dati mancanti rispetto a struttura danneggiata), e non ti viene mai addebitato nulla per una riparazione fallita.

Domande frequenti

Firefox ha cancellato la mia cronologia ma ha conservato i segnalibri, posso recuperare la cronologia?

Spesso sì, se hai ancora il file originale. Davanti a una corruzione, Firefox ripristina solo i segnalibri (da un backup .jsonlz4) e avvia un database nuovo e vuoto; la tua cronologia in moz_places e moz_historyvisits non ha mai avuto un backup. Ma di solito esiste ancora dentro il places.sqlite.corrupt rinominato: recuperare quel file estrae di nuovo quelle righe e ricostruisce un database che porta con sé anche la cronologia, non solo l'albero dei segnalibri.

Dove trovo places.sqlite o il file .corrupt?

Nella cartella del tuo profilo di Firefox. Apri about:profiles e premi Apri cartella (Open Directory) del profilo in uso, oppure guarda in %APPDATA%\Mozilla\Firefox\Profiles\ (Windows), ~/Library/Application Support/Firefox/Profiles/ (macOS) o ~/.mozilla/firefox/ (Linux). Copia il file altrove con Firefox chiuso; se Firefox ha già reimpostato il profilo, prendi places.sqlite.corrupt invece del file attivo vuoto.

Cosa significa davvero "database disk image is malformed"?

È il SQLITE_CORRUPT di SQLite, codice di risultato 11: il motore ha seguito un puntatore e ha trovato qualcosa che non è una pagina valida: una pagina azzerata, un offset di cella errato o un conteggio delle pagine che non concorda con la dimensione del file. Si ferma alla prima incoerenza, ma le pagine che non ha mai raggiunto di solito stanno bene, ed è proprio per questo che una ricostruzione pagina per pagina recupera le tue righe.

Mi servono i file -wal e -shm?

Il file places.sqlite-shm è solo un indice in memoria condivisa e si può ignorare. Il file places.sqlite-wal conviene conservarlo: in modalità WAL, Firefox mette lì le modifiche recenti finché non viene fatto il checkpoint nel database principale, quindi le tue visite e i tuoi segnalibri più recenti possono vivere solo in quel registro. Aggiungilo nello slot opzionale e i suoi frame confermati vengono sovrapposti prima della scansione.

La mia cronologia di navigazione viene caricata per essere riparata?

No. places.sqlite viene letto dal tuo disco e ricostruito nella scheda del tuo browser; non viene trasmesso nulla. Questo conta qui più che in quasi ogni altro caso: questo singolo file è un registro completo di ogni pagina che hai visitato. Apri la scheda Rete (Network) e verifica che 0 byte lascino il tuo computer mentre il recupero è in esecuzione.

Correlati: Recuperare qualsiasi database SQLite · Riparare una cartella di lavoro Excel · Riparare un PDF · Verificare la promessa di zero upload