
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/sdb1
você 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.conf
arquivo que o meu Debian 10, então dir_index
já está habilitado como o conjunto de recursos base atual para todos os sistemas de arquivos ext2/3/4 criados usando mke2fs
. E dir_nlink
está 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.conf
arquivo não especificarem um tipo de sistema de arquivos padrão, mke2fs
usará 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.conf
arquivo, a -T news
opção especifica apenas a inode_ratio = 4096
opção, nada mais. Então, a menos que você use o mkfs.ext4
formulá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 -j
opção para o seu mke2fs
comando, então se o Ubuntu mke2fs.conf
for 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 64bit
recurso 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_index
recurso é 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_index
recurso pode melhorar ou prejudicar o desempenho do aplicativo para você.
Você poderia editar a tune2fs -l /dev/sdb1
saí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 EUCLEAN
có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.