Estou desenvolvendo um appliance embarcado, executando o CentOS 6.2. O usuário pode conectar um teclado, mas não um monitor, e um console serial exigiria a abertura do gabinete, algo que não queremos que o usuário tenha que fazer. Isso praticamente elimina a possibilidade de usar uma unidade USB de recuperação para inicializar, a menos que tudo o que faça seja refazer a imagem cegamente do disco rígido. Eu gostaria de fornecer alguns recursos de recuperação, e eu escrevi uma ferramenta que aparece em / dev / tty1 no lugar do getty para fornecer essas funções.
Uma dessas funções é o fsck. Eu descobri como remontar a raiz e outros sistemas de arquivos somente leitura. Agora que eles são somente leitura, deve ser seguro executá-los e reinicializá-los. Infelizmente, o fsck me queixa que os sistemas de arquivos estão montados e se recusam a fazer qualquer coisa.
Como posso forçar o fsck a ser executado em uma partição montada somente leitura?
Baseado em minha pesquisa, isso terá que ser algo obscuro. "-f" significa apenas forçar o reparo de uma partição limpa (mas não montada). Eu preciso reparar uma partição montada limpa ou não limpa. Pelo que li, isso é algo que "apenas especialistas" deveriam fazer, mas ninguém se incomodou em explicar como os especialistas fazem isso. Espero que alguém possa revelar isso para mim.
BTW, eu notei que o e2fsck 1.42.4 no Gentoo permite que você crie uma partição montada, mesmo montando leitura-gravação, mas isso só acontece se o fsck for executado a partir de um terminal, então ele pode perguntar ao fsck usuário, se tiver certeza de que deseja fazer algo tão perigoso. Eu não tenho certeza se a versão do CentOS faz a mesma coisa, mas parece que o fsck pode reparar uma partição montada, mas recusa-se a quando não é executado a partir de um terminal.
Uma opção de último recurso é para mim compilar meu próprio fsck hackeado. Mas estou com medo de estragar de alguma forma inesperada.
Obrigado!
Nota: Originalmente publicado aqui .
Atualização: não achei que importaria na época em que escrevi isso, mas para remontar o fs somente leitura, tive que fazer isso:
echo s > /proc/sysrq-trigger
echo s > /proc/sysrq-trigger
echo u > /proc/sysrq-trigger
Essa foi a única maneira que eu poderia encontrar para fazer isso. Todo o resto reclamou do sistema de arquivos estar ocupado. Até onde eu sei, isso é 'seguro', mas provavelmente remonta um pouco diferente da abordagem usual. E isso pode ser uma razão pela qual o fsck não quer repará-lo. Ainda acha que montou a leitura e gravação.