Solution 1 :
Conception appropriée
Je suppose que vous ne pouvez pas simplement étendre le système de fichiers en question (en utilisant lvextend && ext2online
), car vous n'utilisez pas LVM ou utilisez un type de système de fichiers incorrect.
Votre approche
Ce que vous avez proposé pourrait fonctionnent si vous signalez les démons avec SIGHUP (kill -1 pid). Évidemment, vous devrez plus tard "mount -o bind / /somewhere" et nettoyer ce qui reste sous /var/log monté. Mais ça sent mauvais pour moi, surtout pour la production.
Éviter les temps d'arrêt, avoir un résultat propre (mais compliqué à faire)
Oubliez l'idée "mount -o bind", créez un nouveau LV/partition, mais ne le montez pas encore.
lsof | grep /var/log # lists open files in /var/log
Pour chaque démon qui a un fichier ouvert (j'attendrais au moins syslog, inetd, sshd) :
- reconfigurer le démon no pour se connecter à /var/log
- actualiser le démon (
kill -1
ou/etc/init.d/script reload
) - confirmer avec
lsof | grep /var/log
ce démon a fermé ses fichiers
Montez sur /var/log. Restaurez les anciennes configurations, SIGHUP/rechargez à nouveau les démons.
Manière simple (temps d'arrêt)
Créez une nouvelle LV/partition et montez-la correctement sur /var ou /var/log. Le moyen le plus simple consiste à mettre le serveur en mode maintenance (mode mono-utilisateur) et à utiliser la console réelle (pas ssh) pour l'opération.
Solution 2 :
Les réponses de tous les autres sont excellentes et correctes, et vous devriez certainement les lire en premier.
J'ai juste pensé que je partagerais ceci parce que cela facilite le copier-coller, si votre cas s'avère assez simple comme le mien :
Arrêtez le syslog et copiez les journaux actuels :
service rsyslog stop
mkdir -p /tmp/varlog
cp -r /var/log/* /tmp/varlog
puis, montez votre nouvel emplacement sur /var/log
. Disons qu'il s'agit d'un nouvel appareil appelé /dev/sdb
mount /dev/sdb /var/log
vous pouvez maintenant recopier les fichiers et redémarrer le syslog :
cp -r /tmp/varlog/* /var/log
rm -rf /tmp/varlog
service rsyslog start
En supposant que tout cela se produise assez tôt dans la vie de votre machine, rsyslog
est probablement le seul démon en cours d'exécution. YMMV !
PS - vous voudrez l'ajouter à votre fstab
aussi probablement. Voici une façon de procéder, en supposant à nouveau une monture très simple :
cat /etc/mtab |grep /var/log >>/etc/fstab
(cf https://serverfault.com/a/267610/80606 à propos du catting mtab vers fstab)
Solution 3 :
Une autre chose que vous pourriez faire est :
- Arrêtez les processus qui ont des fichiers ouverts sur
/var/log
- Vérifiez qu'il n'y a aucun processus avec des fichiers ouverts sur
/var/log
(en utilisantlsof
comme suggéré par kubanskamac) - Déplacez votre
/var/log
vers une autre partition avec suffisamment d'espace libre (suivant votre exemple, ce serait/home/log
) - Créer un lien symbolique de /var/log vers /home/log (
ln -s /home/log /var/log
) - Redémarrez les processus que vous avez arrêtés à la première étape
Veuillez noter que c'est loin d'être ce que je considérerais comme une bonne pratique. C'est juste une solution de contournement pour que vous n'ayez pas à arrêter le serveur. La bonne solution serait de créer un nouveau /var
ou /var/log
partition avec suffisamment d'espace (ou étendre celle en cours),