Como redimensiono uma partição ext4 além do limite de 16 TB?


26

Ao tentar redimensionar e a antiga partição ext4 criada sem o sinalizador de 64 bits, o resize2fs 1.42 falhará se o novo tamanho for ou exceder 16TiB.

$ resize2fs -p /dev/mapper/target-device
resize2fs: New size too large to be expressed in 32 bits

Não quero copiar os arquivos para uma mídia externa. Também não quero arriscar a perda de dados. Como posso redimensionar o volume com segurança?

Respostas:


46

Você está tentando redimensionar um sistema de arquivos criado antes da -O 64bitopção se tornar padrão. É possível atualizar o sistema de arquivos ext para endereços de 64 bits, permitindo a abrangência de volumes significativamente maiores (1024 PiB em vez de 16 TiB).

Supondo que seu dispositivo de destino seja chamado /dev/mapper/target-device, é isso que você precisa fazer:

Pré-requisitos

  1. Esse tamanho de volume deve ser suportado pelo RAID. Erros de disco regulares irá causar danos de outra forma.
  2. Ainda assim, o RAID não é um backup . Você deve ter seus objetos de valor armazenados em outro lugar também.
  3. Primeiro redimensione e verifique todos os volumes ao redor (tabelas de partição, criptografia, lvm).
  4. Após alterar a configuração de RAID do hardware, o linux pode ou não reconhecer imediatamente o novo tamanho máximo. Verifique $ cat /proc/partitionse reinicie, se necessário.

Use um kernel estável recente e e2fsprogs

  1. Verifique se uname -rvocê está executando um kernel que pode lidar adequadamente com sistemas de arquivos ext4 de 64 bits - você deseja usar um 4.4.xkernel ou posterior (padrão Ubuntu 16 e superior).
  2. Adquira e2fsprogs de pelo menos versão 1.43

    • Ubuntu 16.04(2016-04-21) foi lançado com e2fsprogs 1.42.12(2014-08-25)
    • e2fsprogs 1.43 (17/05/2016) é o 1º lançamento capaz de atualizar o tamanho do endereço extfs.
    • Ubuntu 18.04(2018-04-26) é enviado com e2fsprogs 1.44.x(bom!)

Se você está ligado 16.04e não pode atualizar para uma versão mais recente do Ubuntu, precisará habilitar o suporte ao pacote fonte e instalar uma versão mais recente manualmente:

$ resize2fs
# if this  prints version 1.43 or above, continue to step 1
$ sudo apt update
$ sudo apt install git
$ sudo apt build-dep e2fsprogs
$ cd $(mktemp -d)
$ git clone -b v1.44.2 https://git.kernel.org/pub/scm/fs/ext2/e2fsprogs.git e2fsprogs && cd e2fsprogs
$ ./configure
$ make
$ cd resize
$ ./resize2fs
# this should print 1.43 or higher
# if this prints any lower version, panic
# use `./resize2fs` instead of `resize2fs` for the rest of the steps

Redimensionar

Etapa 1: Desmontar adequadamente o sistema de arquivos

$ sudo umount /dev/mapper/target-device

Etapa 2: Verifique o sistema de arquivos quanto a erros

$ sudo e2fsck -fn /dev/mapper/target-device

Etapa 3: ativar o suporte a 64 bits no sistema de arquivos

Consulte man tune2fse man resize2fs- você pode alterar alguns sinalizadores do sistema de arquivos.

$ sudo resize2fs -b /dev/mapper/target-device

Em um RAID HDD típico, são necessários 4 minutos de alta carga de IO e CPU.

Etapa 4: redimensionar o sistema de arquivos

$ sudo resize2fs -p /dev/mapper/target-device

Se você não passar um tamanho na linha de comando, o resize2fs assumirá "aumentar para todo o espaço disponível" - normalmente é exatamente isso que você deseja. O -psinalizador ativou as barras de progresso - mas essas somente são exibidas após algumas etapas iniciais.

