Ich bin heute auch auf eine Variante davon gestoßen. Mysteriös ist eine meiner Dateien verschwunden (oder hat es nicht bei einer Migration von einem anderen Server geschafft). Keines der Reparatur-/Wiederherstellungsprozeduren würde funktionieren, wenn derselbe Fehler fehlschlägt, auf den Sie verweisen. Zum Glück habe ich einen separaten Mongod, der eine Sammlung mit dem gleichen Namen hat, so dass ich als billigen Hack die (zugegeben falsche) Datendatei auf den anderen Server kopiert habe, und während ich wusste, dass ich keine Daten zurückbekomme, die Reparaturwerkzeuge (wie mongod --repair
) waren dann in der Lage, ihre Magie zu arbeiten, aber wie erwartet, erholten sie einige Daten von der schlechten Datei, die ich kopierte, also musste ich einige Dokumente aussortieren. Zum Glück war es die "mycollection.1" -Datei, die nur 128 MB groß ist.
Ich denke nicht, dass dies in Ihrem Fall gilt, da der Index der fehlenden Datendatei, über die Ihr Protokoll spricht, lächerlich hoch ist. Ihr Protokoll sagt im Wesentlichen, dass es /data/dbname/mycollection.8388701
nicht finden kann. Sie sagten, Ihr Datensatz sei nur 400 GB, also macht ein hoher Index keinen Sinn. Sie sollten nur etwa 200 Datendateien haben, da die meisten standardmäßig 2 GB groß sind. Was ist das Ergebnis von db.stats()
(speziell das FileSize-Attribut)?
Diese mongolab blog entry hat mir geholfen, die Datendateistruktur zu verstehen.
Mein Rat für, wo Sie beginnen, sollten:
- führen Sie den Befehl
db.stats()
eine Vorstellung davon zu bekommen, wie groß Ihre Daten auf Scheibe tatsächlich ist.
- Macht es Sinn, dass Ihr Server nach einer Datendatei mit einem verrückten hohen Index sucht? Wenn nicht, ist das Problem nicht wirklich mit Speicher, sondern mit den Extents und den Metadaten Ihrer Sammlung/Datenbank.
- Funktionieren Ihre Reparaturwerkzeuge? Wenn Sie mindestens über genügend freien Speicherplatz als die Größe Ihres Datensatzes (auf Datenträger) verfügen, versuchen Sie die
mongod --repair
oder db.repairDatabase()
Tools, um eine Reparatur zu starten. Ich gehe davon aus, dass es nicht funktioniert, seit meine Reparaturversuche mit demselben invalid file index requested
Fehler abgestürzt sind.
- Versuchen Sie, eine "schlechte" Datei zu kopieren, so wie ich es ungefähr so gemacht habe, wie die fehlende Datei aussehen würde (beachten Sie, dass die Dateigrößen der Datendateien nicht alle gleich sind) versuche eine Reparatur). Wenn das funktioniert, werden Ihre Datendateien aufgeräumt (aber es braucht viel Speicherplatz).
Hoffe, dass hilft Ihnen in die richtige Richtung.