Comment déplacer le répertoire / var / log

15

Sur notre serveur de production, il y a un petit lecteur pour le point de montage racine /, /var/logprend trop de place et je dois supprimer manuellement certains fichiers. Comment puis-je passer /var/log/à disons /home/logSANS REDÉMARRAGE?

Voici ce que je pensais:

$ mkdir /home/log
$ rsync -a /var/log /home/log
$ mount --bind /home/log /var/log
$ /etc/init.d/rsyslof restart

Mais je sais que certains services utilisent des descripteurs de fichiers, ils continueront donc à utiliser /var/logou des inodes.

Razique
la source
Il y a une réponse détaillée à essentiellement la même question sur AskUbuntu à askubuntu.com/a/346579/422224
Eborbob
Ce n'est pas une réponse mais une suggestion. si possible, utilisez pour les journaux un système de fichiers avec compression en temps réel, comme btrfs. Lorsque vous montez cette partition, utilisez l'option de montage "compress = lzo" ou "compress = zlib". lzo offre de meilleures performances, zlib une meilleure compression.
Massimo

Réponses:

25

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 fonctionner si vous signalez les démons avec SIGHUP (kill -1 pid). Évidemment, vous devrez plus tard "monter -o bind / / quelque part" et nettoyer ce qui a été laissé sous / var / log monté. Mais ça a une mauvaise odeur pour moi, surtout pour la production.

Évitez les temps d'arrêt, obtenez un résultat propre (mais compliqué à faire)

Oubliez l'idée de "monter -o bind", créez une nouvelle partition LV /, mais ne la montez pas encore.

lsof | grep /var/log             # lists open files in /var/log