Em um RAID HDD típico, são necessários 4 minutos de alta carga de IO e CPU.

Verifique novamente

Verifique o sistema de arquivos novamente

$ sudo e2fsck -fn /dev/mapper/target-device

O e2fsck de versões mais recentes pode sugerir a correção de carimbos de data / hora ou extensão de árvores que as versões anteriores trataram mal. Isso não indica nenhum problema sério e você pode optar por corrigi-lo agora ou mais tarde.

Se ocorrerem erros, não entre em pânico e não tente gravar no volume; consulte alguém com amplo conhecimento do sistema de arquivos, pois operações adicionais provavelmente destruiriam dados!

Se nenhum erro ocorrer, remonte o dispositivo:

$ sudo mount /dev/mapper/target-device

Sucesso!

Você não precisará de nenhuma versão não-Ubuntu do e2fsprogs para continuar a operação do sistema de arquivos atualizado - o kernel os suporta há algum tempo. Só foi necessário iniciar a atualização.


Para referência, há uma mensagem de erro semelhante que o mke2fs imprimirá se for solicitado que você crie um dispositivo enorme com opções inadequadas:

$ mke2fs -O ^64bit /dev/huge
mke2fs: Size of device (0x123456789 blocks) is too big to be expressed in 32 bits using a blocksize of 4096.

1
Isto está correto. Eu gostaria de acrescentar que o Redhat (portanto, RHEL, Centos, etc) costumava preferir o XFS ao Ext4 em seu instalador ao particionar um sistema de arquivos com mais de 16 TB, e agora prefere o XFS como sistema de arquivos padrão.
Diablo-D3

Sim, a maioria dos kernels antigos ainda significativos no RedHat World ainda não possui suporte estável para o ext4 de 64 bits. Depois que o Ubuntu segue o que muitos gurus do Linux dizem, o ext4 deve ser substituído pelo btrfs - embora o ext4 esteja próximo do btrfs em recursos agora, acredito que o btrfs seja mais elegante em design e talvez até menos propenso a bugs.
ANX

2
O btrfs não está pronto para produção e pode nunca estar pronto para produção, pois a Oracle colocou o desenvolvimento em segundo plano. Minha opinião pessoal é que, se você precisar desse nível de complexidade do sistema de arquivos, use uma pequena raiz XFS de 8 GB combinada com o ZFS para atender às suas reais necessidades de armazenamento de dados.
Diablo-D3

0

Aconteceu comigo recentemente, com um Ubuntu 18.04 que foi atualizado após a instalação inicial com um Ubuntu 16.04 ... A matriz de armazenamento (/ dev / sdb) foi inicialmente particionada em duas partições de 14 TB, e é isso que você deseja aumentar a primeira partição para 28 TB que ocorreu o problema.

Não precisei baixar uma nova versão do resize2fs porque era muito recente.

# resize2fs 
resize2fs 1.44.1 (24-Mar-2018)

O único problema era converter a partição 1 de 64 bits, que havia sido formatada em 32 bits ... Em vez de convidar o leitor a consultar a documentação do tune2fs (como o Anx sugere), proponho um exemplo real!

# tune2fs -O 64bit /dev/sdb1
tune2fs 1.44.1 (24-Mar-2018)
Please run "resize2fs -b /dev/sdb1" to enable 64-bit mode.

# resize2fs -b /dev/sdb1
resize2fs 1.44.1 (24-Mar-2018)
Convert the file system to 64 bits.
The file system on /dev/sdb1 now has a size of 3662109119 blocks (4k).

Finalmente, aumentamos a partição do disco!

# resize2fs /dev/sdb1
resize2fs 1.44.1 (24-Mar-2018)
Resizing the file system on /dev/sdb1 to 7324303099 (4k) blocks.
The file system on / dev / sdb1 now has a size of 7324303099 blocks (4k).
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.