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 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 para a partição raiz sem precisar desligar o servidor?
partitioning
ext4
BonboBingo
fonte
fonte
Respostas:
GUI (Ubuntu 14.04 e posterior) : GParted v0.17 e posterior fornecem uma boa interface gráfica para isso. (As versões mais antigas se recusam a 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ê estiver usando LVM, é fácil e você provavelmente sabe como proceder. Se você estiver usando partições clássicas, é um pouco mais complicado e pode exigir uma reinicialização (embora você nunca precise inicializar outro sistema ou CD ao vivo).
É assim que eu faço: use
fdisk
para excluir primeiro a partição (a idéia é que os dados no disco sejam preservados) e, em seguida, recriá-la cuidadosamente com um tamanho maior na mesma posição.Exemplo:
Novamente, é fundamental que a nova partição inicie no mesmo bloco que a antiga. O ID também deve corresponder (83 para sistemas Linux). Esteja preparado para perder todos os seus dados com o menor erro de digitação.
Para garantir a segurança, 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 para saber o que fazer se sua partição de swap estiver no caminho.
Até agora, deve estar claro por que as pessoas recomendam o uso de um CD ao vivo. ;-)
Etapa 2. Como
fdisk
você lembra, é necessário recarregar a tabela de partição antes de continuar. A maneira mais segura é simplesmente reiniciar; mas você também pode usarpartprobe
oukpartx
(mais informações) .Etapa 3. Depois que a partição é redimensionada e a tabela de partição recarregada, é uma questão simples de executar
resize2fs
no sistema de arquivos, e você pode fazer isso mesmo quando montada como partição raiz.Exemplo:
fonte
fdisk
diz,partprobe
oukpartx
pode funcionar em vez de uma reinicialização; veja também esta pergunta . Mesmo se você reiniciar, a solução ainda será preferível ao uso de um CD ao vivo quando houver tempo de inatividade, em que uma reinicialização simples pode ser inferior a 10 s para uma máquina virtual. Também é mais rápido no tempo do operador, e é por isso que eu geralmente uso essa abordagem. :)free -h
), desative a troca (swapoff /dev/sda2
), altere a tabela de partições (incluindo excluir e recriar a partição de troca) e 1) reinicialize ou 2) recarregue a tabela de partiçãoswapon
novamente. (Se a memória é muito apertado para desativar troca temporariamente, você ainda pode criar e ativar uma nova partição swap (/dev/sda3
), então swapoffsda2
, mas então você vai ter que atualizar/etc/fstab
com o novo nome do dispositivo swap.)É possível fazer um redimensionamento on-line de um sistema de arquivos ext4, mesmo que seja sua partição raiz. Use o
resize2fs
comandoEDIT: O encolhimento on-line não é permitido:
fonte
man resize2fs
:The resize2fs program does not manipulate the size of partitions. If you wish to enlarge a filesystem, you must make sure you can expand the size of the underlying partition first. This can be done using fdisk(8) by deleting the partition and recreating it with a larger size or using lvextend(8),if you're using the logical volume manager lvm(8).
Esta pergunta é sobre redimensionar a partição , não o sistema de arquivos . A distinção é sutil, mas muito importante.The resize2fs program will resize ext2, ext3, or ext4 file systems. It can be used to enlarge or shrink an unmounted file system located on device. If the filesystem is mounted, it can be used to expand the size of the mounted filesystem, assuming the kernel supports on-line resizing. (As of this writing, the Linux 2.6 kernel supports on-line resize for filesystems mounted using ext3 and ext4.).
fdisk
quandogrowpart
isso fará isso muito facilmente para você.Uma solução mais fácil - use
growpart <device> <partition>
:Como sempre, faça backup da sua tabela de partição (
sfdisk -d /dev/xvda > partition_bak.dmp
) por precaução.fonte
sfdisk: /dev/nvme0n1p5: does not contain a recognized partition table
(usando dual boot com o Windows)gparted
-lo.apt-get install cloud-utils
/dev/nvme0n1
. p5 é a partição 5 neste disco. Compare com as fatias de disco BSD tradicionais, elas usam um esquema de numeração semelhante.Sim, você pode reduzir / mover / aumentar uma partição raiz on-line sem nenhuma reinicialização (nem livecd nem usbkey): consulte esta resposta . É muito bem escrito e fácil de seguir, embora bastante longo e um pouco arriscado. Portanto, se você quiser apenas aumentar sua partição ext4, poderá seguir as
resize2fs
soluções de trabalho convencionais .A solução geral que encontrei funcionará em qualquer tipo de solução dedicada ou VPS, por exemplo.
TLDR; Esta solução implica em
pivot_root
paratmpfs
que você possaumount
viver com segurança sua partição raiz e mexer nela. Uma vez feito, vocêpivot_root
retornará à sua nova partição raiz.Isso permite praticamente qualquer manipulação no sistema de arquivos raiz (mova-o, altere o sistema de arquivos, altere o dispositivo físico ...).
Nenhuma reinicialização é necessária no processo, e isso permite ignorar a limitação de
resize2fs
não ser possível reduzir asext4
partições.Eu pessoalmente usei isso, e ele funciona muito bem no sistema debian também, por isso deve funcionar no Ubuntu. Estou muito surpreso por não ver esta solução detalhada um pouco mais vinculada às muitas perguntas nos sites stackexchange que tratam do mesmo problema.
Nota: Obviamente, se você quiser aumentar sua partição,
resize2fs
basta um simples , conforme indicado em vários locais e em outras respostas aqui.fonte
Você também pode usar o GParted - desde que a partição que você está redimensionando não seja a que você inicializou - caso contrário, sugiro que a opção de CD ao vivo seja um pouco mais fácil para iniciantes.
O GParted basicamente executa todas as etapas - apenas com base em uma interface gráfica do usuário.
fonte
Acabei de redimensionar uma partição raiz ext4 em um sistema ativo enquanto a raiz estava montada.
fonte
Eu gostaria de fazer uma extensão da resposta de @ Søren Løvborg: estendendo a partição com uma partição swap presente.
Primeiro o layout do disco após estendê-lo:
Portanto, o sda1 precisa ser estendido com o espaço livre no final do disco, mas a partição swap está entre eles. É assim que você pode fazer:
Primeiro, precisamos desativar a troca. Verifique quanto é usado e se você pode desligá-lo.
troca não é usada aqui para que possamos desativá-la
Agora vamos mudar a tabela de partição:
(nota: se a primeira partição iniciar no setor 63, em vez de 2048, você precisará adicionar a opção
-c=dos
)Nota: o tamanho de sda1 é a quantidade total de setores menos o tamanho do setor da sua partição de swap: 14335999-2093058 = 12242941
Como o fdisk menciona: o kernel ainda está usando a tabela de partições antiga, portanto, precisamos recarregá-lo.
Agora precisamos executar o resize2fs no sda1 (não esqueça disso!)
Agora, as coisas ainda não acabaram. Como você provavelmente notou, o sda2 está particionado como tipo Linux (Ext4). Por alguma razão, no fdisk não há como escolher o tipo. Então nós temos que alternar usando
cfdisk
Escolha sda2 e altere o tipo para
82 Linux swap / Solaris
e certifique-se de escrevê-lo (digite yes para confirmar)Agora podemos reativar a troca
E, finalmente, ative:
A única coisa que precisamos fazer é atualizar o fstab para montar a partição swap automaticamente após a inicialização
E mude o UUID da partição swap para a saída acima:
Agora está tudo bem e você pode reiniciar sem problemas.
fonte
mkswap
&swapon
precisam ser executados no sda2. Cometi um erro no início do meu post:swapoff
precisa ser executado no sda5. Os comentários são sempre bem-vindos, foi difícil anotar.cryptdisks_stop
, atualizar o / etc / crypttab em vez do/etc/fstab
e reiniciar o cryptdisks comcryptdisks_start
.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 tudo, desde um console virtual com a rede desabilitada, e tirei um instantâneo de antemão, apenas por precaução, mas o instantâneo não era necessário, para que eu pudesse fazer isso 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 SSH):
Opcionalmente, tire um instantâneo da VM para ter cuidado.
Redimensionar partição:
Redimensionar sistema de arquivos:
resize2fs /dev/sda1
Se algo der errado, você poderá restaurar seu instantâneo aqui. Se tudo correu bem, voltar ao nível de execução normal (obtido acima) - normalmente 5:
init 5
. Talvez seja melhor fazer uma reinicialização completa neste momento para garantir que tudo volte corretamente (eu tive um problema de data / ntp posteriormente).fonte
Siga esses passos.
su
parted
p
para ver as partições disponíveisrm PARTITION NUMBER
para criar espaço livre.resizepart ROOT NUMBER
e reinicie o sistema, se necessárioparted
digitandoexit
e no tipo de terminalpartprobe
e pressione enter (isso pode ser feito mesmo após a reinicialização)resize2fs /dev/sda PARTITION NUMBER
e aproveite a partição raiz espaçosa.fonte
Como afirmado anteriormente:
é possível expandir ao vivo a partir de um sistema raiz (sem dificuldades, pois a seção de inicialização não deve ser movida)
encolher uma partição raiz ativa precisa ser feita a partir de um dispositivo de inicialização externo (inicialização do sistema ao vivo cd / usb-stick), como se houvesse alguma falha, incompatibilidade. capaz de inicializar corretamente.
Qualquer tipo de "mas eu fiz e funciona" é pura sorte.
fonte