Como posso redimensionar uma partição raiz ext em tempo de execução?

182

Como posso aumentar o tamanho da partição raiz de um sistema em tempo de execução?

Eu tenho uma partição que não é alocada após a partição raiz (que também é ext4), como posso adicionar esse espaço não alocado ao espaço alocado para a partição raiz sem ter que desligar o servidor?

    
por BonboBingo 30.01.2011 / 18:23

10 respostas

162

GUI (Ubuntu 14.04 e posterior) : GParted v0.17 e posteriores fornecem uma boa interface gráfica para isso. (Versões mais antigas recusarão redimensionar uma partição montada).

Linha de comando (qualquer versão do Ubuntu): Existem três etapas para isso.

Etapa 1. A partição deve primeiro ser redimensionada. Se você está usando o LVM, é fácil e você provavelmente sabe como proceder. Se você estiver usando partições clássicas, é um pouco mais complicado, e may requer uma reinicialização (embora você nunca precise inicializar outro sistema ou um live CD).

É assim que eu faço: Use fdisk para primeiro deletar a partição (a idéia é que os dados no disco serão preservados), então cuidadosamente recrie-a 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.

Novamente, é essencial 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 menor erro de digitação.

Para estar no lado seguro, você também pode restaurar o sinalizador de inicialização (que de acordo com a Wikipedia ainda é necessário em alguns computadores) pressionando a .

Veja a seção de comentários sobre o que fazer se sua partição swap estiver no caminho.

Até agora, deve ficar claro por que as pessoas recomendam usar um CD ao vivo. ; -)

Etapa 2. Como fdisk te lembra, você deve recarregar a tabela de partições antes de continuar. A maneira mais segura é simplesmente reiniciar; mas você também pode usar partprobe ou kpartx (mais informações) .

Etapa 3. Uma vez que a partição é 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 estiver montado como a partição raiz.

Exemplo:

$ sudo resize2fs /dev/sda1
    
por Søren Løvborg 06.04.2012 / 16:23
108

É possível fazer um redimensionamento on-line de um sistema de arquivos ext4, mesmo que seja sua partição raiz. Use o comando resize2fs .

sudo resize2fs /dev/sda1

EDIT: encolhimento on-line não é permitido:

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
    
por CodeAddict 02.03.2012 / 11:50
13

Uma solução mais fácil - use growpart <device> <partition> :

growpart /dev/xvda 1  # Grows the partition; note the space
resize2fs /dev/xvda1  # Grows the filesystem

Como sempre, faça backup de sua tabela de partições ( sfdisk -d /dev/xvda > partition_bak.dmp ) apenas no caso.

    
por STRML 18.07.2017 / 15:26
8

Você também pode usar o GParted - contanto que a partição que você está redimensionando não seja aquela da qual você inicializou - caso contrário, sugiro que a opção live CD seja um pouco mais fácil para iniciantes.

O

GParted basicamente faz todos os passos - apenas com base em uma GUI liderada.

    
por leatherjacket 30.09.2012 / 13:34
7

Sim, você pode reduzir / mover / aumentar uma partição raiz online sem reinicializações (nem o livecd nem o usbkey): consulte esta resposta . É muito bem escrito e fácil de seguir, embora bastante longo e um pouco arriscado. Então, se você quiser apenas aumentar sua partição ext4, você pode seguir as soluções resize2fs de trabalho convencionais.

A solução geral que eu usei funcionará em qualquer tipo de solução dedicada ou VPS, por exemplo.

TLDR; esta solução implica pivot_root to tmpfs , então você pode umount seguramente sua partição root viver e mexer com ela. Quando terminar, você voltará a pivot_root em sua nova partição raiz.

Isso permite praticamente qualquer manipulação no sistema de arquivos raiz (movê-lo, alterar o sistema de arquivos, alterando seu dispositivo físico ...).

Nenhuma reinicialização é necessária no processo, e isso permite ignorar a limitação de resize2fs não poder reduzir ext4 partições.

