Reduzindo / home / e estendendo / enquanto o servidor está em execução

0

Eu me deparei com um problema em que o meu servidor simplesmente preencheu essa semana.

➜  ~ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/root        20G   19G     0 100% /
devtmpfs        7.9G     0  7.9G   0% /dev
tmpfs           7.9G     0  7.9G   0% /dev/shm
tmpfs           7.9G  102M  7.8G   2% /run
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           7.9G     0  7.9G   0% /sys/fs/cgroup
/dev/sda3       1.8T   94G  1.6T   6% /home

Agora é inutilizável na maior parte.

Meu provedor de hospedagem não quer encolher /dev/sda3 e estender /dev/root/ para mim, infelizmente, e sou novato na administração de servidores e sei que vou atrapalhar as coisas experimentando. Como alternativa, eu também gostaria de saber o que preenchia o sistema de arquivos raiz (e não posso simplesmente pesquisar em / ) e ver como pará-lo.

Como posso fazer isso passo a passo sem perder dados? Se necessário, posso entrar no modo de recuperação. Meu hoster é Kimsufi.

Obrigado!

    
por shavit 18.07.2017 / 16:08

1 resposta

1

Com relação à discussão nos comentários, parece que você está executando um servidor que depende de um banco de dados grande (ou pelo menos grande) em /var . Nesse computador, é importante dividir /var (ou um subdiretório dele) em uma partição grande o suficiente para armazenar o banco de dados ou garantir que a raiz ( / ) seja grande o suficiente. De fato, muitos servidores funcionam melhor com uma partição /var separada do que com uma partição /home separada - embora sua saída df mostre que você tem 94 GB em /home , então isso não parece ser o caso para você. No entanto, se você estiver executando um servidor MySQL, 20 GB para raiz ( / ) e nenhuma partição /var separada parece inadequada, então seu problema é compreensível. Você pode querer consultar um especialista do MySQL para obter conselhos sobre quanto espaço em disco seu banco de dados pode consumir.

Em qualquer evento, é possível fazer um redimensionamento "ao vivo" de alguns sistemas de arquivos; mas aumentando o tamanho é muito melhor suportado do que diminuindo o tamanho do sistema de arquivos, e parece que você precisará fazer uma de cada operação. Se você conseguir efetuar login como root , poderá desmontar /home e reduzi-lo a partir de sua inicialização normal. Esteja ciente de que esta é uma configuração não padrão para o Ubuntu, então você precisará habilitar root logins diretos - e você pode querer desativá-los depois. (Veja esta pergunta e suas respostas para saber mais sobre isso.) Dependendo do seu layout das partições, pode haver outras complicações também. Veja esta pergunta e suas respostas para alguns informações sobre o redimensionamento enquanto você estiver logado. Se a partição /home vier após sua partição raiz ( / ), talvez você queira considerar a redução de /home , criando uma partição nova após ela , movendo o conteúdo de /var (ou qualquer subdiretório de /var está reduzindo muito espaço em disco) para a nova partição e, em seguida, montando-a em /var (ou seu subdiretório, conforme apropriado). Como muitos programas funcionam em /var , mover todos os /var dessa maneira provavelmente exigiria trabalhar em um disco de emergência, mas você pode fazer isso a partir da instalação principal de um subdiretório de /var .

Dito isso, concordo com um comentário anterior de que, como um novato relativo, isso pode não ser a melhor coisa a ser tentada. Se você precisar fazer isso, eu recomendo strongmente que você configure um computador (ou máquina virtual) que corresponda à sua configuração atual o mais próximo possível para que você possa praticar. É melhor eliminar uma máquina virtual (ou duas ou três) do que apagar seu servidor real!

Outra abordagem consagrada pelo tempo, mas um tanto feia, é realocar um ou mais diretórios para uma partição existente e confiar em um link simbólico em vez de montar uma nova partição. Você faria algo assim:

  1. Localize um diretório na partição raiz ( / ) que está ocupando muito espaço. Para o MySQL, eu esperaria que fosse /var/lib/mysql .
  2. Crie um diretório de destino na partição /home - digamos, /home/var/lib/mysql . Combine sua propriedade e permissões ao diretório /var/lib/mysql original.
  3. Encerre qualquer software que esteja usando /var/lib/mysql . Eu acho que seria sudo service mysql stop para fazer isso, mas eu não tenho 100% de certeza disso.
  4. Digite sudo mv /var/lib/mysql/* /home/var/lib/mysql/ . Isso moverá os arquivos de /var/lib/mysql para a partição /home .
  5. Digite sudo rmdir /var/lib/mysql para excluir esse diretório. (Se isso não for apagado, então é provável que alguns arquivos não tenham sido movidos. Talvez sejam arquivos de ponto. Você deve corrigir esse problema.)
  6. Digite sudo ln -s /home/var/lib/mysql /var/lib/mysql . Isso cria um link simbólico para que os programas que usam /var/lib/mysql ainda possam acessar os arquivos no novo local.
  7. Reinicie o MySQL. sudo service mysql start deve fazer isso.

Ressalva: Eu não estou familiarizado o suficiente com o MySQL para ter 100% de certeza de que este procedimento funcionará corretamente para isso. O uso de links simbólicos pode dar-lhe ajustes. Além disso, eu não testei este procedimento como eu digitei, então eu posso ter cometido um erro em um (ou mais) dos comandos.

Como eu não sou um especialista em MySQL, pode haver uma maneira melhor de fazer isso para o MySQL especificamente (suponha que esse seja realmente o programa que está causando problemas.)

    
por Rod Smith 19.07.2017 / 02:02