"blobId에 대한 InputStream"을 가져오는 도중 데이터 저장소 불일치 오류 발생
데이터 저장소의 입력 스트림 가져오기 오류를 해결하는 방법을 알아봅니다. 목록 컴파일 및 누락된 파일에 대한 경로 복원 및 색인 재지정.
설명 description
환경
- Experience Manager 6.4
- Experience Manager 6.5
문제/증상
Adobe Experience Manager 6.x/Oak 1.x 시스템에 FileDataStore가 구성되어 있습니다. error.log에 다음이 표시됩니다.
blobId에 대해 InputStream 을(를) 가져오는 동안 오류가 발생했습니다.
10.09.2015 10:38:04.220 *ERROR* [ pool-9-thread-3] org.apache.sling.commons.scheduler.impl.QuartzScheduler
Exception during job execution of org.apache.jackrabbit.oak.plugins.index.AsyncIndexUpdate@7fe7e8fa :
Error occurred while obtaining InputStream for blobId [ add1dd8fc5093b27b1fae1b753cb48b24ef3231f#101983]
java.lang.RuntimeException: Error occurred while obtaining InputStream for blobId [ add1dd8fc5093b27b1fae1b753cb48b24ef3231f#101983]
해결 방법 resolution
이 오류는 Adobe Experience Manager 데이터 저장소 디렉터리에서 파일이 누락되었을 수 있음을 의미합니다. Oak Blob 가비지 수집 실패, 디스크 공간 중단, 디스크 또는 네트워크 공유 불안정으로 인해 데이터 저장소 파일이 손실될 수 있습니다. 또는 사용자가 서버에서 파일을 잘못 삭제했기 때문일 수 있습니다.
누락된 파일을 복구하려면 아래 단계를 따르십시오.
-
최신 CFP/SP를 설치하십시오.
Adobe 패키지 공유에서 최신 핫픽스를 찾을 수 있습니다.
-
데이터 저장소 일관성 검사를 실행합니다.
oak-run jar 1.6.6 이상을 사용하여 다음 명령을 실행합니다.
code language-none java -jar oak-run-*.jar datastorecheck --consistency -ref --id --fds crx-quickstart/install/org.apache.jackrabbit.oak.plugins.blob.datastore.FileDataStore.config --repoHome crx-quickstart/repository --store crx-quickstart/repository/datastore --dump temp --verbose --track -
누락된 파일의 경로 목록을 만듭니다.
누락된 파일을 복구하는 다음 단계는 누락된 파일의 전체 경로 목록을 컴파일하는 것입니다.
모든 오류 발생 항목에 대한 일관성 검사 출력을 검색합니다. 레코드를 찾을 수 없음
a. Linux 또는 Unix에서: 이 명령을 사용하여 누락된 파일 목록을
missing_ds_files.txt파일로 출력합니다.code language-none grep "blobId" consistency_check_output.txt | grep -Eo "[ 0-9a-f] {40,200}" | awk '{ print substr($1, 0,2) "/" substr($1, 3,2) "/" substr($1, 5,2) "/" $1 }' | sort -u > missing_ds_files.txt참고 -
blobId오류로 인해 Adobe Experience Manager 인스턴스가 시작되지 않는 경우crx-quickstart/logs에서 로그 파일에서 오류'Error occurred while obtaining InputStream for blobId'이(가) 발생한 모든 항목을 대신 검색하십시오.code language-none grep "Error occurred while obtaining InputStream for blobId" error.log* | grep -Eo "[ 0-9a-f] {40,200}" | awk '{ print substr($1, 0,2) "/" substr($1, 3,2) "/" substr($1, 5,2) "/" $1 }' | sort -u > missing_ds_files.txt명령이 제대로 작동하면
missing_ds_files.txt의 내용은 다음과 비슷합니다.code language-none 12/92/04/129204a6dd0ce2cd5ca19c721b6f52ee2b3630e2 9f/d8/38/9fd8386d20cf55e7e0024e18d0c7d4e8400454ee 7a/13/15/7a1315788f45dafd6630454f04183601682a9f80 28/37/d2/2837d24aed3ff223cd40e90222226c4ef2e2a0c6b. Windows에서: 텍스트 편집기(예: 텍스트 패드 또는 메모장++)를 사용하여 레코드를 찾을 수 없음 을(를) 모두 찾습니다. 그런 다음 이러한 모든 항목을 찾은 후 매크로를 사용하거나 스크립트를 작성하거나 새 텍스트 파일에 파일 이름을 수동으로 복사하고 구성하여 파일 이름을 추출합니다.
DataStore 파일 경로는 다음 형식의 레코드 이름에서 구성됩니다. {레코드 ID의 처음 두 문자}/{레코드 ID의 두 문자}/{레코드 ID의 세 번째 두 문자}/{레코드 ID}
예를 들어 이 오류의 경우:
code language-none java.lang.RuntimeException: Error occurred while obtaining InputStream for blobId [ add1dd8fc5093b27b1fae1b753cb48b24ef3231f#101983]레코드 id는
add1dd8fc5093b27b1fae1b753cb48b24ef3231f이고 파일 경로는ad/d1/dd/add1dd8fc5093b27b1fae1b753cb48b24ef3231f입니다. -
누락된 파일을 복구합니다.
이제 마지막 단계의 출력을 사용하여 환경의 다른 Adobe Experience Manager 인스턴스에서 동일한 파일을 추적합니다. 데이터 저장소 파일은 고유하게 저장되므로 사용자 환경의 다른 Adobe Experience Manager 인스턴스에서 복사할 수 있습니다.
다른 인스턴스에 있는 일부 파일을 찾을 수 없는 경우 백업을 검색하고 가능한 경우 파일을 복원합니다.
Linux에서는 작동 중인 각 Adobe Experience Manager 인스턴스에 로그인하고 rsync와 같은 명령을 사용하여 누락된 파일을 복사할 수 있습니다. 예를 들어 누락된 파일이 있는 서버의 데이터 저장소 디렉토리에서 실행하여 다음과 같이 합니다.
code language-none rsync -avR --files-from=missing_ds_files.txt . user@hostname-of-server-missing-files:/path/to/crx-quickstart/repository/repository/datastore/이 명령은 서버에 있는 missing_ds_files.txt에 나열된 파일을 복사하는 rsync를 실행합니다.
-
복구할 수 없는 파일 참조를 정리합니다.
백업이나 다른 Adobe Experience Manager 인스턴스에서 일부 파일을 복구할 수 없는 경우 잘못된 데이터 저장소 참조를 정리하거나 수정합니다. 4단계에서 실행하면서 DataStore 일관성 검사를 다시 실행하십시오. 누락된 파일의 현재 목록을 가져옵니다.
누락된 데이터 저장소 파일을 참조하는 나열된 각 노드 경로를 검토합니다. 누락된 DAM 에셋 또는 페이지에 업로드된 파일을 사용자와 함께 검토합니다. 필요한 누락된 항목을 다시 업로드하도록 합니다. 필요하지 않은 모든 콘텐츠는 Adobe Experience Manager 사용자 인터페이스를 통해 안전하게 삭제할 수 있습니다. /var/audit 또는 /var/eventing에서 누락된 항목이 있으면 안전하게 삭제할 수 있습니다. 확실하지 않은 파일의 경우 여기로 이동하여 AEM 지원 팀에 도움을 요청하세요.
-
모든 비동기 Oak 인덱스를 다시 인덱싱합니다.
인덱스 파일은 Oak 저장소 내에 저장되므로 /oak:index lucene 기반 인덱스에서 일부 파일이 누락될 수도 있습니다.
누락된 파일은 저장소 순회에서 숨겨지므로 /system/console/repository 일관성 검사에 보고되지 않습니다. 안타깝게도 이러한 파일은 다른 AEM 인스턴스에서 일치하지 않습니다.
이러한 불일치를 해결하려면 영향을 받는 비동기 Oak 인덱스를 다시 인덱싱하십시오.
경고: 이 작업은 비용이 많이 소요되며 시스템의 콘텐츠 볼륨에 따라 10분에서 여러 날 동안 다운타임이 연장되어야 합니다.
비동기 인덱스를 다시 인덱싱하려면 다음을 수행하십시오.
-
Oak 환경에 설치한 버전과 일치하는 oak-run 1.0.x를 다운로드합니다. https://repo1.maven.org/maven2/org/apache/jackrabbit/oak-run/
-
oak-run을 Adobe Experience Manager 서버에 업로드합니다.
-
모든 Adobe Experience Manager 인스턴스를 중지합니다.
-
Adobe Experience Manager 인스턴스의 Oak 스토리지에 해당하는 아래 명령을 실행합니다.
TarMK 명령:
code language-none java -Xmx4096m -jar /apps/staging/oak-run-*-*.jar checkpoints crx-quickstart/repository/segmentstore rm-allMongoMK 명령:
code language-none java -Xmx4096m -jar oak-run-*-*.jar checkpoints mongodb://localhost/aem-author rm-all -
Adobe Experience Manager을 다시 시작하고 로그 파일에서
org.apache.jackrabbit.oak.plugins.index의 INFO 로그 메시지를 모니터링합니다. 인덱싱에 대한 자세한 내용을 보려면 /system/console/slinglog UI로 이동하여org.apache.jackrabbit.oak.plugins.index에 대한 디버그 수준 로깅을 사용하도록 설정하십시오.다음과 같은 로그 메시지가 표시됩니다.
code language-none 23.06.2015 14:26:23.070 *INFO* [ FelixStartLevel] org.apache.jackrabbit.oak.plugins.index.IndexUpdate Reindexing will be performed for following indexes: [ /oak:index/cqAcUUID, /oak:index/nodetype, /oak:index/deviceIdentificationMode, /oak:index/campaignpath, /oak:index/active, /oak:index/jcrFrozenMixinTypes] 23.06.2015 14:26:23.517 *INFO* [ FelixStartLevel] org.apache.jackrabbit.oak.plugins.index.IndexUpdate Reindexing Traversed #10000 /jcr:system/jcr:versionStorage/c8/5f ... 23.06.2015 14:28:51.999 *INFO* [ pool-8-thread-1] org.apache.jackrabbit.oak.plugins.index.IndexUpdate Indexing report - /oak:index/counter*(708) - /oak:index/authorizables*(159) - /oak:index/cqPageLucene*(1913) - /oak:index/ntBaseLucene*(444) - /oak:index/cqTagLucene*(512) - /oak:index/workflowDataLucene*(116) ... 23.06.2015 14:28:52.009 *INFO* [ pool-8-thread-1] org.apache.jackrabbit.oak.plugins.index.AsyncIndexUpdate Reindexing (async) completed for indexes: [ /oak:index/counter*(708), /oak:index/authorizables*(159), /oak:index/cqPageLucene*(1913), /oak:index/ntBaseLucene*(444), /oak:index/cqTagLucene*(512), /oak:index/workflowDataLucene*(116)] in 30.36 s -
어떤 이유로든 인덱싱이 실패하면 반복되어 이 로그 메시지를 반복합니다.
code language-none 23.06.2015 14:26:23.070 *INFO* [ FelixStartLevel] org.apache.jackrabbit.oak.plugins.index.IndexUpdate Reindexing will be performed for following indexes: [ /oak:index/cqAcUUID, /oak:index/nodetype, /oak:index/deviceIdentificationMode, /oak:index/campaignpath, /oak:index/active, /oak:index/jcrFrozenMixinTypes]
-