Как мне переместить каталог / var / log

15

На нашем производственном сервере есть небольшой диск для корневой точки монтирования /, /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или инодировать.

Razique
источник
Подробный ответ на этот же вопрос можно найти в AskUbuntu по
Eborbob
Это не ответ, а предложение. если возможно, используйте для журналов файловую систему с сжатием в реальном времени, например btrfs. При монтировании этого раздела используйте опцию монтирования «compress = lzo» или «compress = zlib». lzo предлагает лучшую производительность, zlib лучшее сжатие.
Массимо

Ответы:

25

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

Я предполагаю, что вы не можете просто расширить рассматриваемую файловую систему (используя 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 / перезагрузите демоны снова.

Простой способ (время простоя)

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

kubanczyk
источник
8

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

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

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

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

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

mount /dev/sdb /var/log

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

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

(см. /server//a/267610/80606 о том, как перевести mtab в fstab)

hwjp
источник
5
Хорошее решение. Одна вещь , которую я бы изменение замене cp -rс sudo tar cpfи sudo tar xpfсохранить файл собственности и разрешения на авось есть журналы , созданные пользователем, кроме корня.
Бренда Белл
2

Еще одна вещь, которую вы могли бы сделать:

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

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

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

Другое решение, основанное на @hwjp, если вы не можете использовать другой том диска для их перемещения, вы можете создать том виртуального диска в другой том, который имеет больше свободного места (в моем случае):

Создать виртуальный том:

А) сделать: sudo dd if=/dev/zero of=VHD-log.img bs=1M count=1200

  • if = / dev / zero: входной файл для обеспечения потока символов для инициализации хранения данных
  • of = VHD.img: файл изображения, который будет создан как том хранения на / thevolumeofyourchoice
  • bs = 1M: чтение и запись до 1M одновременно
  • количество = 1200: копирует только 1200 МБ (1 ГБ) входных блоков

B) do: sudo mkfs -t ext4 /thevolumeofyourchoice/VHD-log.imgОтформатируйте тип файловой системы EXT4 в файле образа VHD-log с помощью утилиты mkfs.

В) делать: sudo mkdir /thevolumeofyourchoice/vlogмонтировать VHD-лог в каталог (точка монтирования)

Г) делать: sudo mount -t auto -o loop /thevolumeofyourchoice/VHD-log.img /thevolumeofyourchoice/vlog

D1) Чтобы смонтировать VHD-журнал при загрузке системы в последний каталог, добавьте эту запись в файл / etc / fstab.

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

Переместить старые файлы журнала:

E) сделать:

  • service rsyslog stop
  • lsof | grep /var/log вывести список открытых файлов в / var / log и отключить необходимый демон (apach2, freshclam в моем случае)
  • cp -rp /var/log/* /thevolumeofyourchoice/vlog (cp -p такой же, как --preserve = mode, owner, метки времени)

F) сделать:

  • 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) сделать: service rsyslog startи перезапустить другие службы, которые вы остановили

Наконец, дважды проверьте:

Вы можете сделать - lsof | grep /var/logчтобы открыть открытые файлы в / var / log и убедиться, что они указывают на / var / log, а не / var / log-old

Вы можете mv, сделать резервную копию или удалить / var / log-old после того, как все в порядке.

Майк Кастро Демария
источник
-1

Я бы просто:

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
Александр Щебликин
источник
Это хорошо, чтобы оставить /var/logустановленным /home/logкак есть? Весь этот вопрос не для опытных администраторов, я полагаю.
kubanczyk
Что вы имеете в виду? / home / log монтируется поверх / var / log, а не наоборот. И да, это не проблема оставить все как есть, просто убедитесь, что он восстанавливается при каждой загрузке автоматически и достаточно рано, чтобы все процессы не пытались создать новые журналы в пустой точке монтирования / var / log.
Александр Щебликин
Во многих случаях требования безопасности требуют / var / log и / var / log / audit для отдельных точек монтирования. В противном случае оставьте их и просто установите соответствующее ротацию журналов, чтобы избежать ненужного использования диска.
Брэд