
Durante a instalação do meu sistema operacional centos stream 8 dei /var um tamanho de 10GB pensando que seria mais que suficiente, mas depois que comecei a usar o docker descobri que ele ocupa muito espaço na partição /var como é mostrado por o comando df:
[root@compute-07 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 28G 0 28G 0% /dev
tmpfs 28G 0 28G 0% /dev/shm
tmpfs 28G 179M 28G 1% /run
tmpfs 28G 0 28G 0% /sys/fs/cgroup
/dev/mapper/cs-root 371G 8.2G 363G 3% /
/dev/mapper/cs-home 100G 2.0G 98G 2% /home
/dev/mapper/cs-var 10G 9.0G 1.1G 90% /var
/dev/sda2 2.0G 412M 1.6G 21% /boot
/dev/sda1 2.0G 7.3M 2.0G 1% /boot/efi
/dev/mapper/cs-tmp 10G 105M 9.9G 2% /tmp
tmpfs 5.5G 16K 5.5G 1% /run/user/42
overlay 10G 9.0G 1.1G 90%
/var/lib/docker/overlay2/77f74478297ca61595f0003d35c7323ec627adb44d94cef92c2b4a3c97319a66/merged
overlay 10G 9.0G 1.1G 90% /var/lib/docker/overlay2/5eeb399ce4a3c0d8065d63123985269a359fa66f4d20a8486326e466a48a0128/merged
overlay 10G 9.0G 1.1G 90% /var/lib/docker/overlay2/08d42ca66e3a5974bc305b502bca2aa4d22aa7ddcab6ea14c6af300b3abb3a70/merged
overlay 10G 9.0G 1.1G 90% /var/lib/docker/overlay2/1a45cb32b127fdf8f5c1483385139a865fdc69260ec20f3dcd4c56ad6890f909/merged
overlay 10G 9.0G 1.1G 90% /var/lib/docker/overlay2/ebb9af8edee824a4013dcd526e33e22272283bdee508fd43208fade557def728/merged
overlay 10G 9.0G 1.1G 90% /var/lib/docker/overlay2/41d55822108d04c85f348dc134fe6929b0e67f6b3bd7e0af147633bfd3a252c1/merged
overlay 10G 9.0G 1.1G 90% /var/lib/docker/overlay2/5cf3e8e06e9b4c2e6ed65164d91aed19f63d55e91524d6563e9f16b6709d29be/merged
overlay 10G 9.0G 1.1G 90% /var/lib/docker/overlay2/1d1eda94e68596b00d0cabcc75a7c91999a1c845ebd02c733bb9f00ac66a26f0/merged
overlay 10G 9.0G 1.1G 90% /var/lib/docker/overlay2/bc9e9a28c6761ad89a9457110642156ebd2b4d77de841f2a3ac9ffbaa90e4b63/merged
tmpfs 5.5G 0 5.5G 0% /run/user/0
Esta é a saída do comando lsblk, já que /var está em uma partição separada, então / e /home não consegui encontrar uma maneira de redimensioná-lo ou criar outra partição e vinculá-la a /var
[root@compute-07 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 558.4G 0 disk
├─sda1 8:1 0 2G 0 part /boot/efi
├─sda2 8:2 0 2G 0 part /boot
└─sda3 8:3 0 554.4G 0 part
├─cs-root 253:0 0 370.4G 0 lvm /
├─cs-swap 253:1 0 64G 0 lvm [SWAP]
├─cs-tmp 253:2 0 10G 0 lvm /tmp
├─cs-home 253:3 0 100G 0 lvm /home
└─cs-var 253:4 0 10G 0 lvm /var
sr0 11:0 1 1024M 0 rom
Existe alguma maneira de redimensionar esta partição sem perder nenhum dado.
Responder1
Não. Na verdade, a maior parte do espaço no sistema é sempre usado por /var
onde normalmentevarvidas úteis de dados - bancos de dados, Docker, logs e assim por diante, enquanto o Linux /
,raramenteusa mais de 10 GiB de espaço, quando o sistema é gerenciado adequadamente.
Não apenas o seu LVM está abaixo do ideal: eu encaixaria toda a instalação do Debian com alguns serviços no espaço que você desperdiçou no seu ESP e /boot
. (Eu tinha o hábito de criar VMs com 4GiB alocados para o sistema. Mais que suficiente.)
Muito bem, a melhor solução seria reduzir o seu sistema de arquivos raiz superdimensionado, mas isso não poderia ser feito online. Você precisa inicializar alguma mídia de resgate, ativar seu VG e então reduzir o sistema de arquivos e o volume lógico e isso pode consumir muito tempo, considerando o tamanho da partição. Também é possível bagunçar as coisas. Se você estiver com pressa, você pode fazer uma reviravolta: crie algum diretório na raiz, mova os dados do Docker para ele e monte-o de volta no local onde os dados do Docker residem em var. Você precisa parar o Docker e todos os contêineres por enquanto. Algo assim:
systemctl stop docker.service
mkdir /var-lib-docker
mv /var/lib/docker/* /var-lib-docker
mount --bind /var-lib-docker /var/lib/docker
systemctl start docker.service
Dessa forma, o Docker usará o espaço do sistema de arquivos raiz superdimensionado, estando disponível no local habitual. No /etc/fstab
você precisa adicionar a seguinte entrada, para que esta configuração sobreviva à reinicialização:
/var-lib-docker /var/lib/docker none bind 0 0
Mas lembre-se que este é um hack bastante feio que pode lhe dar algum tempo, mas também trazer alguns problemas, então procure a oportunidade de recuperar espaço da raiz e alocá-lo /var
adequadamente.
E que fique esta a lição: nunca aloque todo o espaço disponível desde o início. Deixe parte (a maior parte) não alocada. Você sempre pode adicionar facilmente o espaço e fazer isso on-line, embora seja muito difícil, demorado e sujeito a erros recuperá-lo, e isso requer tempo de inatividade. É melhor gerenciar o espaço para que você nunca precise recuperá-lo.
Responder2
Como alternativa paraesta resposta
Seu sistema está usando volumes lógicos LVM.
Pode haver algum espaço não utilizado no grupo de volumes que você pode atribuir para estender var.
Caso não haja espaço não utilizado ou muito pouco, você podereduzir ou remover o LVM de trocae aproveite o espaço liberado para estender /var.
Isso deixaria seu sistema intacto e normalmente pode até ser feito online.
A abordagem para isso seria algo como (comandos não testados, então não os copie completamente, mas o princípio deve ser sólido)
Crie um arquivo de troca temporário ou permanente em seu sistema de arquivos raiz superdimensionado como substituto enquanto você coloca a partição de troca off-line.
dd if=/dev/zero of=/swap-file count=65536 bs=1M
mkswap /swap-file
swapon /swap-file
swapoff /dev/mapper/cs-swap
para desabilitar a partição swaplvreduce
cs-swap seguido pela formatação da partição de troca LVM restante novamentemkswap
e reativando o espaço de troca menor comswapon
ou exclua-o imediatamente com
lvremove
Use o espaço LVM livre recém-criado para estender o volume /var LVM e estender o sistema de arquivos
lvextend -l +100%FREE --resizefs /dev/mapper/cs-var
Responder3
Você df
e lsblk
não nos diga quais são seus sistemas de arquivos. Para reduzir um volume (partição ou LV), o sistema de arquivos nele deve ser reduzido primeiro. Uma escolha comum para rootfs, ext4, pode ser reduzida offline. A escolha padrão de FS para CentOS (e distros do tipo RHEL), entretanto, é XFS e não pode ser reduzida no momento.
Como outros apontaram em suas respostas, o uso do rootfs de 8,2 GB não é difícil de fazer backup. Portanto, dependendo do tipo de sistema de arquivos rootfs, você tem as seguintes opções:
Se for ext4, você pode reduzi-lo no local:
Reinicie para outro sistema, como um ArchISO, pois o ext4 só pode ser reduzido offline.
Certifique-se
lvs
de mostrar sua partição, entãoe2fsck -f /dev/mapper/cs-root
resize2fs -M -p /dev/mapper/cs-root
Alternativamente, se você souber o tamanho desejado do rootfs, poderá especificá-lo em vez de usar
-M
:resize2fs -p /dev/mapper/cs-root 15G
Observe que é melhor deixar algum espaço para diminuir o volume subjacente.
Recuperar espaço do LV
lvreduce -L 16G cs/root
Redimensione o sistema de arquivos de volta ao tamanho do volume:
resize2fs -p /dev/mapper/cs-root
Agora o espaço livre pode ser distribuído para
/var
:lvextend -l +100%FREE cs/var
Se for XFS, entretanto, sua melhor aposta é fazer backup de seu rootfs e recriá-lo:
- Inicialize um ArchISO como acima.
rsync -avHAXx /your-rootfs /somewhere
(Certifique-/somewhere
se de que esteja em outro volume - é fácil encontrar 8,2 GB de espaço livre - seu volume de swap provavelmente está superdimensionado)lvremove
o volume raiz e recrie-o com um tamanho apropriado. Eu recomendo formatar para ext4 desta vez.rsync -avHAXx /somewhere /your-rootfs
para copiar as coisas de volta.- Atualize sua configuração do GRUB, se necessário - AFAICT, o ID do LV é frequentemente escrito
grub.cfg
como uma dica, mas não estou familiarizado com o CentOS (no Debian seria simplesmenteupdate-grub
). - Atribua espaço livre no VG conforme acima.
Outras notas que gostaria de destacar:
- A partição do sistema EFI (ESP) é muito grande. Para um servidor Linux típico, 256 MB devem ser mais que suficientes (eu uso 128 MB no meu servidor Ubuntu). Ele só precisa conter o binário GRUB e uma versão muito básica do
grub.cfg
. /boot
não precisa viver em seu próprio volume. O GRUB pode ler o LVM e seu sistema de arquivos rootfs perfeitamente.- Dependendo do design do seu servidor,
/root
provavelmente ele também será superdimensionado (eu uso 16 GB para meu servidor Proxmox VE - não estou planejando colocar dados no host). - Você realmente precisa de 64 GB de espaço de troca? Normalmente fico bem com apenas 8 GB.