A directory on my FreeBSD 10.2 server somehow got hopelessly corrupted (wasn't ZFS supposed to prevent that?)
O ZFS só detecta erros dos discos, não da memória (o ECC é responsável aqui) ou de seus aplicativos (porque não sabe se você deseja gravar lixo em seus arquivos ou não).
Além disso, com apenas um único disco vdev fazendo backup de seu pool, mesmo se forem encontrados erros, eles não poderão ser reparados. Adicione um segundo disco para ativar isso, caso contrário, você teria que excluir os arquivos afetados e restaurá-los a partir do backup.
One solution that comes to mind is to create a new ZFS pool, copy all the healthy data over, then delete the old one. But that feels very dangerous. What if system hangs and my server goes down?
Em seguida, o seu servidor provavelmente será desativado, reiniciado e continuará sem erros, mostrará os mesmos erros ou obterá alguns novos erros. Ninguém realmente sabe, por isso aconselho a focar em como remover o erro permanentemente:
Faça backup dos seus dados (como você já deveria ter feito, porque mesmo o ZFS pode matar seus dados com erros ou erros), reinicialize o servidor, verifique os logs em busca de algo suspeito. Faça isso em um momento em que você pode pagar o tempo de inatividade. Se você não puder pagar o tempo de inatividade, você deve ter pelo menos outra máquina que possa assumir o controle, então pense nas suas necessidades e estratégia. Se você encontrar algo parecido com um bug, tente reproduzi-lo em uma segunda máquina (use zfs send/recv
para copiar o conjunto).
Can you think of a way I can get rid of the corrupted directory without too much disruption?
Use zfs send
para copiar o sistema de arquivos ZFS que contém esse diretório (pior caso: o sistema de arquivos raiz também conhecido como todo o conjunto; melhor caso: apenas este diretório) e zfs recv
canalizado (ou canalizado por ssh
ou netcat
) para copiar um instantâneo atual para outra máquina ou mídia de backup, exclua o diretório na máquina antiga como faria normalmente e preencha-o novamente a partir de um backup válido ou de seus aplicativos (ou seja, reinstale na maioria dos casos) .
Se algo der errado ou você quiser investigar mais tarde, terá o instantâneo copiado que contém todos os dados, instantâneos e metadados desse momento.