Existe um formato "rápido" para o ext4?

28

No Windows, é muito rápido formatar com NTFS. Eu tenho uma máquina Linux de baixa potência, com pouca RAM. A formatação de um volume de 2 TB para ext4 leva muito tempo.

Há algo que eu possa fazer para acelerar o formato? Não consigo imaginar o que leva tanto tempo? (o que demora tanto)

preso
fonte
1
Quais comandos você está usando para formatá-lo?
Tacotuesday
Como uma solução alternativa. tente torná-lo como um volume lvm menor e aumente conforme necessário? Isso diminuiria a sobrecarga inicial de qualquer maneira.
Sirex
1
ou use o XFS se o tempo de criação do sistema de arquivos realmente o incomodar - o mkfs.xfs é muito mais rápido que o mkfs.ext4 (porque ele não faz - ou precisa fazer - tanto). mas mkfs é algo que você normalmente só precisa fazer uma vez por sistema de arquivos - provavelmente há coisas melhores para otimizar.
cas
ou use o ZFS. Criar sistemas de arquivos com o ZFS é quase instantâneo, independentemente do tamanho.
Jlliagre
Use o ZFS apenas se você tiver hardware de classe empresarial, em particular se tiver RAM ECC e tiver no-break. Não é recomendável usar o ZFS sem esses requisitos. Você pode não conseguir se recuperar após um erro de paridade de memória e / ou uma falha de energia. Todo o seu volume será perdido neste caso. Você foi avisado.
Richard Gomes

Respostas:

16

Resposta estrita

Soluções como -E lazy_itable_initnão alteram o resultado, apenas aceleram o processo. Foi o que foi solicitado explicitamente ainda, em muitos casos, as pessoas precisam de mais.

Bônus extra

Na maioria dos casos, você realmente deseja algumas opções que correspondam aos seus padrões de uso e não apenas aceleram a criação do sistema de arquivos, mas também permitem um uso mais rápido e mais espaço utilizável.

Acabei de fazer um teste. Mesmo sem o uso -E lazy_itable_init, as opções abaixo aceleram o tempo de criação de um sistema de arquivos de 2 TB de 16 minutos 2 segundos a 1 minuto 21 segundos (kernel 3.5.0 64bit no Intel i7 2.2GHz, disco de 2 TB na conexão USB2 - o SATA provavelmente seria mais rápido) .

Para um sistema de arquivos que conterá arquivos grandes, eu uso esta combinação:

mkfs.ext3 /dev/sdXX -O sparse_super,large_file -m 0 -T largefile4

onde -T largefile4escolhe opções nas /etc/mke2fs.confquais geralmente contêm algo como:

    inode_ratio = 4194304
    blocksize = -1

Faça um man mke2fspara obter detalhes sobre cada uma dessas opções.

Aqui estão extratos relevantes:

               sparse_super
                      Create a filesystem with fewer superblock backup copies (saves space on large filesystems).

               large_file
                      Filesystem can contain files that are greater than 2GB.  (Modern kernels set this feature  automatically
                      when a file > 2GB is created.)

   -i bytes-per-inode
          Specify  the  bytes/inode ratio.  mke2fs creates an inode for every bytes-per-inode bytes of space on the disk.  The
          larger the bytes-per-inode ratio, the fewer inodes will be created.  This value generally shouldn't be smaller  than
          the blocksize of the filesystem, since in that case more inodes would be made than can ever be used.  Be warned that
          it is not possible to expand the number of inodes on a filesystem after it is created, so be  careful  deciding  the
          correct value for this parameter.

-m 0diz apenas para não reservar 5% para root, o que é bom para um sistema de arquivos de dados (não inicialização / root). 5% de um disco de 2 TB significa 100 GB. Essa é uma diferença bastante significativa.

Stéphane Gourichon
fonte
1
Observe que permitir que o sistema de arquivos fique mais de 95% cheio levará a uma fragmentação extrema, diminuindo substancialmente o desempenho. Se qualquer coisa, se se preocupa com o desempenho de sua partição de dados, ele deve ser aumentada para 10%
Matija Nalis
Se o seu disco contiver não apenas arquivos grandes, mas também arquivos pequenos , leia o seguinte: a redução da taxa de inode economizará no máximo cerca de 1,5% do armazenamento, ao custo da versatilidade. inode_ratio = xsignifica que, se o tamanho médio do arquivo no volume for menor que x bytes, será necessário ficar sem inodes antes de ficar sem espaço de armazenamento . Nesse cenário, você pode perder literalmente milhares a mais do que esperava economizar.
Stéphane Gourichon 4/11
Em outras palavras, se o tamanho médio do arquivo for menor que 4 MB, não use "-T largefile4". Para discos enormes, agora acabo usando o -T hugeque faz inode_ratio = 65536. Em caso de dúvida, apenas não defina -iou -Te deixe as pessoas sábias que criaram o ext2 / 3/4 escolherem por você. Você reservará uma pequena parte conhecida do espaço para tarefas domésticas e (a menos que armazene milhões de arquivos muito pequenos), não perderá uma porcentagem arbitrária do espaço de armazenamento real. Como as pessoas escrevem, um software sofisticado é bom, mas um bom sistema de arquivos deve ser chato e apenas funcionar.
Stéphane Gourichon
no meu caso, mkfs.ext4é mais rápido (time real 0m16.001s:) do que mkfs.ext3(time real 2m10.336s:).
coanor
19

Adicione a bandeira -E lazy_itable_init

Aqui está o que a página do manual diz:

Se ativado e o recurso uninit_bg estiver ativado, a tabela inode não será totalmente inicializada pelo mke2fs. Isso acelera notavelmente a inicialização do sistema de arquivos, mas requer que o kernel conclua a inicialização do sistema de arquivos em segundo plano quando o sistema de arquivos é montado pela primeira vez. Se o valor da opção for omitido, o padrão será 1 para ativar a inicialização da tabela de inodes preguiçosos.

Alex Wheeler
fonte
3
Tecnicamente, isso não torna o formato mais rápido, mas permite montar e usar o sistema de arquivos enquanto o formato termina em segundo plano.
wyzard --stop Prejudicar Monica--
Muito obrigado! isso funcionou muito bem, os documentos / homem não estavam claros para mim até que sabia o que procurar! thx tanto!
preso
Eu já vi referências sobre a versão mínima do kernel, qual é o mínimo necessário para usar isso?
Xarses
8

O padrão é um formato rápido; configurar as estruturas para um volume ext * leva muito mais tempo do que para um volume NTFS, já que existem mais. Você pode reduzir o número de superblocos, mas mesmo isso só vai tão longe.

Ignacio Vazquez-Abrams
fonte
obrigado pela informação, meu dispositivo começou a formatar um disco USB2 de 2 TB há cerca de 20 horas, ainda está funcionando - o dispositivo está com pouca energia, pense no Raspberry Pi com 64 MB de RAM. para iniciar o formato, tive que configurar a paginação no mesmo disco USB que está sendo formatado. Existe algo que eu possa fazer para acelerar isso? eu seria ótimo se eu conseguisse que o desempenho fosse menos de uma hora ou duas?
preso
2
lazy_itable_init fez o truque para mim, este não é o padrão e faz a formatação muito mais rápida
preso
4

Se você estiver armazenando arquivos principalmente maiores, poderá aumentar o número de bytes por inode, diminuindo o número de inodes criados. Isso pode acelerar substancialmente o tempo de criação.

rnxrx
fonte