Pour chaque démon qui a un fichier ouvert (je m'attendrais au moins à syslog, inetd, sshd):

  • reconfigurez le démon no pour vous connecter à / var / log
  • rafraîchir le démon ( kill -1 ou /etc/init.d/script reload)
  • confirmer avec lsof | grep /var/log ce démon qu'il a fermé ses fichiers

Montez sur / var / log. Restaurer les anciennes configurations, les démons SIGHUP / recharger à nouveau.

Moyen simple (temps d'arrêt)

Créez une nouvelle partition LV / et montez-la correctement sur / var ou / var / log. Le moyen le plus simple est de mettre le serveur en mode maintenance (mode mono-utilisateur) et d'utiliser la console réelle (pas ssh) pour l'opération.

kubanczyk
la source
8

Les réponses de tous les autres sont excellentes et correctes, et vous devriez certainement les lire en premier.

Je pensais juste partager cela parce que cela facilite le copier-coller, si votre cas s'avère assez simple comme le mien:

Arrêtez le journal système et copiez les journaux actuels:

service rsyslog stop
mkdir -p /tmp/varlog
cp -r /var/log/* /tmp/varlog

puis montez votre nouvel emplacement /var/log. Disons que c'est un nouvel appareil appelé/dev/sdb

mount /dev/sdb /var/log

vous pouvez maintenant recopier des 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 produit assez tôt dans la vie de votre machine, il rsyslogest probable que ce soit le seul démon en cours d'exécution. YMMV!

PS - vous voudrez probablement l'ajouter à votre fstabaussi. Voici une façon de le faire, en supposant encore une fois un montage très simple:

cat /etc/mtab |grep /var/log >>/etc/fstab

(cf /server//a/267610/80606 sur la conversion de mtab en fstab)

hwjp
la source
5
Belle solution. La seule chose que je changerais est de remplacer votre cp -rpar sudo tar cpfet sudo tar xpfde préserver la propriété des fichiers et les autorisations au cas où il y aurait des journaux créés par un utilisateur autre que root.
Brenda Bell du
2

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 pas de processus avec des fichiers ouverts /var/log(en utilisant lsofcomme suggéré par kubanskamac)
  • Déplacez votre /var/logvers une autre partition avec suffisamment d'espace libre (suivant votre exemple, ce serait /home/log)
  • Créez 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 une nouvelle partition /varou une /var/logpartition avec suffisamment d'espace (ou d'étendre la partition actuelle),

mfriedman
la source
Y aurait-il un effet à faire l'idée de lien si le logrotate est exécuté? Je ne savais pas si cela remplacerait ou bousillerait les emplacements des fichiers s'ils n'étaient pas déjà des liens ... cela pourrait signifier plus de maux de tête de maintenance plus tard.
Bart Silverstrim
Oui, il semble finalement que faire cette opération pendant que le serveur fonctionne n'est pas si bon. Je ne pourrai alors pas voir quel processus utilise toujours l'ancien / var / log / De plus, je pense que certaines applications ne traitent pas facilement le lien symbolique, ce qui pourrait éventuellement bousiller le journal. Je devrais peut-être planifier un mode de maintenance. En fait, je supprime manuellement les fichiers lorsque l'espace gauche devient court. mriedman: Je vais vérifier si je peux redimensionner cette partition
Razique
0

Une autre solution basée sur @hwjp, si vous ne pouvez pas utiliser un autre volume de lecteur pour les déplacer, vous pouvez créer un volume de lecteur virtuel dans un autre volume qui a plus d'espace disponible (c'est mon cas):

Créer un volume virtuel:

A) faire: sudo dd if=/dev/zero of=VHD-log.img bs=1M count=1200

  • if = / dev / zero: fichier d'entrée pour fournir un flux de caractères pour initialiser le stockage des données
  • of = VHD.img: fichier image à créer comme volume de stockage sur / le volume de votre choix
  • bs = 1M: lire et écrire jusqu'à 1M à la fois
  • count = 1200: copie uniquement les blocs d'entrée de 1200M (1 Go)

B) À faire: sudo mkfs -t ext4 /thevolumeofyourchoice/VHD-log.imgformatez le type de système de fichiers EXT4 dans le fichier image du journal VHD avec l'utilitaire mkfs.

C) Faire: sudo mkdir /thevolumeofyourchoice/vlogMonter le journal VHD dans un répertoire (point de montage)

D) faire: sudo mount -t auto -o loop /thevolumeofyourchoice/VHD-log.img /thevolumeofyourchoice/vlog

D1) Pour monter le journal VHD au démarrage du système dans le répertoire final, ajoutez cette entrée dans le fichier / etc / fstab.

/thevolumeofyourchoice/VHD-log.img  /var/log/  ext4    defaults        0  0

Déplacer les anciens fichiers journaux:

E) faire:

  • service rsyslog stop
  • lsof | grep /var/log pour lister les fichiers ouverts dans / var / log et désactiver le démon nécessaire (apach2, freshclam dans mon cas)
  • cp -rp /var/log/* /thevolumeofyourchoice/vlog (cp -p identique à --preserve = mode, propriété, horodatage)

F) faire:

  • sudo umount /thevolumeofyourchoice/vlog
  • sudo mv /var/log /var/log-old
  • sudo mkdir /var/log
  • sudo chgrp syslog /var/log
  • sudo mount -t auto -o loop /thevolumeofyourchoice/VHD-log.img /var/log

G) Faites: service rsyslog startet redémarrez les autres services que vous avez arrêtés

Enfin, revérifiez:

Vous pouvez faire un - lsof | grep /var/logpour lister les fichiers ouverts dans / var / log et vérifier qu'ils pointent vers / var / log et non / var / log-old

Vous pouvez mv, sauvegarder ou supprimer / var / log-old après tout est ok.

Mike Castro Demaria
la source
-1

Je voudrais juste:

apt install lsyncd
mv /var/log /varlog.root
mkdir /var/log /home/log
mount --bind /home/log /var/log

# set up lsyncd appropriately to sync real-time between /varlog.root & /var/log
service lsyncd start
sleep 3m

service rsyslog restart
# Proceed with all the other daemons
# to switch them over to the new /var/log and release /varlog.root
sleep 3m

# Then do this a few times until no processes use the old dir
lsof +D /varlog.root && rm -rf /varlog.root
Alexander Shcheblikin
la source
Est-il bon de le laisser /var/logmonté /home/logtel quel? Toute cette question n'est pas pour les administrateurs chevronnés, je présume.
kubanczyk
Que voulez-vous dire? / home / log est monté sur / var / log, et non l'inverse. Et oui, ce n'est pas un problème de le laisser tel quel, assurez-vous qu'il est restauré à chaque démarrage automatiquement et suffisamment tôt pour que tous les processus ne tentent pas de créer de nouveaux journaux dans le point de montage vide / var / log.
Alexander Shcheblikin
la plupart du temps, les exigences de sécurité nécessitent / var / log et / var / log / audit sur de véritables points de montage séparés. Sinon, laissez-les et configurez simplement la rotation appropriée des journaux pour éviter une utilisation inutile du disque.
Brad