Recentemente mi è capitato di trovarmi con una VM Linux con disco pieno su Google Cloud e l’impossibilità di effettuare l’accesso tramite SSH o Console seriale, tutto è iniziato durante tarda sera quando Zabbix ha iniziato ad avvertire che il disco aveva superato la soglia di allerta dell'80%.

Il disco ha continuato a riempirsi ad un rate sostenuto durante tutta la notte (e ti pareva) fino a quando non ha raggiungo il 100% alle 06:00 di mattina circa.

Non potevo più loggare sulla VM, fortunatamente Google Cloud permette di impostare degli script di avvio tramite Console facendo modifica sulla VM

Script di avvio

Ho quindi tentato di disabilitare alcuni servizi all’avvio, nel mio caso principalmente PostgreSQL nella speranza di recuperare un pò di spazio e riuscire ad effettuare il login

#! /bin/bash

systemctl disable postgresql

Sono riuscito a loggare e dopo aver fatto il resize del disco lato console su Google Cloud ho subito dato i comandi per espanderlo, nel mio caso /dev/sda1.

sudo growpart /dev/sda 1
sudo resize2fs /dev/sda1

Nel caso disabilitare un servizio non i spazio, avrei potuto inserire i comandi per il resize del disco nello script di avvio di Google Cloud.

Analisi del disco con ncdu

Eeffettuato il login lo step successivo era quello di capire cosa stava riempendo il disco in quel modo.

Ho quindi utilizzato ncdu per fare una scansione del disco ed individuare le directory che occupavano più spazio

sudo ncdu -r -x /

-r permette di scansionare il disco in sola lettura

-x effettua la scansione sullo stesso filesystem

ncdu

il problema era chiaramente in /var, dopo un analisi il problema era causato dal logging delle query e i log delle transazioni (WAL) di PostgreSQL.