O que fsck -p (preen) faz no ext4?

16

Eu estava lendo uma postagem no blog sobre reparo do sistema de arquivos e o autor postou uma boa pergunta ... fsck -pdeve corrigir erros menores automaticamente sem intervenção humana. Mas o que exatamente será corrigido quando for dito para preparar o sistema de arquivos? Quais erros serão corrigidos e o que fará com que ele pare e informe ao usuário que ele ou ela deve executar o fsck interativamente? Existe uma lista de algum tipo?

Eu tenho pesquisado no Google e tudo o que encontro é a página de manual, que realmente não diz o que -pirá consertar ou o que aciona a bandeira prática. Estou especificamente interessado no sistema de arquivos ext4.

Bart Silverstrim
fonte

Respostas:

18

A resposta para sua pergunta está no e2fsck/problems.carquivo do código fonte e2fsprogs . Procurando a PR_PREEN_OKbandeira, você deve começar.

Como a manipulação completa de erros está um pouco mais envolvida, devido à multiplicidade de condições de erro diferentes que podem ocorrer, é recomendável que você analise mais de perto o código se estiver preocupado com um caso específico. No entanto, as listas abaixo foram extraídas dos comentários para as condições de erro e devem fornecer uma visão geral aproximada dos efeitos do modo preen.

No momento, os seguintes erros / avisos são tratados automaticamente quando o -psinalizador é especificado:

  • Realocar dica
  • O inode do diário é inválido
  • O superbloco do diário está corrompido
  • O sinalizador superblock has_journal está desobstruído, mas possui um diário
  • O sinalizador Superblock needs_recovery está definido, mas o diário não está presente
  • A revisão do sistema de arquivos é 0, mas os sinalizadores de recurso estão definidos
  • Dica de superbloco para superbloco externo
  • descritor de grupo N marcado como não inicializado sem conjunto de recursos.
  • bitmap de bloco do grupo N bitmap não inicializado, mas inode em uso.
  • O descritor de grupo N possui uma contagem inválida de inodes não utilizados.
  • Bitmap do último bloco do grupo não inicializado.
  • O sinalizador test_fs está definido (e ext4 está disponível)
  • O último tempo de montagem está no futuro (falsificado)
  • A última hora de gravação está no futuro (falsificado)
  • A soma de verificação do grupo de blocos (pergunta de trava) é inválida.
  • O diretório raiz tem dtime definido
  • O inode reservado tem modo incorreto
  • O inode excluído tem zero dtime
  • Inode em uso, mas dtime definido
  • Diretório de comprimento zero
  • Inode com i_size incorreto
  • O inode possui i_blocks incorretos
  • Superbloco incorreto no grupo
  • Descritores de grupo de blocos inválidos no grupo
  • Bloco reivindicado sem motivo
  • Erro ao alocar blocos para realocar metadados
  • Erro ao alocar o buffer de bloco durante o processo de realocação
  • Realocando Informações do Grupo de Metadados de X para Y
  • Realocando Informações do Grupo de Metadados para X
  • Erro de leitura de bloco durante o processo de realocação
  • Erro de gravação de bloco durante o processo de realocação
  • Sinalizador imutável definido em um dispositivo ou em um soquete
  • Tamanho diferente de zero para dispositivo, fifo ou inode de soquete
  • A revisão do sistema de arquivos é 0, mas os sinalizadores de recurso estão definidos
  • O inode do diário não está em uso, mas contém dados
  • O diário está com o modo incorreto
  • Sinalizador INDEX_FL definido em um sistema de arquivos não-HTREE
  • Sinalizador INDEX_FL definido em um não diretório
  • Nó raiz inválido no diretório HTREE
  • Versão de hash não suportada no diretório HTREE
  • Sinalizador incompatível no nó raiz HTREE
  • HTREE muito profundo
  • inode inválido-> i_extra_isize
  • entrada inválida e-> e_name_len
  • entrada inválida e-> e_value_offs
  • entrada inválida e-> e_value_block
  • entrada inválida e-> e_value_size
  • entrada inválida e-> e_hash
  • inode ausente EXTENTS_FL, mas é um inode de extensão
  • O inode não deve ter EOFBLOCKS_FL definido
  • A entrada do diretório excluiu ou inode não utilizado
  • Tipo de arquivo de diretório não definido
  • Tipo de arquivo de diretório definido no sistema de arquivos
  • Nó raiz HTREE inválido
  • Limite HTREE inválido
  • Contagem de HTREE inválida
  • O nó interno HTREE possui hashes fora de ordem na tabela
  • Inode encontrado no grupo em que _INODE_UNINIT está definido
  • Inode encontrado na área de inodes do grupo não utilizada
  • i_blocks_hi deve ser zero
  • / perdido + encontrado não encontrado
  • Inode de comprimento zero desanexado
  • Contagem de ref do inode incorreta
  • O preenchimento no final do bitmap do inode não está definido.
  • O preenchimento no final do bitmap do bloco não está definido.
  • Bloquear cabeçalho de diferenças de bitmap
  • Bloco não usado, mas marcado no bitmap
  • Bloco usado, mas não marcado usado no bitmap
  • Fim das diferenças de bitmap do bloco
  • Cabeçalho de diferenças de bitmap de inode
  • Inode não usado, mas marcado no bitmap
  • Inode usado, mas não marcado usado no bitmap
  • As diferenças de bitmap do inode terminam
  • Inodes livres contam para o grupo errado
  • Diretórios contam para o grupo errado
  • Inodes livres contam incorretamente
  • Contagem de blocos grátis para grupo errado
  • Blocos livres contam errado
  • Intervalo de blocos não usado, mas marcado no bitmap
  • Intervalo de blocos usado, mas não marcado usado no bitmap
  • Intervalo de inodes não usado, mas marcado no bitmap
  • Intervalo de inodes usado, mas não marcado usado no bitmap
  • Blocos do grupo N em uso, mas o grupo está marcado como BLOCK_UNINIT
  • Grupo N inode (s) em uso, mas o grupo está marcado como INODE_UNINIT
  • Recrie o diário se o sinalizador E2F_FLAG_JOURNAL_INODE estiver definido

