Problema

Você vê uma dessas mensagens no seu 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

Solução

Esse erro significa que você está perdendo arquivos do diretório de armazenamento de dados AEM.  Veja esta documentação para mais detalhes sobre o que é o armazenamento de dados e como ele funciona. A perda de arquivos do armazenamento de dados pode ser devido a uma falha de coleta de lixo do armazenamento de dados, uma interrupção de espaço em disco, disco ou instabilidade de compartilhamento de rede. Ou pode ser devido a um usuário erroneamente excluindo arquivos do servidor.

Para recuperar os arquivos ausentes, siga as etapas abaixo.

1. Instale o hot fix CRX mais recente

Antes de continuar, se você estiver usando o CQ5.4 ou anterior, faça o download do hotfix mais recente do CRX e instale-o se sua instância do CQ estiver sendo inicializada.

Você pode encontrar os últimos hot fixes em Compartilhamento de pacotes da Adobe.

2. Corrigir erros "Arquivo não encontrado":

Se houver arquivos tar ausentes, conforme descrito em este artigo em seguida, resolva esse problema primeiro.  Se houver arquivos tar ausentes, é provável que você veja alguns erros, como "Arquivo não encontrado": em seu error.log.

Por exemplo, aqui estão alguns erros que foram vistos durante o armazenamento de dados do GC devido a um arquivo tar ausente:

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. Execute uma verificação de consistência do DataStore

A única maneira de obter uma lista completa de todos os arquivos ausentes no armazenamento de dados é executar uma Verificação de Consistência do DataStore.  Se a sua instância do AEM puder inicializar, siga estas etapas na instância em execução:

  1. Acesse o CRX Explorer e faça o login como administrador.
    - http://<host>:<port>/crx (CQ5.4/CRX2.2 and earlier)
    - http://<host>:<port>/crx/explorer/index.jsp (CQ5.5 / CRX2.3 e versões posteriores)
  2. Clique em configuração do repositório.
  3. Clique em Verificar Repositório.
  4. Selecione Consistência do Armazenamento de Dados.
  5. Clique em Executar.
  6. Mantenha o seu navegador aberto durante o processo. Ele só envia mensagens para a tela quando um erro é encontrado e o processo não grava nenhuma mensagem no arquivo de log.  As mensagens de erro informam o caminho do nó de onde o registro do armazenamento de dados foi referenciado e o ID do registro do arquivo ausente.
  7. Quando o processo estiver concluído, copie a saída para um arquivo de texto consistency_check_output.txt e vá para o próximo passo.

4. Crie uma lista de caminhos dos arquivos perdidos

A próxima etapa na recuperação dos arquivos ausentes é compilar uma lista completa dos caminhos dos arquivos que estão faltando.

1. Procure no resultado da verificação de consistência todas as ocorrências de erro "Registro não encontrado".

a. No Linux ou Unix: use este comando para exibir a lista de arquivos ausentes em um arquivo missing_ds_files.txt:

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

** Se a sua instância do AEM não estiver sendo inicializada devido aos erros de "Registro não encontrado", pesquise seus arquivos de log em log/log de início rápido para todas as ocorrências do erro "Registro não encontrado":

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

Se o comando funcionasse corretamente, o conteúdo de missing_ds_files.txt seria semelhante ao seguinte:

12/92/04/129204a6dd0ce2cd5ca19c721b6f52ee2b3630e2
9f/d8/38/9fd8386d20cf55e7e0024e18d0c7d4e8400454ee
7a/13/15/7a1315788f45dafd6630454f04183601682a9f80
28/37/d2/2837d24aed3ff223cd40e90222226c4ef2e2a0c6

  b. No Windows:  use um editor de texto como o Textpad ou o Bloco de Notas para localizar todas as ocorrências de "Registro não encontrado".  Em seguida, depois de localizar todas essas ocorrências, extraia os nomes de arquivos usando uma macro, escrevendo um script ou copiando e construindo manualmente os nomes de arquivos em um novo arquivo de texto.

Os caminhos do arquivo DataStore são construídos a partir do nome do registro neste formato:
{dois primeiros caracteres de id de gravação} / {segundos dois caracteres de id de registro} / {terceiros dois caracteres de id de registro} / {id de registro}

Por exemplo, neste erro:

error.log: org.apache.jackrabbit.core.data.DataStoreException: Record not found: 129204a6dd0ce2cd5ca19c721b6f52ee2b3630e2

o ID do registro é 129204a6dd0ce2cd5ca19c721b6f52ee2b3630e2 e o caminho do arquivo é 12/92/04/129204a6dd0ce2cd5ca19c721b6f52ee2b3630e2

5. Recupere os arquivos ausentes

Agora use a saída da última etapa para procurar os mesmos arquivos em outras instâncias do AEM (CQ) em seu ambiente.  Como os arquivos do armazenamento de dados são armazenados exclusivamente, você pode copiá-los de outras instâncias do AEM em seu ambiente.

Se você não conseguir encontrar alguns dos arquivos em outras instâncias, pesquise seus backups e os restaure de lá, se possível.

No Linux, você poderia efetuar login em cada uma das instâncias do AEM e usar um comando como o rsync para copiar qualquer um dos arquivos que existem neles.  Por exemplo, executando-o a partir do diretório do armazenamento de dados no servidor que possui os arquivos ausentes:

rsync -avR --files-from=missing_ds_files.txt . user@hostname-of-server-missing-files:/path/to/crx-quickstart/repository/repository/datastore/

O comando executa um rsync que copia todos os arquivos listados em missing_ds_files.txt que existem no servidor. 

6. Limpar referências de arquivos irrecuperáveis

Se você não conseguiu recuperar alguns dos arquivos do backup ou de outras instâncias do AEM (CQ), limpe ou corrija as referências incorretas do armazenamento de dados.  Execute novamente a verificação de consistência do DataStore como executado na etapa 4.  Você recebe uma lista atual de arquivos ausentes.

Revise cada um dos caminhos de nós listados que estão referenciando arquivos de armazenamento de dados ausentes.  Analise todos os recursos ou arquivos do DAM que foram enviados para as páginas com seu usuário.  Faça o upload novamente daqueles que faltam e são necessários.  Qualquer um que eles não precisem pode ser excluído com segurança através da interface do usuário do AEM.  Se algo está faltando de /var/audit ou /var/eventing pode ser apagado com segurança.  Para todos os arquivos que você não tem certeza, então acesse aqui e entre em contato com a equipe de suporte do AEM para obter assistência.

Aplica-se a

CRX 2.2, 2.3

Esta obra está licenciada sob uma licença não adaptada da Creative Commons Attribution-Noncommercial-Share Alike 3.0  As publicações do Twitter™ e do Facebook não são cobertas pelos termos do Creative Commons.

Avisos legais   |   Política de privacidade online