Diagnosticando "Input/output error"
O que "Input/output error" realmente significa?
Conclusão:
Input/output erroré oEIO(errno 5) do kernel. Não é um erro de lógica - significa que um I/O falhou na camada física: disco com defeito, cabo/controlador instável, dispositivo desconectado ou queda de armazenamento de rede.
Uma falha típica se parece com isto:
$ cat /var/log/app.log cat: /var/log/app.log: Input/output error $ cp bigfile /mnt/data/ cp: error reading 'bigfile': Input/output error
Diferente de Permission denied (permissões) ou No space left (capacidade), Input/output error significa que o comando estava correto mas uma camada inferior não conseguiu responder. A causa está fora da sua aplicação - no lado do dispositivo.
As causas se dividem em alguns grupos. Faça a triagem nesta ordem:
- A. O próprio disco está falhando (mais comum) - setores defeituosos, desgaste, falhas SMART. Frequentemente apenas arquivos específicos retornam EIO
- B. Problema de conexão / controlador - cabo SATA/USB solto, energia insuficiente ou falha de HBA interrompe I/O intermitentemente
- C. O dispositivo foi desconectado - um drive USB/externo foi desconectado,
/dev/sdXdesapareceu - D. Queda de armazenamento de rede - servidor NFS/iSCSI está inativo ou com timeout
- E. Corrupção severa de filesystem - metadados danificados rejeitam leituras e escritas
Input/output error é um sintoma, não uma causa. A mesma mensagem cobre um disco morrendo que você precisa resgatar e uma falha transitória que um cabo recolocado corrige. Partir para fsck ou reformatação antes de ler o dmesg pode destruir dados que ainda estão vivos. Leia a causa primeiro.
O que devo verificar primeiro?
Conclusão: A fonte primária é o log do kernel. Use
dmesg -Toujournalctl -kpara ler o nome do dispositivo (sda, etc.) e o erro exato (I/O error, sector, link reset) do momento em que o EIO apareceu. Isso quase sempre restringe a uma das causas A-E.
Escute o kernel com dmesg / journalctl
EIO é uma falha que o kernel recebeu de um driver de dispositivo e repassou. A evidência está sempre no log do kernel.
# Erros recentes, com timestamps dmesg -T | grep -iE 'error|i/o|fail|reset' | tail -30 # Do log persistente (sobrevive a reboots) journalctl -k -b -p err --no-pager
Como ler as linhas:
# A: disco com defeito (setor defeituoso) blk_update_request: I/O error, dev sda, sector 1234567 op 0x0:(READ) critical medium error, dev sda, sector 1234567 # B: problema de conexao / link ata1: SATA link down (SStatus 0 SControl 300) ata1.00: failed command: READ FPDMA QUEUED # C: desconexao de dispositivo (desconexao USB, etc.) sd 6:0:0:0: [sdb] Synchronize Cache(10) failed usb 1-1: USB disconnect, device number 5 # D: queda de NFS nfs: server 10.0.0.5 not responding, still trying # E: corrupcao de filesystem EXT4-fs error (device sda1): ext4_find_entry: reading directory lblock
Um medium error com um número de sector confirma A (disco com defeito). Linhas empilhadas de link down / reset apontam para B (conexão). Um disconnect é C. Isso decide todos os passos seguintes.
Capture o log antes de tocar no arquivo ou dispositivo novamente. Um disco morrendo pode degradar a cada releitura. "Só dar mais um cat" é o pior movimento.
Como confirmo um disco com defeito? (SMART)
Conclusão: Se o dmesg mostra medium error / sector, leia os autodiagnósticos do disco com
smartctl. UmReallocated_Sector_CtouCurrent_Pending_Sectorcrescente significa desgaste físico - faça backup e substitua urgentemente.
Leia os dados SMART com smartctl do smartmontools (instale com apt install smartmontools / dnf install smartmontools).
# Resumo de saude sudo smartctl -H /dev/sda # Todos os atributos sudo smartctl -a /dev/sda
Atributos que importam:
ID# ATTRIBUTE_NAME RAW_VALUE 5 Reallocated_Sector_Ct 48 <- setores defeituosos realocados. crescente = desgaste 197 Current_Pending_Sector 16 <- setores suspeitos aguardando realocacao; causa direta do EIO 198 Offline_Uncorrectable 16 <- setores irrecuperaveis 199 UDMA_CRC_Error_Count 120 <- origem no cabo/conexao (o disco em si pode estar bem)
Current_Pending_Sector/Reallocated_Sector_Ctdiferente de zero e crescente -> o disco está se desgastando. Trate como fim de vida: resgate os dados e substitua.- Apenas
UDMA_CRC_Error_Countestá alto -> provavelmente um problema de cabo/conexão (B); recolocar ou substituir o cabo pode resolver.
Confirme com um self-test curto:
sudo smartctl -t short /dev/sda # verifique resultados com -a alguns minutos depois
Um disco que o SMART sinaliza como desgastado pode morrer completamente a qualquer momento. Executar fsck ou badblocks -w (teste de escrita) primeiro pode levar os dados ainda legíveis junto. A ordem é sempre (1) resgatar (ddrescue) -> (2) verificar/reparar. Obter uma cópia em um disco saudável vem primeiro.
E corrupção de filesystem?
Conclusão: Se o dmesg mostra
EXT4-fs error(ou similar) mas o SMART está saudável, repare os metadados comfsck- mas apenas enquanto o filesystem estiver desmontado. Executar em um FS montado piora a corrupção.
Primeiro inspecione somente leitura (-n não escreve nada):
# Identifique o alvo e seu estado de montagem lsblk -f findmnt /mnt/data # Desmonte, depois verifique (-n = dry run somente leitura) sudo umount /dev/sda1 sudo fsck -n /dev/sda1
Se o filesystem raiz (/) é o alvo e não pode ser desmontado, execute fsck no boot ou de um live USB / modo de resgate.
# Forcar fsck no proximo boot (para o FS raiz) sudo touch /forcefsck # no systemd, o argumento de kernel fsck.mode=force e mais confiavel
Uma vez confirmado, repare de verdade - assumindo que dados importantes já foram resgatados:
sudo fsck -y /dev/sda1 # -y = aprovar reparos automaticamente
Nunca execute fsck em um filesystem montado. O kernel e a ferramenta reescrevem os mesmos metadados independentemente e transformam danos menores em uma bagunca fatal. Se você não consegue umount (device is busy), veja Corrigindo "device is busy" no umount.
Quando não é o disco
Conclusão: Se o dmesg mostra
link down/disconnect/nfs ... not responding, a causa é conexão, desconexão ou rede - não a superficie do disco. Verificações físicas ou remontagem geralmente resolvem; não é necessáriofsck.
Conexão / cabo (B)
UDMA_CRC_Error alto, linhas empilhadas de SATA link down / ata reset:
- Recoloque o cabo SATA/USB; tente uma porta ou cabo diferente
- Drives externos frequentemente falham por energia insuficiente - use um hub USB com alimentação própria ou adaptador AC
- Monitore o dmesg ao vivo para ver se melhora (
dmesg -w)
Desconexão de dispositivo (C)
Em USB disconnect, /dev/sdX desaparece e toda operação posterior retorna EIO.
lsblk # o dispositivo esta visivel? sudo dmesg -w # observe o momento em que voce reconecta
Uma montagem em um dispositivo que desapareceu está morta. Desmonte, reconecte e remonte.
Armazenamento de rede (D)
Uma queda de servidor NFS ou falha de rede também aparece como EIO. Verifique o servidor e o caminho.
mount | grep nfs ping <nfs-server> showmount -e <nfs-server> # as exportacoes estao visiveis?
Para uma montagem NFS travada, leia também Corrigindo "Stale file handle" no NFS. Stale file handle (ESTALE) é fácil de confundir com EIO mas precisa de uma correção diferente.
Como resgatar dados em emergência?
Conclusão: Extraia dados de um disco morrendo com
ddrescue, não comcpsimples. Ele pega os blocos legíveis primeiro e pula os defeituosos, para que você recupere o máximo possível antes do disco pifar.
cp trava em EIO e martela o disco novamente em cada tentativa. ddrescue (do gddrescue; apt install gddrescue, nome do comando ddrescue) pula áreas defeituosas e pode retomar de um arquivo de mapa.
# /dev/sdb (disco com defeito) -> /dev/sdc (destino saudavel) # o terceiro argumento e um arquivo de mapa que permite pausar e retomar sudo ddrescue -d -r3 /dev/sdb /dev/sdc rescue.map
-d- I/O direto (lê setores reais, ignorando o cache do SO)-r3- tenta blocos defeituosos até 3 vezesrescue.map- mapa de progresso; re-execute o mesmo comando para retomar de onde parou
Copie a imagem do dispositivo/partição inteiro para o destino, depois execute fsck ou recuperação de arquivos contra a cópia. O objetivo é minimizar operações contra o disco morrendo em si.
Caminho rápido: (1) dmesg -T \| grep -i error para classificar a causa (A-E) -> (2) em medium error, confirme desgaste com smartctl -a -> (3) se desgastado, ddrescue imediatamente -> (4) para corrupção de FS, fsck após resgate (desmontado) -> (5) para link/desconexão/NFS, verifique o caminho físico. Pular o dmesg é o único erro a evitar.