Encolher a partição para ajustar-se exatamente ao tamanho do sistema de arquivos subjacente

2

Recentemente reduzi um tamanho do sistema de arquivos ext4 para 500 GB

df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda2       493G   64G  404G  14% /

agora eu quero reduzir o tamanho da partição para se ajustar exatamente ao tamanho do sistema de arquivos.

Eu tentei usar o parted e o comando resizepart. O problema é quando parted pede o novo tamanho. Se eu escolher 500GB, a partição resultante será menor que 500GB e, como resultado, o sistema de arquivos subjacente não caberá nessa partição. Alguma dica sobre como fazer os cálculos de tamanho correto?

    
por Vikelidis Kostas 14.08.2016 / 19:31

1 resposta

6

Os tamanhos informados por df serão incorretos, pois são considerados apenas blocos de dados e blocos de erros usados internamente pelo sistema de arquivos, bem como pelos blocos reservados.

A maneira mais fácil é encolher seu sistema de arquivos para ser menor do que você deseja em pelo menos 10%. Redimensione a partição para o tamanho desejado e, em seguida, amplie o sistema de arquivos com resize2fs.

Se você quiser calcular manualmente, você precisa saber o tamanho do sistema de arquivos internamente. Verifique isso com tune2fs -l /dev/sda2 e multiplique a contagem de blocos pelo tamanho do bloco. Ao redimensionar a partição no parted, alterne as unidades para setores com unit s e print da tabela para obter o setor de início e o tamanho do setor lógico. Divida o tamanho total em bytes acima pelo tamanho do setor. Arredondar para o múltiplo mais próximo de 2048 e redimensionar para esse número de setores (setor final = tamanho em setores + iniciar setor - 1).

Equação (executável em Python apenas preencha os primeiros 4 valores):

block_count = N
block_size = N
sector_size = N
start_sector = N
fs_size = block_count * block_size
fs_sectors = fs_size/sector_size
part_sectors = ((fs_sectors-1)/2048+1)*2048
end_sector = start_sector + part_sectors - 1
print "Partition start: %d end: %d size: %d"%(start_sector,end_sector,part_sectors)
print "Resize in parted with: \nresizepart <number> %ds"%(end_sector)
    
por 14.08.2016 / 20:36