Reparando corrupção de sistema de arquivos com fsck: Procedimento seguro
O que você vai aprender
- Como executar
fscksem destruir dados - Como verificar e reparar o sistema de arquivos raiz (
/) montado - Quando usar
-n/-y/-f, e como ext4 difere do XFS
A regra mais importante: nunca execute fsck em um sistema de arquivos montado (especialmente leitura-escrita). Ele reescreve metadados que o kernel está usando ativamente e pode corromper um sistema de arquivos que estava saudável. Sempre desmonte primeiro, ou diagnostique em somente leitura.
Premissas
- Distro: Ubuntu / família Debian (comandos são quase idênticos na família RHEL)
- Sistema de arquivos: ext4 é o alvo principal (XFS / Btrfs usam suas próprias ferramentas, cobertos abaixo)
- Você tem root (
sudo)
O que é fsck e quando usar?
Conclusão:
fsckverifica e repara a integridade do sistema de arquivos. Use quando corrupção de metadados é provável -Input/output error,Read-only file systemou fsck falho na inicialização.
fsck (file system check) é um front-end que despacha para um verificador por sistema de arquivos (fsck.<tipo>, ex. e2fsck para a família ext). Ele verifica o superbloco, tabelas de inodes, estrutura de diretórios e bitmaps de blocos, depois repara inconsistências. XFS é uma exceção: fsck.xfs é um stub que não faz nada, então você verifica e repara XFS com xfs_repair diretamente.
Situações típicas onde você precisa dele:
- Operações de arquivo falham repetidamente com
Input/output error - O sistema de arquivos mudou repentinamente para
Read-only file system(o kernel detectou corrupção e protegeu) - A inicialização parou em "fsck failed" ou "Give root password for maintenance"
- Após um desligamento não limpo ou queda de energia, você quer verificar a integridade
Sistemas de arquivos com journaling (ext4 / XFS) recuperam a maioria das inconsistências menores automaticamente na montagem. Um fsck manual é para danos estruturais que o replay do journal não consegue corrigir, ou para corrupção induzida por hardware.
Por que nunca executar fsck em um sistema de arquivos montado?
Conclusão: Um FS montado tem o kernel armazenando e atualizando metadados em cache. Se
fsckescreve por um caminho separado, as duas visões divergem e o "reparo" corrompe estruturas ativas em vez de corrigi-las.
Em um sistema de arquivos ativo, o kernel atualiza inodes e bitmaps no buffer cache. fsck lê e escreve o dispositivo de bloco diretamente. Se fsck escreve uma "correção" enquanto a visão do kernel difere, ele destrói estruturas que ainda estavam em uso.
Por isso o fsck em modo de reparo se recusa a executar (ou avisa) quando o alvo está montado. Existem três caminhos seguros:
- Desmontar, depois executar (para partições de dados)
- Diagnosticar em somente leitura com
-n(não escreve nada - mais seguro, mas não repara nada) - Para o FS raiz, usar modo de resgate / fsck na inicialização / USB live (abaixo)
# Primeiro, confirme que o alvo nao esta montado $ findmnt /dev/sdb1 $ lsblk -f
Como verificar e reparar uma partição de dados com segurança?
Conclusão: Desmonte, diagnostique com
-n, depois repare com-fyse necessário. Se falha de hardware é provável, crie imagem do dispositivo comddrescueantes de reparar.
1. Desmonte
$ sudo umount /dev/sdb1
Se não desmontar com target is busy, encontre o que está segurando.
$ sudo fuser -vm /dev/sdb1 $ sudo lsof /dev/sdb1
2. Diagnostique em somente leitura primeiro (-n)
-n responde "não" a cada pergunta e não escreve nada. Use para avaliar o dano.
$ sudo fsck -n /dev/sdb1
3. Crie imagem do dispositivo se falha de hardware é suspeita
Quando uma falha física é provável (frequentes Input/output error, abaixo), resgate os setores com ddrescue antes que um reparo piore as coisas.
$ sudo ddrescue /dev/sdb1 /mnt/backup/sdb1.img /mnt/backup/sdb1.log
4. Forçar verificação e reparo automático (-fy)
$ sudo fsck -fy /dev/sdb1
-f: forçar verificação completa mesmo se o FS está marcado como "limpo"-y: responder "sim" a cada prompt de reparo (executar sem interação até o fim)
-y pula os prompts mas entrega cada julgamento ao fsck. Para dados importantes, leia a saída do -n primeiro; se o dano é localizado, considere executar fsck sem flag para responder cada prompt você mesmo.
Como verificar o sistema de arquivos raiz (/) montado?
Conclusão: Você não pode desmontar um
/ativo. Use uma das opções: agendar um fsck automático na próxima inicialização, iniciar comfsck.mode=forceou verificar de um USB live.
O sistema de arquivos raiz está em uso, então normalmente não pode ser desmontado. Três soluções:
Opção A: Agendar um fsck forçado na próxima inicialização
Em sistemas systemd você pode solicitar uma verificação na inicialização com um arquivo de flag.
# Ubuntu/Debian: forcar verificacao unica na proxima inicializacao $ sudo touch /forcefsck $ sudo reboot
systemd-fsck lê /forcefsck e executa a verificação no início da inicialização (enquanto root ainda está somente leitura), depois exclui o flag automaticamente.
Opção B: Passar um parâmetro de kernel pelo GRUB
No menu GRUB pressione e, depois adicione ao final da linha linux:
fsck.mode=force fsck.repair=yes
fsck.repair=yes é como -y (reparo sem interação). Para ser conservador, use fsck.repair=preen (como -p, apenas correções automáticas seguras).
Opção C: Verificar de um USB live / midia de resgate
Se o root está muito danificado para iniciar, inicie um USB live e verifique sem montar.
# No ambiente live (nunca monte o alvo) $ sudo fsck -fy /dev/sda2
Se o sistema cair no modo de emergência, / geralmente está montado como somente leitura. Executar fsck é relativamente seguro quando está em somente leitura, mas para ter certeza, torne explícito com mount -o remount,ro / antes de executar.
Como as principais opções do fsck diferem?
Conclusão: Diagnostique com
-n, repare sem interação com-you-p, e force verificação completa com-f. Combine-as conforme a situação.
| Opção | Significado | Quando usar |
|---|---|---|
-n |
Não escrever nada, responder não a tudo | Avaliar dano primeiro (diagnóstico somente leitura) |
-y |
Responder sim a tudo (reparo sem interação) | Sem interação / na inicialização |
-p |
Preen. Corrigir automaticamente apenas o seguro | Modo padrão na inicialização |
-f |
Forçar verificação completa mesmo se limpo | Suspeita de dano oculto pelo journal |
-c |
Verificar bad blocks (badblocks, somente ext) | Suspeita de desgaste de midia física |
-A |
Verificar todos os filesystems em /etc/fstab na ordem |
Usado internamente pela sequência de boot |
# Para ext, e2fsck e chamado diretamente. Para ser explicito: $ sudo e2fsck -fy /dev/sdb1 # Se o superbloco esta danificado, use um superbloco de backup $ sudo dumpe2fs /dev/sdb1 | grep -i superblock $ sudo e2fsck -b 32768 /dev/sdb1
Não combine -p (preen) e -y. Preen é projetado para corrigir automaticamente apenas problemas seguros e parar com um código de erro quando um problema precisa de julgamento humano. Misturar com -y conflita com essa intenção.
E os sistemas de arquivos não-ext4 (XFS / Btrfs)?
Conclusão:
fsck.xfsnão faz nada - XFS usaxfs_repair. Btrfs usabtrfs check. Escolha a ferramenta certa por sistema de arquivos ou você não está realmente reparando nada.
Verifique o tipo de sistema de arquivos com lsblk -f ou blkid.
$ lsblk -f /dev/sdb1 $ sudo blkid /dev/sdb1
Para XFS
XFS não tem fsck tradicional. /sbin/fsck.xfs existe mas não faz nada (um stub para que a inicialização não seja bloqueada). A ferramenta real de reparo é xfs_repair.
# Sempre desmonte primeiro $ sudo umount /dev/sdb1 # Simulacao primeiro (-n nao altera nada) $ sudo xfs_repair -n /dev/sdb1 # Reparo $ sudo xfs_repair /dev/sdb1
Somente quando um log danificado faz xfs_repair se recusar a executar você deve usar -L (zerar o log) como último recurso. Isso arrisca perda de dados, então não use casualmente.
Para Btrfs
$ sudo umount /dev/sdb1 $ sudo btrfs check /dev/sdb1 # diagnosticar $ sudo btrfs check --repair /dev/sdb1 # reparar (oficialmente um ultimo recurso)
Tanto xfs_repair -L quanto btrfs check --repair são operações de último recurso que podem perder dados. Crie imagem do dispositivo com ddrescue antes de executá-las.
O que verificar após um reparo?
Conclusão: Leia o código de saída, inspecione arquivos resgatados em
lost+found, remonte e teste leitura/escrita. Se recorrer, suspeite do disco comsmartctl.
1. Leia o código de saída
Os códigos de saída do fsck são um bitmask.
$ sudo fsck -fy /dev/sdb1; echo "exit=$?"
| Código | Significado |
|---|---|
| 0 | Sem erros |
| 1 | Erros corrigidos (ok) |
| 2 | Corrigido, mas reboot necessário |
| 4 | Erros não corrigidos |
| 8 | Erro operacional |
0 ou 1 significa finalização limpa. Se 4 ou maior permanece, reexecute ou crie imagem do dispositivo.
2. Inspecione lost+found
Inodes que perderam seu diretório pai são recuperados em lost+found/ na raiz do FS, nomeados pelo número de inode.
$ sudo mount /dev/sdb1 /mnt $ sudo ls -l /mnt/lost+found/ $ sudo file /mnt/lost+found/*
3. Remonte e teste leitura/escrita
$ sudo mount /dev/sdb1 /mnt $ touch /mnt/.write-test && rm /mnt/.write-test && echo "write OK"
4. Se recorrer, suspeite do hardware
$ sudo smartctl -a /dev/sdb | grep -iE 'reallocated|pending|uncorrect' $ sudo dmesg | grep -iE 'I/O error|ata|medium error'
Se Reallocated_Sector_Ct ou Current_Pending_Sector está subindo, é uma falha física. Prefira substituir o disco e restaurar do backup em vez de mantê-lo vivo com fsck.
O que não fazer (checklist)
Conclusão: Reparar montado, confundir o tipo de FS, usar
-ysem verificar e-Lsem criar imagem são as formas clássicas de piorar a corrupção.
Padrões de falha
- Executar
fsck(leitura-escrita) diretamente em um/dev/...montado - Executar
fsck(ou seja,fsck.xfs) em XFS e assumir que "corrigiu" algo - Pular direto para
-ysem ler a saída do-n - Executar
xfs_repair -Lsem criar imagem quando uma falha física é provável - Desistir de um superbloco danificado sem tentar um superbloco de backup