Problem
Sie sehen eine dieser Meldungen in Ihrem error.log:
*WARN * BLOBInDataStore: getSize for a586f73ec77fba3135021af01c7f09d972eb3e01 failed (BLOBInDataStore.java, line 95) org.apache.jackrabbit.core.data.DataStoreException: Record not found: a586f73ec77fba3135021af01c7f09d972eb3e01 org.apache.jackrabbit.core.data.DataStoreException: Failed to read record modified date: /opt/author/crx-quickstart/repository/shared/repository/datastore/6f/b6/14/6fb61425b9187a97f9404cee290cc255177c702e Caused by: java.io.FileNotFoundException: /opt/author/crx-quickstart/repository/shared/repository/datastore/6f/b6/14/6fb61425b9187a97f9404cee290cc255177c702e at org.apache.jackrabbit.core.data.LazyFileInputStream.<init>(LazyFileInputStream.java:63) at org.apache.jackrabbit.core.data.FileDataRecord.getStream(FileDataRecord.java:57) ... 114 more
Lösung
Dieser Fehler bedeutet, dass Dateien in Ihrem AEM-Datenspeicherverzeichnis fehlen. Weitere Informationen dazu, was der Datenspeicher ist und wie er funktioniert, finden Sie in dieser Dokumentation. Der Verlust von Datenspeicherdateien kann auf einen Fehler bei der Datenspeicherbereinigung, einen Festplattenspeicherausfall, eine Datenträger- oder Netzwerkfreigabe-Instabilität zurückzuführen sein. Möglicherweise liegt es auch daran, dass ein Benutzer fälschlicherweise Dateien vom Server löscht.
Um die fehlenden Dateien wiederherzustellen, führen Sie die folgenden Schritte aus.
1. Installieren Sie den neuesten CRX-Hotfix
Bevor Sie fortfahren, sollten Sie, wenn Sie CQ 5.4 oder früher verwenden, den neuesten CRX-Hotfix herunterladen und installieren, wenn Ihre CQ-Instanz gestartet wird.
Sie können dort die neuesten Hotfixes unter Adobe Paketfreigabe finden.
2. Fehlerbehebung von „File not found:“-Fehlern
Wenn es fehlende Tar-Dateien gibt, wie in diesem Artikel beschrieben, dann gehen Sie zuerst dieses Problem an. Wenn es fehlende Tar-Dateien gibt, werden wahrscheinlich einige Fehler wie „File not found:“ in Ihrem Fehlerprotokoll angezeigt.
Im Folgenden finden Sie beispielsweise einige Fehler, die bei der Datenspeicher-GC aufgrund einer fehlenden Tar-Datei angezeigt wurden:
27.02.2012 13:55:01 *WARN * TarSet: File not found: 4650 for entry 6c18a73a-aba1-44b8-93c2-90fb49cac5e5 pos:4650/148692992 length: 669 from /opt/author/crx-quickstart/repository/workspaces/crx.default/copy [4651, 4652, 4653, 4654, 4655, 4656, 4657, 4658, 4659, 4660, 4661, 4662, 4663]. 27.02.2012 13:55:38 *INFO * FileDataStore: Deleting old file /opt/author/crx-quickstart/repository/shared/repository/datastore/6f/b6/14/6fb61425b9187a97f9404cee290cc255177c702e modified: 2012-02-23 10:06:58.0 length: 6555 (FileDataStore.java, line 315) 28.02.2012 10:49:46 *WARN * BLOBInDataStore: getSize for 6fb61425b9187a97f9404cee290cc255177c702e failed (BLOBInDataStore.java, line 95) org.apache.jackrabbit.core.data.DataStoreException: Failed to read record modified date: /opt/author/crx-quickstart/repository/shared/repository/datastore/6f/b6/14/6fb61425b9187a97f9404cee290cc255177c702e
3. Durchführen einer DataStore-Konsistenzüberprüfung
Die einzige Möglichkeit, eine vollständige Liste aller fehlenden Dateien im Datenspeicher zu erhalten, besteht darin, eine Konsistenzüberprüfung für DataStore auszuführen. Wenn Ihre AEM-Instanz gestartet werden kann, führen Sie die folgenden Schritte auf der laufenden Instanz aus:
- Gehen Sie zum CRX-Explorer und melden Sie sich als Administator an.
- http://<host>:<port>/crx (CQ5.4/CRX2.2 und früher)
- http://<host>:<port>/crx/explorer/index.jsp (CQ5.5/CRX2.3 und neuere Versionen) - Klicken Sie auf „Repository-Konfiguration“.
- Klicken Sie auf „Repository überprüfen“.
- Wählen Sie „Konsistenz des Datenspeichers“.
- Klicken Sie auf „Ausführen“.
- Lassen Sie den Browser während der Dauer des Prozesses geöffnet. Es werden nur Meldungen an den Bildschirm ausgegeben, wenn ein Fehler gefunden wird und der Prozess keine Meldungen in die Protokolldatei schreibt. Die Fehlermeldungen melden den Pfad des Knotens, von dem der Datensatz des Datenspeichers referenziert wurde und die Datensatz-ID der fehlenden Datei.
- Wenn der Vorgang abgeschlossen ist, kopieren Sie die Ausgabe in eine Textdatei consistency_check_output.txt und fahren Sie mit dem nächsten Schritt fort.
4. Erstellen Sie eine Liste der Pfade der fehlenden Dateien
Der nächste Schritt bei der Wiederherstellung der fehlenden Dateien besteht darin, eine vollständige Liste der Pfade der fehlenden Dateien zu übersetzen.
1. Die Ausgabe der Konsistenzüberprüfung nach jedem Eintritt des Fehlers „Record not Found“ durchsuchen.
a. Bei Linux oder Unix: Verwenden Sie diesen Befehl, um die Liste der fehlenden Dateien in eine Datei missing_ds_files.txt auszugeben:
grep "Record not found:" consistency_check_output.txt | grep -Eo "[0-9a-f]{40}" | awk '{ print substr($1, 0,2) "/" substr($1, 3,2) "/" substr($1, 5,2) "/" $1 }' | sort -u > missing_ds_files.txt
** Wenn Ihre AEM-Instanz aufgrund dem „Record not Found“ -Fehler nicht startet, suchen Sie Ihre Protokolldateien unter crx-quickstart/logs nach allen Vorkommen des Fehlers „Datensatz nicht gefunden“ ab:
grep "Record not found:" error.log* | grep -Eo "[0-9a-f]{40}" | awk '{ print substr($1, 0,2) "/" substr($1, 3,2) "/" substr($1, 5,2) "/" $1 }' | sort -u > missing_ds_files.txt
Wenn der Befehl ordnungsgemäß funktioniert, sieht der Inhalt von missing_ds_files.txt wie folgt oder so ähnlich aus:
12/92/04/129204a6dd0ce2cd5ca19c721b6f52ee2b3630e2 9f/d8/38/9fd8386d20cf55e7e0024e18d0c7d4e8400454ee 7a/13/15/7a1315788f45dafd6630454f04183601682a9f80 28/37/d2/2837d24aed3ff223cd40e90222226c4ef2e2a0c6
b. Unter Windows: Verwenden Sie einen Text-Editor, z. B. Textpad oder Notepad++, um nach jedem Eintritt von „Record not found“ zu suchen. Nachdem Sie alle derartigen Eintritte gefunden haben, extrahieren Sie die Dateinamen, die ein Makro verwenden, indem Sie ein Skript schreiben oder die Dateinamen manuell kopieren und in einer neuen Textdatei erstellen.
DataStore-Dateipfade werden aus dem Datensatznamen in folgendem Format erstellt:
{erste zwei Zeichen der Datensatz-ID} / {zweite zwei Zeichen der Datensatz-ID} / {dritte zwei Zeichen der Datensatz-ID} / {Datensatz ID}
Wie zum Beispiel in diesem Fehler:
error.log: org.apache.jackrabbit.core.data.DataStoreException: Record not found: 129204a6dd0ce2cd5ca19c721b6f52ee2b3630e2
die Datensatz-ID ist 129204a6dd0ce2cd5ca19c721b6f52ee2b3630e2 und der Dateipfad ist 12/92/04/129204a6dd0ce2cd5ca19c721b6f52ee2b3630e2
5. Stellen Sie die fehlenden Dateien wieder her
Verwenden Sie jetzt die Ausgabe des letzten Schritts, um dieselben Dateien in anderen AEM (CQ)-Instanzen in Ihrer Umgebung zu suchen. Da die Datenspeicherdateien eindeutig gespeichert sind, können Sie sie von anderen AEM-Instanzen in Ihrer Umgebung kopieren.
Wenn Sie einige der Dateien in anderen Instanzen nicht finden können, durchsuchen Sie Ihre Sicherungen und stellen Sie sie von dort wieder her, falls möglich.
Unter Linux können Sie sich bei jeder der AEM-Instanzen anmelden und einen Befehl wie „rsync“ verwenden, um jegliche fehlende Datei zu kopieren, die in ihnen existiert. Beispielsweise indem Sie es aus dem Datenspeicherverzeichnis auf dem Server mit den fehlenden Dateien ausführen:
rsync -avR --files-from=missing_ds_files.txt . user@hostname-of-server-missing-files:/path/to/crx-quickstart/repository/repository/datastore/
Der Befehl führt eine „rsync“ aus, die alle Dateien kopiert, die in der Datei missing_ds_files.txt aufgeführt sind, die auf dem Server vorhanden sind.
6. Bereinigen von nicht wiederherstellbaren Dateiverweisen
Wenn Sie einige der Dateien nicht aus der Sicherungskopie oder aus anderen AEM (CQ)-Instanzen wiederherstellen konnten, bereinigen Sie die fehlerhaften Datenspeicher-Verweise oder reparieren Sie diese. Führen Sie die DataStore-Konsistenzprüfung erneut aus, wie wir sie in Schritt 4 ausgeführt haben. Sie erhalten eine aktuelle Liste der fehlenden Dateien.
Überprüfen Sie jeden aufgelisteten Knotenpfad, der auf fehlende Datenspeicherdateien verweist. Überprüfen Sie fehlende DAM-Assets oder Dateien, die mit Ihrem Benutzer auf Seiten hochgeladen wurden. Lassen Sie alle fehlenden Teile neu laden. Alle, die nicht gebraucht werden, können sicher über die AEM-Benutzeroberfläche gelöscht werden. Wenn irgendetwas unter /var/audit oder unter /var/eventing fehlt, kann es sicher gelöscht werden. Für alle Dateien, bei denen Sie sich nicht sicher sind, gehen Sie hier und kontaktieren Sie das Team von AEM Support für Unterstützung.
Gilt für
CRX 2.2, 2.3