Eu pessoalmente usei isso, e ele funciona muito bem no sistema debian também, então ele deve funcionar no Ubuntu. Estou muito surpreso em não ver essa solução em profundidade um pouco mais ligada às muitas perguntas nos sites da stackexchange que lida com o mesmo problema.

Nota: É claro que se você quiser aumentar sua partição, um simples resize2fs será suficiente, conforme indicado em vários lugares e em outras respostas aqui.

    
por vaab 01.02.2016 / 03:08
5

Acabamos de redimensionar uma partição raiz do ext4 em um sistema ativo enquanto a raiz era montada.

[root@habib i686]# resize2fs /dev/vg_habib/lv_root
resize2fs 1.42 (29-Nov-2011)
Filesystem at /dev/vg_habib/lv_root is mounted on /; on-line resizing required
old_desc_blocks = 4, new_desc_blocks = 10
Performing an on-line resize of /dev/vg_habib/lv_root to 38427648 (4k) blocks.
The filesystem on /dev/vg_habib/lv_root is now 38427648 blocks long.

[root@habib i686]# 
    
por CDR 04.12.2012 / 23:40
0

Eu fiz isso com sucesso sem umount , pivot_root , ou remoção temporária da partição principal, usando o parted 3.2 no kernel do Ubuntu 16.04, 4.4.0. Para ser cauteloso, fiz de tudo a partir de um console virtual com rede desativada e tirei um instantâneo por precaução, mas o instantâneo não era necessário, então eu poderia ter feito isso também via SSH e sem alterar os níveis de execução.

Determine o tamanho da partição: parted /dev/sda1 print | egrep "Disk.*GB"

Opcionalmente, mude para o modo multiusuário sem rede (deve ser feito a partir de um console, não do SSH):

runlevel     # remember the original runlevel
init 2

Opcionalmente, tome um instantâneo da VM para ser cauteloso.

Redimensionar partição:

parted
p
resizepart NUMBER SIZE
# answer "Yes" when asked about resizing a live partition.
q

Redimensionar o sistema de arquivos: resize2fs /dev/sda1

Se algo der errado, você poderá restaurar seu instantâneo aqui. Se tudo correu bem, retorne ao runlevel normal (obtido acima) - normalmente 5: init 5 . Pode ser melhor fazer uma reinicialização completa neste ponto para garantir que tudo volte corretamente (tive um problema de data / ntp posteriormente).

    
por Roger Dueck 14.07.2017 / 02:09
0

Como afirmado anteriormente:

  • A expansão ao vivo de um sistema raiz é possível (sem dificuldades, já que a seção de inicialização não deve ser movida)

  • A redução de uma partição raiz ao vivo precisa ser feita a partir do dispositivo de inicialização externo (boot do sistema live cd / usb-stick), como se houvesse alguma falha, incompatibilidade .. o que for ... reiniciado e, eventualmente, não será capaz de inicializar corretamente.

Qualquer tipo de "mas eu fiz e funciona" é pura sorte.

    
por ascervera 10.01.2014 / 22:58
0

Siga estes passos.

  1. abra o terminal como superusuário su
  2. executar parted
  3. digite p para ver as partições disponíveis
  4. identifique seu número de partição raiz (ex: 'sda 3' significa número 3) e exclua uma partição adjacente usando rm PARTITION NUMBER para criar espaço livre.
  5. agora, aumente o tamanho da raiz digitando resizepart ROOT NUMBER e reinicialize o sistema, se necessário
  6. saia do parted digitando exit e no terminal digite partprobe e pressione enter (isso pode ser feito mesmo após a reinicialização)
  7. finalmente, execute resize2fs /dev/sda PARTITION NUMBER e aproveite a partição raiz espaçosa.
por Gurunadha Reddy 13.09.2017 / 22:22
-6

Como observado anteriormente funciona bem só precisa redefinir o sinalizador de inicialização

execute "parted"

parted /dev/sda

verifique o número da partição

(parted) print

redefinir o sinalizador de inicialização no número de partição '1' neste caso

(parted) set 1 boot on
(parted) quit
    
por benko 16.05.2013 / 15:39