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

19

Ao tentar redimensionar e ext4 antiga Partição que foi criada sem o sinalizador de 64 bits, 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

Eu não quero copiar os arquivos para um meio externo. Eu não quero arriscar a perda de dados também. Como posso redimensionar o volume com segurança?

    
por anx 31.05.2016 / 08:39

1 resposta

34

Por que isso está acontecendo:

Novos sistemas de arquivos geralmente são criados com a opção -O 64bit Isso permite que eles abranjam volumes significativamente maiores (1024 PiB em vez de 16 TiB). Sistemas de arquivos mais antigos, que foram criados antes disso se tornarem padrão, antes não tinham a opção de atualizar o tamanho do endereço para 64 bits.

Embora ainda não faça parte do Ubuntu - Ubuntu 16.04 (2016-04-21) foi lançado com e2fsprogs Version 1.42.12 (2014-08-25), isso foi solucionado na última versão de e2fsprogs Version 1.43 (2016-05 -17).

Agora vou descrever como a operação pode ser feita assumindo que seu dispositivo de destino é chamado /dev/mapper/target-device

Pré-requisitos:

  1. Backup o que você não pode perder. Sempre. Observe também que este tamanho do sistema de arquivos será prejudicado por erros comuns de disco, então configure um RAID para garantir a integridade.
  2. A operação deve ser feita off-line - o que significa que você não pode fazer isso na raiz do sistema (sério, se sua raiz for > 16TiB, consulte um especialista em linux)
  3. Assegure-se de que todos os volumes circundantes ofereçam suporte total ao tamanho resultante (ele está contido em um contêiner criptografado? em qualquer tabela de partições?)
  4. Continue com o upgrade do sistema de arquivos após redimensionando e verificando novamente o que está contido - depois de atualizar um sistema RAID, o Linux pode ou não reconhecer imediatamente o novo tamanho máximo. verifique $ cat /proc/partitions .
  5. Certifique-se (verifique uname -r ) que você está executando um kernel que pode manipular corretamente sistemas de arquivos ext4 de 64 bits - qualquer kernel 4.4.x (padrão 16.04) ou posterior será bom - kernels mais antigos suportam a opção 64bit, não sei se eles estão livres de erros.

Pré-requisito 6 - Adquira o e2fsprogs de pelo menos a versão 1.43

$ resize2fs
# if this command - without any parameters - prints a version above 1.43, continue to step 1
$ sudo apt update
$ sudo apt install git
$ sudo apt build-dep e2fsprogs  # see https://askubuntu.com/q/158871/158442 to enable source package support
$ cd $(mktemp -d)
$ git clone -b v1.44.2 https://git.kernel.org/pub/scm/fs/ext2/e2fsprogs.git e2fsprogs && cd e2fsprogs
$ ./configure
$ make
# note: make test is strange in 1.43, see the master changelog for a fix
$ cd resize
$ ./resize2fs
# if this prints 1.43 or higher, use './resize2fs' instead of 'resize2fs' for the rest of the steps
# if this prints any other version, panic

Passo 1 - desmontar corretamente o sistema de arquivos

$ sudo umount /dev/mapper/target-device

Passo 2 - Verifique o sistema de arquivos em busca de erros

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

Passo 3 - habilite o suporte a 64 bits no sistema de arquivos

$ man tune2fs
# read about the filesystem flags - you may wish to change some
$ man resize2fs
$ sudo resize2fs -b /dev/mapper/target-device
# on a typical HDD RAID, this takes 4 minutes of high IO & CPU load

Passo 4 - redimensione o sistema de arquivos

$ sudo resize2fs -p /dev/mapper/target-device
# resize2fs assumes "grow to all space available" if no size is passed on command line
# the -p flag will enable progress bars - after completing some initial steps
# on a typical HDD RAID, this takes 4 minutes of high IO & CPU load

Passo 5 - verifique o sistema de arquivos novamente

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

Etapa 6 - remontar

Se ocorrerem erros, não entre em pânico; não tente gravar no volume; consulte alguém que realmente conheça essas coisas antes de analisar completamente seus 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 suporta isso já há algum tempo. Foi necessário apenas iniciar a atualização.

Nota: O e2fsck de versões mais recentes pode sugerir a correção de registros de data e hora ou de extensão que as versões anteriores trataram mal. Este não é um problema e você pode escolher corrigi-lo agora ou mais tarde.

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.
    
por anx 31.05.2016 / 08:39

Tags