Como redimensionar uma partição ext4 na linha de comando?

Como redimensionar uma partição ext4 na linha de comando?

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 fdiskpara 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 fdiskpara 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.

  1. Exclua a partição primária

  2. Exclua a partição estendida

  3. Crie uma nova partição primária começando no mesmo setor da original, mas com um tamanho maior (deixe algumas para troca)

  4. 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 resize2fsonline 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/fstabo novo UUID e ativar a troca

me@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/fstabpara substituir o UUID da partição swap antiga pelo novo de mkswap.

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 fdiskfoi 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: 2no 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 fdiskpara aumentar o tamanho da partição e depois execute resize2fspara aumentar o tamanho do sistema de arquivos.

Se você for diminuir o tamanho de ambos, execute resize2fsprimeiro 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: -Nsignifica que sfdiskfuncionará em uma única partição. Quando iniciado assim, sfdiskserá 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 printe 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 sda1e 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, mkswape swapono fstabarquivo. 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

informação relacionada