Como posso aumentar o tamanho da partição raiz de um sistema em tempo de execução?
Tenho uma partição que não está alocada após a partição raiz (que também é ext4), como posso adicionar esse espaço não alocado ao espaço alocado à partição raiz sem ter que desligar o servidor?
GUI (Ubuntu 14.04 e posteriores): GParted v0.17 e posteriores fornecem uma boa GUI para isto. (Versões mais antigas se recusarão a redimensionar uma partição montada).
Linha de comando (qualquer versão Ubuntu): Há três passos para isto.
Passo 1. A partição deve primeiro ser redimensionada. Se você'está usando LVM, é fácil, e você presumivelmente sabe como proceder. Se você're usa partições clássicas, it's um pouco mais complicado, e pode requerer uma reinicialização (embora você nunca tenha que inicializar outro sistema ou live CD).
É assim que eu o faço: Use fdisk
para primeiro apagar a partição (a idéia é que os dados no disco serão preservados), depois recrie-a cuidadosamente com um tamanho maior na mesma posição.
Exemplo:
$ sudo fdisk /dev/sda
Command (m for help): p
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 9437183 4717568 83 Linux
Command (m for help): d
Selected partition 1
Command (m for help): p
Device Boot Start End Blocks Id System
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4, default 1): 1
First sector (2048-10485759, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-10485759, default 10485759):
Using default value 10485759
Command (m for help): p
Device Boot Start End Blocks Id System
/dev/sda1 2048 10485759 5241856 83 Linux
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.
Mais uma vez, é fundamental que a nova partição comece no mesmo bloco que a antiga. O Id também deve corresponder (83 para sistemas Linux). Esteja preparado para perder todos os seus dados ao mais pequeno erro de digitação.
Para estar no lado seguro, você também pode restaurar a bandeira de inicialização (que de acordo com a Wikipedia ainda é necessária em alguns computadores), pressionando a
.
Veja a seção de comentários para saber o que fazer se sua partição swap estiver no caminho.
A esta altura já deve ser evidente porque é que as pessoas recomendam o uso de um CD ao vivo. ;-)
Passo 2.
Como o fdisk
o lembra, você deve recarregar a tabela de partição antes de prosseguir. A maneira mais segura é simplesmente reiniciar; mas você também pode utilizar partprobe
ou kpartx
(mais informações).
Passo 3. Assim que a partição for redimensionada e a tabela de partição recarregada, é uma simples questão de executar `resize2fs' no sistema de arquivos, e você pode fazer isso mesmo quando ela's montada como a partição raiz.
Exemplo:
$ sudo resize2fs /dev/sda1
É possível fazer um redimensionamento on-line de um sistema de arquivos ext4, mesmo se ele's sua partição raiz. Utilize o comando `resize2fs'.
sudo resize2fs /dev/sda1
EDIT: Não é permitido o encolhimento on-line:
root@brunojcm-htpc:/home# resize2fs /dev/sda5 2654693
resize2fs 1.42 (29-Nov-2011)
Filesystem at /dev/sda5 is mounted on /; on-line resizing required
resize2fs: On-line shrinking not supported
Você também poderia simplesmente fazer uso de **GParted* - desde que a partição da qual você está redimensionando não seja a que você inicializou - senão eu sugiro que a opção live CD** seja um pouco mais fácil para iniciantes.
GParted basicamente faz todos os passos - apenas com base em uma interface gráfica.