Soluzione 1:
Design corretto
Presumo che tu non sia in grado di estendere semplicemente il filesystem in questione (usando lvextend && ext2online
), perché non usi LVM o usi un tipo di filesystem sbagliato.
Il tuo approccio
Quello che hai proposto potrebbe funziona se segnali i demoni con SIGHUP (kill -1 pid). Ovviamente dovresti in seguito "mount -o bind / /somewhere" e ripulire ciò che è stato lasciato sotto montato /var/log. Ma ha un cattivo odore per me, soprattutto per la produzione.
Evita i tempi di inattività, ottieni un risultato pulito (ma complicato da fare)
Dimentica l'idea "mount -o bind", crea un nuovo LV/partizione, ma non montarlo ancora.
lsof | grep /var/log # lists open files in /var/log
Per ogni demone che ha un file aperto (mi aspetterei almeno syslog, inetd, sshd):
- riconfigurare il demone no per accedere a /var/log
- aggiorna il demone (
kill -1
o/etc/init.d/script reload
) - confermare con
lsof | grep /var/log
quel demone ha chiuso i suoi file
Monta su /var/log. Ripristina le vecchie configurazioni, SIGHUP/ricarica di nuovo i demoni.
Modo semplice (tempo di inattività)
Crea una nuova LV/partizione e montala correttamente su /var o /var/log. Il modo più semplice è portare il server in modalità di manutenzione (modalità utente singolo) e utilizzare la console effettiva (non ssh) per l'operazione.
Soluzione 2:
Le risposte di tutti gli altri sono eccellenti e corrette e dovresti assolutamente leggerle prima.
Ho solo pensato di condividerlo perché semplifica il copia e incolla, se il tuo caso si rivela abbastanza semplice come il mio:
Arresta il syslog e copia i log correnti:
service rsyslog stop
mkdir -p /tmp/varlog
cp -r /var/log/* /tmp/varlog
quindi, monta la tua nuova posizione su /var/log
. Supponiamo che sia un nuovo dispositivo chiamato /dev/sdb
mount /dev/sdb /var/log
ora puoi copiare nuovamente i file e riavviare il syslog:
cp -r /tmp/varlog/* /var/log
rm -rf /tmp/varlog
service rsyslog start
Supponendo che tutto questo avvenga abbastanza presto nella vita della tua macchina, rsyslog
è probabile che sia l'unico demone in esecuzione. YMMV!
PS:vorrai aggiungerlo al tuo fstab
pure probabilmente. Ecco un modo per farlo, assumendo ancora una volta una montatura molto semplice:
cat /etc/mtab |grep /var/log >>/etc/fstab
(vedi https://serverfault.com/a/267610/80606 su catting da mtab a fstab)
Soluzione 3:
Un'altra cosa che potresti fare è:
- Arresta i processi che hanno file aperti su
/var/log
- Verifica che non ci siano processi con file aperti su
/var/log
(usandolsof
come suggerito da kubanskamac) - Sposta il tuo
/var/log
in un'altra partizione con spazio libero sufficiente (seguendo il tuo esempio, sarebbe/home/log
) - Crea un collegamento simbolico da /var/log a /home/log (
ln -s /home/log /var/log
) - Riavvia i processi che hai interrotto nel primo passaggio
Tieni presente che questo è tutt'altro che ciò che considererei una buona pratica. È solo una soluzione alternativa in modo da non dover arrestare il server. La soluzione giusta sarebbe creare un nuovo /var
o /var/log
partizione con spazio sufficiente (o espandere quella corrente),