Como redimensionar partições usando a linha de comando sem usar uma GUI em um servidor?

45

Eu só tenho acesso ao servidor através de um terminal e não posso usar ferramentas gráficas como o GParted!
Eu quero criar uma nova partição a partir de uma parte da raiz (cerca de 768mb) para troca.

# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda         20G  1.3G   18G   7% /
udev             10M     0   10M   0% /dev
tmpfs           199M  4.9M  194M   3% /run
tmpfs           100M   12K  100M   1% /run/user
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
Hamid FzM
fonte

Respostas:

37

Você não pode reduzir / editar uma partição se alguma da partição no dispositivo de armazenamento estiver montada. Portanto, para desmontar e editar o sistema de arquivos raiz, o sistema operacional precisa ser desligado. Em seguida, inicialize em um sistema ativo e edite a partição conforme descrito em outras respostas.

Solução alternativa: arquivo de troca

Como alternativa à criação de uma partição inteira, um arquivo de troca oferece a capacidade de variar seu tamanho on-the-fly e é mais facilmente removido por completo. O arquivo de troca pode ser plugável a quente . ou seja, pode ser adicionado e removido sem desmontar / desligar o SO.

  1. Crie um arquivo de 512 MB chamado /swapfile. Este será o nosso arquivo de troca.

    fallocate -l 512M /swapfile  
    

    OU

    dd if=/dev/zero of=/swapfile bs=1M count=512
    
  2. Defina as permissões corretas (porque um arquivo de troca legível por mundo é uma enorme vulnerabilidade local):

    chmod 600 /swapfile
    
  3. Após criar o arquivo de tamanho correto, formate-o para trocar:

    mkswap /swapfile
    
  4. Ative o arquivo de troca:

    swapon /swapfile
    
  5. Edite /etc/fstabe adicione uma entrada para o arquivo de troca:

    /swapfile none swap defaults 0 0
    

Mais detalhes no wiki do arch linux .

totti
fonte
Eu acho que essa é a resposta mais fácil e eficiente =)! Existem implicações no uso de um arquivo em vez de uma partição?
Alaa Ali
2
Desempenho ligeiramente baixo se o arquivo estiver fragmentado. Não há vantagem de desempenho para um arquivo de troca contíguo ou uma partição, ambos são tratados da mesma maneira.
totti 28/07
1
Eu acho que essa é a melhor solução. Como você não está formatando, diminuindo ou alterando a partição (tabelas), não há risco de perda de dados.
R110 31/07
28

Antes de tudo, é importante saber que você não pode redimensionar para reduzir sua partição raiz se a estiver usando (isso é chamado de redução online). Você só pode cultivá-lo online. Isso é suportado pelo resize2fscomando Vou assumir o seguinte:

  • Você não deseja perder suas informações na partição raiz.
  • Você não tem acesso físico ao disco rígido para usar um LiveCD. Isso pode se aplicar a um ambiente virtual ou remoto. No caso de um virtual, você ainda poderá inicializar a partir de um LiveCD se configurar a VM para inicializar a partir de um LiveCD. Isso pressupõe que a VM suporta a saída da GUI da área de trabalho de onde você executaria o aplicativo Gparted para redimensionar facilmente. Mas como isso é menos provável, presumo que você não possa.

Existem 2 tipos de partições que você pode redimensionar, as partições LVM ou as partições do Logical Volume Manager que oferecem suporte ao redimensionamento on-line (encolhimento / crescimento) desde a criação da galáxia e das partições padrão que a maioria de nós usa. No momento, o único que tem quase 100% de suporte ao redimensionamento on-line completo (Shrink / Grow) é o sistema de arquivos btrfs (que ainda está em desenvolvimento). Vou explicar como fazer as partições normais que a maioria de nós usa no sistema de arquivos ext4.

Redimensionando (Crescendo) a Partição

Para aumentar sua partição, você pode fazê-lo com a raiz montada. Para fazer isso simplesmente faça:

sudo resize2fs /dev/sda1

Desde que você já tenha o espaço vazio pronto para ser mesclado. Depois, recomendo a reinicialização para que as alterações entrem em vigor corretamente. O comando acima seria redimensionado para o máximo permitido. Se você deseja redimensionar para um tamanho específico, basta adicionar o tamanho no final:

sudo resize2fs /dev/sda1 25G

Observe que se você quiser especificar 25,4 GB, não poderá usar o ".". você precisaria descer uma unidade de medida. Nesse caso, de GB para MB, seria assim:

sudo resize2fs /dev/sda1 25400M

Dessa forma, você terá uma partição de 25.4G

Redimensionando (encolhendo) a partição

Reduzir a partição é um processo de duas etapas que envolve:

  • Reduzindo o tamanho do sistema de arquivos pela quantidade necessária.
  • Reduzir o tamanho do dispositivo de bloco subjacente para corresponder ao do sistema de arquivos.

