Вопрос: Как я могу перемещать каталог / var / log


На нашем производственном сервере есть небольшой диск для корневой точки монтирования /, /var/log занимает слишком много места, и мне приходится вручную удалять некоторые файлы. Как я могу двигаться /var/log/ скажем, /home/log БЕЗ ВОЗВРАЩЕНИЯ?

Вот что я подумал:

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

Но я знаю, что некоторые службы используют дескрипторы файлов, поэтому они будут продолжать использовать /var/log или inodes.


14
2017-08-19 08:44


Источник


Подробный ответ на тот же вопрос в AskUbuntu по askubuntu.com/a/346579/422224 - Eborbob
Это не ответ, а предложение. если возможно, используйте для журналов файловую систему с компрессией в реальном времени, например btrfs. Когда вы монтируете этот раздел, используйте параметр mount «compress = lzo» или «compress = zlib». lzo предлагает лучшую производительность, zlib лучше сжатие. - Massimo


Ответы:


Правильный дизайн

Я предполагаю, что вы не можете просто расширить рассматриваемую файловую систему (используя lvextend && ext2online), поскольку вы не используете LVM или используете неправильный тип файловой системы.

Ваш подход

Что вы предложили мог бы работайте, если вы сигнализируете демонам с SIGHUP (kill -1 pid). Очевидно, вам нужно будет потом «mount -o bind / / где-нибудь» и очистить то, что осталось под монтированным / var / log. Но у меня плохой запах, особенно для производства.

Избегайте простоев, получите чистый результат (но сложно сделать)

Забудьте о идее «mount -o bind», создайте новый LV / раздел, но не монтируйте его еще.

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

Для каждого демона, у которого есть открытый файл (я ожидал бы хотя бы syslog, inetd, sshd):

  • переконфигурировать демона no для входа в / var / log
  • обновить демона (kill -1  или /etc/init.d/script reload)
  • подтвердите с помощью lsof | grep /var/log  этот демон закрыл свои файлы

Монтировать над / var / log. Восстановите старые конфигурации, снова SIGHUP / reload.

Простой способ (простой)

Создайте новый LV / partition и смонтируйте его правильно либо в / var, либо в / var / log. Легкий способ - снять сервер в режим обслуживания (однопользовательский режим) и использовать фактическую консоль (не ssh) для операции.


23
2017-08-19 09:26





Ответы всех остальных отличные и правильные, и вы обязательно должны их прочитать в первую очередь.

Я просто подумал, что поделюсь этим, потому что он упрощает копирование и вставку, если ваш случай окажется довольно простым, как у меня:

Остановите syslog и скопируйте текущие журналы:

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

затем установите новое местоположение /var/log, Скажем, это новое устройство, называемое /dev/sdb

mount /dev/sdb /var/log

теперь вы можете скопировать файлы и перезапустить syslog:

cp -r /tmp/varlog/* /var/log
rm -rf /tmp/varlog
service rsyslog start

Предполагая, что все это происходит довольно рано в жизни вашей машины, rsyslog скорее всего, будет единственным демоном. YMMV!

PS - вы захотите добавить его в свой fstab а также, вероятно. Вот один из способов сделать это, снова принимая очень простое монтирование:

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

(ср https://serverfault.com/a/267610/80606 о ссылке mtab на fstab)


6
2018-06-07 18:18



Хорошее решение. Единственное, что я бы изменил, это замена вашего cp -r с sudo tar cpf а также sudo tar xpf для сохранения прав собственности на файлы и разрешений на случайных сбоях существуют журналы, созданные пользователем, отличным от root. - Brenda Bell


Другое, что вы можете сделать, это:

  • Остановить процессы с открытыми файлами /var/log 
  • Убедитесь, что на открытых /var/log (с помощью lsof как предположил кубанскамак)
  • Переместите /var/log на другой раздел с достаточным свободным пространством (по вашему примеру, это будет /home/log)
  • Создайте символическую ссылку из / var / log в / home / log (ln -s /home/log /var/log)
  • Перезапустите процессы, которые вы остановили на первом этапе

Обратите внимание, что это далеко не то, что я считаю хорошей практикой. Это всего лишь временное решение, так что вам не нужно отключать сервер. Правильным решением было бы создать новый /varили /var/log разделение с достаточным пространством (или расширение текущего),


1
2017-08-19 10:41



Будет ли эффект от реализации идеи ссылки, если запускается logrotate? Я не знал, перезапишет ли он или испортит файлы, если у них еще нет ссылок ... это может означать больше головных болей в обслуживании позже. - Bart Silverstrim
Да, наконец, кажется, что выполнение этой операции во время работы сервера не так уж и хорошо. Тогда я не смогу увидеть, какой процесс по-прежнему использует старый / var / log /. Более того, я считаю, что некоторые приложения не просто справляются с символической ссылкой, чтобы в конечном итоге испортить журнал. Возможно, мне стоит запланировать режим обслуживания. Фактически я вручную удаляю файлы, когда левое пространство становится коротким. mriedman: Я проверю, могу ли я изменить размер раздела - Razique


Я бы просто:

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

0
2018-05-14 17:28



Хорошо ли уходить /var/log установленный над /home/log как есть? Полагаю, весь этот вопрос не для опытных админов. - kubanczyk
Что вы имеете в виду? / home / log монтируется поверх / var / log, а не наоборот. И да, это не проблема, чтобы оставить его как есть, просто убедитесь, что он восстанавливается при каждой загрузке автоматически и достаточно рано, чтобы все процессы не пытались создать несколько новых журналов в пустом / var / log mount point. - Alexander Shcheblikin