Como posso evitar mensagens “Executar fsck manualmente” enquanto permite experimentar mudanças no horário do sistema?

18

Estou trabalhando com um sistema em que queremos permitir que os usuários brinquem com a data e a hora, se quiserem, e onde as reinicializações podem acontecer arbitrariamente. Isso é bom, exceto por uma coisa: se houver um grande salto de tempo para trás, o seguinte erro aparece na reinicialização:

Checking filesystems
IMAGE2: Superblock last mount time (Tue Mar  1 17:32:48 2011,
        now = Thu Feb 24 17:34:29 2011) is in the future.

IMAGE2: UNEXPECTED INCONSISTENCY; RUN fsck MANUALLY.
        (i.e., without -a or -p options)

*** An error occurred during the file system check.
*** Dropping you to a shell; the system will reboot
*** when you leave the shell.

... e, em seguida, o boot trava aguardando a entrada do console do usuário e, mesmo que o acesso ao console seja obtido, é necessária uma senha root para continuar.

Isso é decididamente menos que ideal. Existe alguma maneira de pular a verificação ou forçar a verificação a ocorrer automaticamente na reinicialização?

O Google forneceu apenas ajuda que requer a execução manual do fsck se / quando isso for atingido, o que não é o que eu estou procurando. Executar o fsck manualmente depois de definir a hora não funciona, pois o sistema de arquivos ainda está montado naquele ponto, e apenas desabilitar o fsck é menos do que ideal.

Estou usando o RedHat 6.

Update : A solução com a qual estou atualmente indo é cortar o fstab para desabilitar a verificação do fsck na reinicialização. Eu tentei editar o último tempo de montagem nos discos usando debugfs , que funciona bem para unidades ext3, mas parece falhar inconsistentemente no ext4.

    
por me_and 01.03.2011 / 18:41

4 respostas

15

Eu sugeriria hackear e2fsck para desativar as verificações específicas de um último tempo de montagem ou da última gravação no futuro. Estes são definidos em problem.c / problema. h e usado em super.c . Mas, ao olhar, descobri que o E2fsprogs 1.41.10 adiciona uma nova opção ao /etc/e2fsck.conf chamado broken_system_clock . Isto parece ser exatamente o que você precisa, e desde que você está usando o Red Hat Enterprise Linux 6, você deve ter 1.41.12, que inclui esta opção. Na página do manual:

   broken_system_clock
          The e2fsck(8) program has some hueristics that assume  that  the
          system clock is correct.  In addition, many system programs make
          similar assumptions.  For example, the UUID library  depends  on
          time  not going backwards in order for it to be able to make its
          guarantees about issuing universally unique ID’s.  Systems  with
          broken  system clocks, are well, broken.  However, broken system
          clocks, particularly in embedded systems, do exist.  E2fsck will
          attempt  to  use  hueristics to determine if the time can no tbe
          trusted; and to skip time-based checks if this is true.  If this
          boolean  is set to true, then e2fsck will always assume that the
          system clock can not be trusted.

Sim, a página do manual não pode soletrar "heurística". Oops Mas presumivelmente o código funciona de qualquer maneira. :)

    
por 16.03.2011 / 14:00
1

Eu duvido que haja uma maneira de remover essa verificação especificamente, a menos que você modifique o código-fonte. Ignorar todos os erros do fsck soa perigoso, e se houver algum outro problema?

Portanto, sugiro a seguinte solução: altere os scripts de inicialização para definir a data do sistema para algum momento no futuro (por exemplo, 2038-01-18 em uma máquina de 32 bits) antes de executar o fsck e leia-o novamente a partir do relógio do hardware depois ( hwclock --hctosys , com mais opções conforme necessário, dependendo do hardware e do uso do GMT no relógio do hardware).

    
por 01.03.2011 / 21:43
0

Isso parece que deve ser executado em uma máquina virtual, onde você pode ter mais controle (ou apenas reverter para um instantâneo).

    
por 01.03.2011 / 22:41
0

Aqui está uma solução que funcionou muito bem para mim:

Crie /etc/e2fsck.conf:

[problems]

# Superblock last mount time is in the future (PR_0_FUTURE_SB_LAST_MOUNT).
0x000031 = {
preen_ok = true
preen_nomessage = true
}

# Superblock last write time is in the future (PR_0_FUTURE_SB_LAST_WRITE).
0x000032 = {
preen_ok = true
preen_nomessage = true
}

Mais sobre essa correção aqui:

link

    
por 16.05.2014 / 18:43