Qual é a maneira mais fácil de redimensionar uma partição ext4 (ou qualquer tipo de partição dependendo do método) a partir da linha de comando (potencialmente com o menor número de comandos, mas também a mais fácil de entender)?
Usar uma ferramenta como o Gparted é obviamente fácil em uma GUI, mas e na linha de comando? Acho que GUIs baseadas em texto também podem contar como resposta, já que tecnicamente ainda estão na linha de comando. Só precisa ser fácil.
Por partição quero dizer uma partição simples em um único disco de um computador pessoal (por exemplo, em um laptop). Por exemplo, quero redimensionar arquivos /dev/sda4
. Não há RAIDs, não há mais de uma unidade de disco, não há nada complicado aqui. Apenas uma partição simples em um único disco (/dev/sdaX em /dev/sda).
Responder1
Você pode usar fdisk
para alterar sua tabela de partição durante a execução. Referir-seRedimensionamento ao vivo de um sistema de arquivos ext4 no Linux
(sobreO silêncio do códigoblog):
Isenção de responsabilidade: As instruções a seguir podem facilmente estragar seus dados se você cometer um erro. Eu estava fazendo isso em uma VM da qual fiz backup antes de executar as ações a seguir. Se você perder seus dados porque não fez um backup, não venha reclamar.
...
Primeiro: Aumente o tamanho do disco.
No ESXi isso é simples, basta aumentar o tamanho do disco virtual. Agora você tem um disco rígido maior, mas ainda precisa a) aumentar o tamanho da partição eb) redimensionar o sistema de arquivos.
Segundo: Aumente o tamanho da partição.
Você pode usar
fdisk
para alterar a tabela de partição durante a execução. A instalação padrão do Ubuntu criou 3 partições: uma primária (sda1), uma estendida (sda2) com uma única partição lógica (sda5) nela. A partição estendida é usada simplesmente para troca, então eu poderia movê-la facilmente sem perder nenhum dado.
Exclua a partição primária
Exclua a partição estendida
Crie uma nova partição primária começando no mesmo setor da original, mas com um tamanho maior (deixe algumas para troca)
Crie uma nova partição estendida com uma partição lógica para armazenar o espaço de troca
me@ubuntu:~$ sudo fdisk /dev/sda Command (m for help): p Disk /dev/sda: 268.4 GB, 268435456000 bytes 255 heads, 63 sectors/track, 32635 cylinders, total 524288000 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x000e49fa Device Boot Start End Blocks Id System /dev/sda1 * 2048 192940031 96468992 83 Linux /dev/sda2 192942078 209713151 8385537 5 Extended /dev/sda5 192942080 209713151 8385536 82 Linux swap / Solaris Command (m for help): d Partition number (1-5): 1 Command (m for help): d Partition number (1-5): 2 Command (m for help): n Partition type: p primary (0 primary, 0 extended, 4 free) e extended Select (default p): p Partition number (1-4, default 1): Using default value 1 First sector (2048-524287999, default 2048): Using default value 2048 Last sector, +sectors or +size{K,M,G} (2048-524287999, default 524287999): 507516925 Command (m for help): p Disk /dev/sda: 268.4 GB, 268435456000 bytes 255 heads, 63 sectors/track, 32635 cylinders, total 524288000 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x000e49fa Device Boot Start End Blocks Id System /dev/sda1 2048 507516925 253757439 83 Linux Command (m for help): n Partition type: p primary (1 primary, 0 extended, 3 free) e extended Select (default p): e Partition number (1-4, default 2): 2 First sector (507516926-524287999, default 507516926): Using default value 507516926 Last sector, +sectors or +size{K,M,G} (507516926-524287999, default 524287999): Using default value 524287999 Command (m for help): p Disk /dev/sda: 268.4 GB, 268435456000 bytes 255 heads, 63 sectors/track, 32635 cylinders, total 524288000 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x000e49fa Device Boot Start End Blocks Id System /dev/sda1 2048 507516925 253757439 83 Linux /dev/sda2 507516926 524287999 8385537 5 Extended Command (m for help): n Partition type: p primary (1 primary, 1 extended, 2 free) l logical (numbered from 5) Select (default p): l Adding logical partition 5 First sector (507518974-524287999, default 507518974): Using default value 507518974 Last sector, +sectors or +size{K,M,G} (507518974-524287999, default 524287999): Using default value 524287999 Command (m for help): p Disk /dev/sda: 268.4 GB, 268435456000 bytes 255 heads, 63 sectors/track, 32635 cylinders, total 524288000 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x000e49fa Device Boot Start End Blocks Id System /dev/sda1 2048 507516925 253757439 83 Linux /dev/sda2 507516926 524287999 8385537 5 Extended /dev/sda5 507518974 524287999 8384513 83 Linux Command (m for help): t Partition number (1-5): 5 Hex code (type L to list codes): 82 Changed system type of partition 5 to 82 (Linux swap / Solaris) Command (m for help): p Disk /dev/sda: 268.4 GB, 268435456000 bytes 255 heads, 63 sectors/track, 32635 cylinders, total 524288000 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x000e49fa Device Boot Start End Blocks Id System /dev/sda1 2048 507516925 253757439 83 Linux /dev/sda2 507516926 524287999 8385537 5 Extended /dev/sda5 507518974 524287999 8384513 82 Linux swap / Solaris 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. me@ubuntu:~$ sudo reboot
Percebi depois que não configurei o sinalizador de inicialização, mas aparentementevocê realmente não precisa disso.
Terceiro: Amplie o sistema de arquivos.
Você pode fazer isso
resize2fs
online em uma partição montada.me@ubuntu:~$ df -h Filesystem Size Used Avail Use% Mounted on /dev/sda1 91G 86G 12M 100% / udev 3.9G 4.0K 3.9G 1% /dev tmpfs 1.6G 696K 1.6G 1% /run none 5.0M 0 5.0M 0% /run/lock none 3.9G 144K 3.9G 1% /run/shm none 100M 16K 100M 1% /run/user me@ubuntu:~$ sudo resize2fs /dev/sda1 resize2fs 1.42.5 (29-Jul-2012) Filesystem at /dev/sda1 is mounted on /; on-line resizing required old_desc_blocks = 6, new_desc_blocks = 16 The filesystem on /dev/sda1 is now 63439359 blocks long. me@ubuntu:~$ df -h Filesystem Size Used Avail Use% Mounted on /dev/sda1 239G 86G 142G 38% / udev 3.9G 12K 3.9G 1% /dev tmpfs 1.6G 696K 1.6G 1% /run none 5.0M 0 5.0M 0% /run/lock none 3.9G 152K 3.9G 1% /run/shm none 100M 36K 100M 1% /run/user
Pequeno problema: após a reinicialização, o espaço de troca não estava ativo. Acontece que você precisa executar
mkswap
, ajustar/etc/fstab
o novo UUID e ativar a trocame@ubuntu:~$ sudo mkswap /dev/sda5 Setting up swapspace version 1, size = 8384508 KiB no label, UUID=141d401a-b49d-4a96-9b85-c130cb0de40a me@ubuntu:~$ sudo swapon --all --verbose swapon on /dev/sda5 swapon: /dev/sda5: found swap signature: version 1, page-size 4, same byte order swapon: /dev/sda5: pagesize=4096, swapsize=8585740288, devsize=8585741312
Edite
/etc/fstab
para substituir o UUID da partição swap antiga pelo novo demkswap
.
Responder2
Estou respondendo caso você tenha uma situação semelhante à minha. Tive que redimensionar o FileSystem (Ext4) em um disco dinâmico executando o Ubuntu 18.0.4 LTS como convidado. Consegui redimensionar o disco do Host e depois redimensionar o FileSystem.
Não foi possível executar os comandos habituais. Por exemplo:
$ resize2fs /dev/sda2
resize2fs 1.44.1 (24-Mar-2018)
The filesystem is already 13180160 (4k) blocks long. Nothing to do!
e fdisk
foi bastante complicado, provavelmente também tive que executar um LiveCD para trabalhar no disco desmontado.
Esses dois comandos resolveram meu problema com facilidade e rapidez:
$ growpart /dev/sda 2
CHANGED: partition=2 start=4096 old: size=105441280 end=105445376 new: size=409595871,end=409599967
$ resize2fs /dev/sda2
resize2fs 1.44.1 (24-Mar-2018)
Filesystem at /dev/sda2 is mounted on /; on-line resizing required
old_desc_blocks = 7, new_desc_blocks = 25
The filesystem on /dev/sda2 is now 51199483 (4k) blocks long.
Nota: 2
no primeiro comando indica o número da partição no dispositivo /dev/sda
.
Responder3
Se você pretende aumentar o tamanho da partição e do sistema de arquivos, primeiro execute fdisk
para aumentar o tamanho da partição e depois execute resize2fs
para aumentar o tamanho do sistema de arquivos.
Se você for diminuir o tamanho de ambos, execute resize2fs
primeiro e depois execute fdisk
.
Responder4
A solução de noaloé obviamente o melhor de tudo; muito mais simples que os outros:
eco "- +" | disco sf -N<parto>/dev/sdX
Breve explicação de como funciona: -N
significa que sfdisk
funcionará em uma única partição. Quando iniciado assim, sfdisk
será interativo e aguardará uma posição inicial, um tamanho e, opcionalmente, um tipo de partição. " -
" significa que a posição inicial não foi alterada, " +
" significa que a posição final utilizará o máximo de espaço possível. Depois disso, você teria que usar os comandos print
e write
. O líder echo "- +" |
faz isso em uma linha.
Sua limitação é que deve haver espaço livrediretamente depois. Se, após o redimensionamento da partição, houver uma partição swap (o que significa que não há dados reais dentro), ela pode ser resolvida facilmente com sfdisk
. Usando a sintaxe acima, suponha que a partição a ser alterada esteja on sda1
e swap on sda2
, temos um disco de 128 G e queremos 6 G de swap: O primeiro passo é mover a partição swap para o final:
echo "122G +" | sfdisk -N2 /dev/sda
Agora expanda a primeira partição:
echo "- +" | sfdisk -N1 /dev/sda
e redimensione-o com resize2fs
. Talvez seja necessário garantir que seu novo swap seja reconhecido. Veja swapoff
, mkswap
e swapon
o fstab
arquivo. Isso não está no escopo desta questão.
Sobre o comando para sda2
:
NÃO mova uma partição com dados desta forma!!! Você perderia todos os seus dados. Este comando não move os dados; apenas os limites da partição. Não há perigo com o comando usado para sda1( - +
) porque a posição inicial da partição não é alterada; este é o significado de " -
", quando usado para uma única partição.
Obrigado @noalo