ext4 Ubuntu 18.04 Erro no sistema de arquivos “Strcuture precisa de limpeza”

ext4 Ubuntu 18.04 Erro no sistema de arquivos “Strcuture precisa de limpeza”

Quero ter um disco de 24 TB preparado para poder conter um grande número de diretórios e arquivos em um único diretório (por favor, não me diga para mudar essa estratégia, é uma estrutura usada por um software que é uma caixa preta para nós então não podemos mudar essa abordagem). Como pesquisei completamente, o sistema de arquivos ext4 tem a capacidade de armazenar bilhões de arquivos em um diretório, mas deve ser preparado usando alguns sinalizadores e parâmetros especiais. Isto é o que usei com base em minha pesquisa:

sudo mke2fs -T news /dev/sdb1
sudo tune2fs -O dir_index /dev/sdb1
sudo tune2fs -O large_dir /dev/sdb1
sudo tune2fs -O dir_nlink /dev/sdb1


sudo mkdir /hdd
sudo gedit /etc/fstab

- add following to the end of the file:
/dev/sdb1    /hdd    ext4    defaults,noatime    0    0

sudo mount /hdd

Para testar a estrutura, preparei scripts bash que criam diretórios e arquivos em um único diretório. Algo assim:

for ((i = 1000000; i <= 200000000; i++))
do
  sudo mkdir "/hdd/largedir/$i" -p
  sudo cp "sample-file.jpg" "/hdd/largedir/$i"
  if (( $i % 1000 == 0 ));
  then
    echo "$i created";
  fi;
done

Depois de horas de trabalho, quando verifiquei o sistema estava imprimindo este erro:

Structure needs cleaning

Nos meus testes, esse erro não é impresso para todos os arquivos e diretórios. Por exemplo, posso criar um diretório chamado "10000", mas não consigo criar um diretório chamado "1000". Também mudei o algoritmo de hash usando este comando:

sudo tune2fs -E "hash_alg=tea" /dev/sdb1

e reiniciei e remontei o sistema, mas o problema ainda existe. Alguém sabe qual é o problema e por que essa situação ocorreu no sistema de arquivos? O sistema de arquivos ext4 não é forte o suficiente para ter uma estrutura tão grande? Eu li em algumas páginas sobre o uso do xfs em vez do ext4 para um grande número de arquivos. É realmente verdade?

Você vê que durante a operação do arquivo, nenhuma perda de energia, nem nenhuma falha ocorreu no sistema. Eu não esperava tal comportamento quando tudo estava bem.

-- EDITADO para mais informações: --

As informações do inode do disco são as seguintes:

Filesystem        Inodes     IUsed     IFree IUse% Mounted on
/dev/sdb1      421216256 183643803 237572453   44% /hdd

As informações do espaço são as seguintes:

Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb1        26T  3.1T   21T  13% /hdd

Eu verifiquei o sistema de arquivos e é ext4 (conforme mostrado em várias ferramentas). Por exemplo, o gparted mostra o sistema de arquivos da partição como ext4. Sobre os recursos, nenhum dos recursos acima foi habilitado por padrão no meu Ubuntu 18.04 LTS. Encontrei vários erros durante meus testes antigos e finalmente cheguei a isso.

Responder1

Com o comando sudo mke2fs -T news /dev/sdb1você não está necessariamente criando um sistema de arquivos ext4, mas umext2sistema de arquivo.

Supondo que o seu Ubuntu 18.04 tenha essencialmente o mesmo /etc/mke2fs.confarquivo que o meu Debian 10, então dir_indexjá está habilitado como o conjunto de recursos base atual para todos os sistemas de arquivos ext2/3/4 criados usando mke2fs. E dir_nlinkestá habilitado por padrão para oext4tipo de sistema de arquivos.

A mke2fs.conf(5)página de manual diz: "se o usuário e o mke2fs.confarquivo não especificarem um tipo de sistema de arquivos padrão, mke2fsusará um tipo de sistema de arquivos padrão deext3se um diário foi solicitado por meio de uma opção de linha de comando ouext2se não."

De acordo com o /etc/mke2fs.confarquivo, a -T newsopção especifica apenas a inode_ratio = 4096opção, nada mais. Então, a menos que você use o mkfs.ext4formulário em vez do plain mke2fs, você poderá receber umaext2sistema de arquivos adaptado para arquivos com tamanhos médios de 4 KB ou menos.

O Debian não tem o fs_type =especificado na [defaults]seção de mke2fs.conf, e você não inclui a -jopção para o seu mke2fscomando, então se o Ubuntu mke2fs.conffor igual ao do Debian (como normalmente é), seu comando pode ter lhe dado 24 TBext2sistema de arquivos, que provavelmente não foi testado muito bem por ninguém.

A ext4(5)página de manual diz que o 64bitrecurso do sistema de arquivos será definido automaticamente conforme necessário, o que pode explicar por que as ferramentas não relataram nenhum erro. Também diz que o dir_indexrecurso é ignorado pelos sistemas de arquivos ext2.

Pela experiência anterior com sistemas de arquivos de vários terabytes ext3, eu esperava tempos enormes de criação e verificação de sistemas de arquivos. Para o seu caso de uso, a presença ou ausência do dir_indexrecurso pode melhorar ou prejudicar o desempenho do aplicativo para você.

Você poderia editar a tune2fs -l /dev/sdb1saída real da sua pergunta original, para eliminar a necessidade de adivinharmos o que pode ou não ter acontecido?

"Estrutura precisa de limpeza" parece ser o texto padrão correspondente ao EUCLEANcódigo de erro do kernel, que indica que o sistema de arquivos está corrompido e é necessária uma verificação do sistema de arquivos. Em um sistema de arquivos desse tamanho, isso consumirá bastante tempo e RAM. E, claro, o sistema de arquivos precisa ser desmontado enquanto está sendo verificado.

Responder2

Na verdade, depois de muitos testes, cheguei ao ponto que parece que o ext4 não tem a capacidade de fazer tal coisa (manter bilhões de arquivos em um diretório). E seguindo minhas pesquisas sobre como fazer isso no Linux, os resultados (na verdade também meus testes práticos) mostram que para tal cenário, eu deveria usar o XFS em vez do ext4, que é realmente construído para realizar esta tarefa.

informação relacionada