Antes de reduzir a capacidade de um sistema de arquivos, você precisa reduzir o tamanho do dispositivo de bloco (que pode ser uma partição ou um volume lógico). Como isso não está disponível para nenhum sistema de arquivos ext *, você não poderá reduzi-lo de 20 GB para 19,5 GB para criar o swap de 500 MB.

Mesmo o Ext4 não suporta encolhimento online. Se você tentar fazer isso, receberá o seguinte:

insira a descrição da imagem aqui

Sua única aposta, tanto quanto eu sei, é:

  • Instale outra versão do Ubuntu no mesmo servidor (em outra partição) que pode ser usada para reduzir a partição raiz do servidor Ubuntu original.

  • Instale o servidor Ubuntu do zero com o tamanho que você realmente deseja

  • Use a Imagem ao vivo do Ubuntu Server para redimensionar a partição. Nesse caso, você precisará acessar esta tela:

    insira a descrição da imagem aqui

    E escolha a opção Redimensionar, como mostrado na imagem acima. A partir daí, você selecionará qual será o novo tamanho, pois daqui você pode desmontar a unidade e encolhê-la, se desejar.

Como ajuda adicional, aqui está o sistema de arquivos gparted, suporte http://gparted.org/features.php, que fornece uma lista muito detalhada dos suportados e inclui se eles têm redimensionamento online completo. Btrfs está entre eles.

Luis Alvarado
fonte
Estou curioso, existem outros sistemas de arquivos que oferecem suporte à redução online? zfs ou btrfs talvez?
Seth
Eu adicionei um link na parte inferior. O kernel também precisa suportar isso para o sistema de arquivos ser redimensionado online corretamente.
Luis Alvarado
Eu tenho o servidor ubuntu na máquina vmware e seu tamanho de disco é 120G. Mas após o uso da primeira solução, recebo este erro: O sistema de arquivos já tem 27262720 blocos. Nada para fazer!
Dr.jacky
1
Obrigado @ Mr.Hyde. Houve vários problemas na estação de trabalho 10 e até 11. Eu recomendaria 12 e, para o Ubuntu, também atualizaria o LTS mais recente ou o mais recente, porque também havia alguns problemas. No meu caso, tenho a estação de trabalho VMware 12.0.1 e o Ubuntu 15.10 de 64 bits.
Luis Alvarado
3
Na página de manual do resize2fs:The resize2fs program does not manipulate the size of partitions.
ACK_stoverflow 17/17
6

A resposta depende se você pode desmontar ou não a partição. No seu caso, você provavelmente não pode desmontar a partição. No Linux (UNIX / MAC OS), montar uma partição se refere ao uso do sistema de arquivos e ao mapeamento para o ponto de montagem (no seu caso /). Desmontar significa que você para de usar o sistema de arquivos e remove o mapeamento para o ponto de montagem. Você não pode desmontar o sistema de arquivos que contém o sistema operacional em execução.

Se a partição puder ser desmontada

Vamos supor que você queira reduzir uma partição ext4 de 200 GB no /dev/sda4montado no /data. Atualmente, ele contém músicas e filmes ou similares, para que você possa desmontá-lo temporariamente. Você deseja criar uma troca de 4 GB.

sudo umount /dev/sda4

desmontar a partição.

sudo resize2fs /dev/sda4 196G

redimensionar o sistema de arquivos ext4 para 196 GB, assumindo que há espaço suficiente. Agora, você deve reduzir a partição. Atualmente, acredito que você precisa usar cfdiskpara excluir a partição existente e recriar uma partição menor em seu lugar. Você também pode criar uma nova partição para a troca.

sudo cfdisk /dev/sda 

fornecerá uma interface gráfica baseada em texto para inspecionar sua tabela de partições. Eu recomendaria a você a printtabela de partição para um arquivo ou tela nesse ponto e anote a configuração atual como backup. Você pode selecionar /dev/sda4e deletea partição. Em seu lugar, free spaceserá exibido. Use newpara criar uma nova partição com 196 GB em seu lugar e defina o tipo como ext4. Em seguida, mover-se para o espaço livre de fuga e criar a partição de troca com 4GB tipo swap. Nota: Eu não testei esses comandos, pois não posso brincar com os meus /no momento.

Se a partição não puder ser desmontada

Você não pode reduzir uma partição ext3 / 4 montada (consulte a página de manual de resize2fs). Como você está executando o SO /, não é possível desmontar /. Isso significa que você precisa inicializar outro sistema operacional (por exemplo, da chave USB) para fazer as alterações.

No seu caso, é um servidor remoto (no KVM provavelmente), portanto, talvez você não seja capaz de inicializar a partir de USB / uma imagem ao vivo do SO. Pode haver outras maneiras de alterar o particionamento do seu provedor vServer por meio de uma GUI de administrador. Acredito que essa seja sua melhor aposta atualmente.

noleti
fonte