As seguintes condições de erro fazem com que o processo fsck não interativo seja interrompido, mesmo se o -psinalizador estiver definido:

  • Bloquear bitmap fora do grupo
  • Bitmap de inode não no grupo
  • Tabela de inode fora do grupo
  • O tamanho do sistema de arquivos está incorreto
  • A contagem de inodes no superbloco está incorreta
  • O Hurd não suporta o recurso de tipo de arquivo
  • O diário possui um tipo de superbloco desconhecido
  • Pergunte se devemos limpar o diário
  • O superbloco de diário possui um conjunto de sinalizadores de recurso somente leitura desconhecido
  • O superbloco de diário possui um conjunto de sinalizadores de recurso incompatível desconhecido
  • O diário possui um número de versão não suportado
  • Pergunte se devemos executar o diário de qualquer maneira
  • Blocos reservados sem resize_inode
  • Resize_inode não ativado, mas o redimensionamento do inode é diferente de zero
  • Redimensionar inode inválido
  • O último tempo de montagem está no futuro
  • A última hora de gravação está no futuro
  • descritor de grupo N soma de verificação inválida.
  • O diretório raiz não é um inode
  • O bitmap do bloco entra em conflito com outro bloco fs
  • O bitmap do inode entra em conflito com outro bloco fs
  • A tabela de inode entra em conflito com algum outro bloco fs
  • O bitmap do bloco está em um bloco defeituoso
  • O bitmap do inode está em um bloco inválido
  • Número de bloco ilegal no inode
  • O número do bloco se sobrepõe aos metadados fs
  • O inode possui blocos ilegais (pergunta de trava)
  • Muitos blocos defeituosos no inode
  • Número de bloco ilegal no inode do bloco inválido
  • Inode de bloco inválido possui blocos ilegais (pergunta de trava)
  • Bloco ruim usado como bloco indireto de bloco ruim
  • Inconsistência não pode ser corrigida
  • Prompt de bloqueio primário incorreto
  • Suprimir prompt de mensagens
  • Sinalizador Imagic definido em um inode quando o sistema de arquivos não o suporta
  • Sinalizador de compactação definido em um inode quando o sistema de arquivos não o suporta
  • Lidar com inodes que faziam parte da lista vinculada órfã
  • Lidar com inodes que faziam parte da lista vinculada órfã corrompida (pergunta da trava)
  • Erro ao ler o bloco de atributo estendido
  • Bloco de atributo estendido inválido
  • Contagem de referência de atributo estendida incorreta
  • Vários blocos de EA não são suportados
  • Erro de colisão de alocação de EA
  • Nome de atributo estendido incorreto
  • Valor de atributo estendido incorreto
  • Inode muito grande (pergunta da trava)
  • Diretório muito grande
  • Arquivo regular muito grande
  • Link simbólico muito grande
  • Bloco inválido possui bloco indireto que entra em conflito com o bloco do sistema de arquivos
  • Falha ao redimensionar o inode
  • inode parece ser um diretório
  • Erro ao ler a árvore de extensão
  • Falha ao iterar extensões
  • Bloco inicial ruim em extensão
  • A extensão termina além do sistema de arquivos
  • Sinalizador EXTENTS_FL definido em um sistema de arquivos não extensível
  • inode possui extensões, superbloco ausente no recurso INCOMPAT_EXTENTS
  • O link simbólico rápido possui EXTENTS_FL definido
  • As extensões estão fora de ordem
  • O inode possui um nó de extensão inválido
  • Clonar blocos duplicados / inválidos?
  • Número de inode inválido para '.'
  • A entrada do diretório tem um número de inode incorreto
  • A entrada do diretório está vinculada a '.'
  • Pontos de entrada do diretório para o inode agora localizados em um bloco inválido
  • A entrada de diretório contém um link para um diretório
  • A entrada de diretório contém um link para o diretório raiz
  • A entrada do diretório possui caracteres ilegais em seu nome
  • Ausência de '.' no diretório inode
  • Faltando '..' no inode do diretório
  • A primeira entrada no diretório inode não contém '.'
  • A segunda entrada no inode do diretório não contém '..'
  • i_faddr deve ser zero
  • i_file_acl deve ser zero
  • i_dir_acl deve ser zero
  • i_frag deve ser zero
  • i_fsize deve ser zero
  • inode tem modo ruim
  • diretório corrompido
  • nome do arquivo muito longo
  • O inode do diretório tem um bloco ausente (furo)
  • '.' não é NULL finalizado
  • '..' não é NULL finalizado
  • Inode de dispositivo de caractere ilegal
  • Inodo de dispositivo de bloco ilegal
  • Duplicado '.' entrada
  • Entrada duplicada
  • Rec_len final está errado
  • Erro ao ler o bloco de diretórios
  • Erro ao gravar o bloco de diretório
  • Entrada de diretório para '.' é grande. Dividido?
  • Inode FIFO ilegal
  • Inode de soquete ilegal
  • Tipo de arquivo de diretório incorreto
  • O nome do arquivo do diretório é nulo
  • Link simbólico inválido
  • i_file_acl (bloco de atributo estendido) está incorreto
  • O sistema de arquivos contém arquivos grandes, mas não possui esse sinalizador no sb
  • Limpar diretório HTREE inválido
  • Bloco inválido no nó interior da htree
  • Entrada de diretório duplicada encontrada
  • Nome do arquivo não exclusivo encontrado
  • i_blocks_hi deve ser zero
  • Bloco HTREE inesperado
  • Inode raiz não alocado
  • Não há espaço em perdido + encontrado
  • Inode de diretório desconectado
  • .. a entrada está incorreta
  • Lost + não encontrou um diretório
  • Inode desanexado
  • Superbloco corrompido
  • Fragmentos não suportados
  • Erro ao determinar o tamanho do dispositivo físico do sistema de arquivos
  • O diário externo possui (sem suporte) vários sistemas de arquivos
  • Não foi possível encontrar o diário externo
  • O diário externo tem um superbloco incorreto
  • O superbloco possui um UUID de diário inválido
  • Erro ao alocar o bitmap do inode
  • Erro ao alocar o bitmap do bloco
  • Erro ao alocar informações do link de contagem regressiva
  • Erro ao alocar matriz de blocos de diretório
  • Erro ao verificar inodes
  • Erro ao iterar sobre blocos
  • Erro ao armazenar informações de contagem de inodes
  • Erro ao armazenar informações de bloco de diretório
  • Erro ao ler o inode (para limpeza)
  • Erro ao alocar a estrutura refcount
  • Erro ao ler o bloco de atributo estendido ao corrigir refcount
  • Erro ao escrever o bloco Extended Attribute ao corrigir refcount
  • Erro ao alocar a estrutura de alocação da região EA
  • Erro ao verificar inodes
  • Erro ao alocar o bitmap do inode
  • Erro interno: não foi possível encontrar dir_info
  • Erro ao alocar a estrutura do icount
  • Erro ao iterar sobre blocos de diretório
  • Erro ao desalocar o inode
  • Erro ao ajustar o refcount do EA
  • Erro ao alocar o bitmap do inode
  • Erro ao criar diretório raiz
  • O inode raiz não é diretório; abortando
  • Não é possível continuar sem um inode raiz.
  • Erro interno: não foi possível encontrar dir_info
  • Erro de programação: pontos finais de bitmap não correspondem
  • Erro interno: falsificando o final do bitmap
  • Erro ao copiar no bitmap do inode de substituição
  • Erro ao copiar no bitmap do bloco de substituição
Noé
fonte
Noah, se você souber disso, é possível criar / injetar todos esses erros (ou o que for possível)? Estou tentando investigar a causa desses erros e a possível solução desses erros.
AnkurTank 12/12