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:
- 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.
- 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)
- 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?)
- 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
. - Certifique-se (verifique
uname -r
) que você está executando um kernel que pode manipular corretamente sistemas de arquivos ext4 de 64 bits - qualquer kernel4.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.