На нашем производственном сервере есть небольшой диск для корневой точки монтирования /
,
/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
или инодировать.
Ответы:
Правильный дизайн
Я предполагаю, что вы не можете просто расширить рассматриваемую файловую систему (используя
lvextend && ext2online
), потому что вы не используете LVM или используете неправильный тип файловой системы.Ваш подход
То, что вы предложили, может сработать, если вы дадите сигнал демонам с помощью SIGHUP (kill -1 pid). Очевидно, что позже вам понадобится "mount -o bind / / где-нибудь" и очистить то, что осталось под смонтированным / var / log. Но у меня неприятный запах, особенно для производства.
Избегайте простоев, получайте чистый результат (но сложно сделать)
Забудьте об идее «mount -o bind», создайте новый LV / раздел, но пока не монтируйте его.
Для каждого демона, который имеет любой открытый файл (я бы ожидал, по крайней мере, syslog, inetd, sshd):
kill -1
или/etc/init.d/script reload
)lsof | grep /var/log
что демон закрыл свои файлыСмонтировать поверх / var / log. Восстановите старые конфигурации, SIGHUP / перезагрузите демоны снова.
Простой способ (время простоя)
Создайте новый LV / раздел и правильно смонтируйте его в / var или / var / log. Самый простой способ - перевести сервер в режим обслуживания (однопользовательский режим) и использовать для работы реальную консоль (не ssh).
источник
Ответы всех остальных отличные и правильные, и вы должны обязательно прочитать их в первую очередь.
Я просто подумал, что поделюсь этим, потому что это облегчает копирование и вставку, если ваш случай окажется довольно простым, как мой:
Остановите системный журнал и скопируйте текущие журналы:
затем установите новое местоположение
/var/log
. Скажем, это новое устройство под названием/dev/sdb
Теперь вы можете скопировать файлы обратно и перезапустить системный журнал:
Предполагая, что все это происходит довольно рано в жизни вашей машины,
rsyslog
скорее всего, это будет единственный работающий демон. YMMV!PS - возможно, вы захотите добавить его к себе
fstab
. Вот один из способов сделать это, опять же при условии очень простого монтирования:(см. /server//a/267610/80606 о том, как перевести mtab в fstab)
источник
cp -r
сsudo tar cpf
иsudo tar xpf
сохранить файл собственности и разрешения на авось есть журналы , созданные пользователем, кроме корня.Еще одна вещь, которую вы могли бы сделать:
/var/log
/var/log
(используяlsof
как предложено kubanskamac)/var/log
в другой раздел с достаточно свободного места (следуя вашему примеру, это будет/home/log
)ln -s /home/log /var/log
)Обратите внимание, что это далеко от того, что я считаю хорошей практикой. Это просто обходной путь, чтобы вам не пришлось выключать сервер. Правильным решением было бы создать новый
/var
или/var/log
раздел с достаточным пространством (или расширить текущий),источник
Другое решение, основанное на @hwjp, если вы не можете использовать другой том диска для их перемещения, вы можете создать том виртуального диска в другой том, который имеет больше свободного места (в моем случае):
Создать виртуальный том:
А) сделать:
sudo dd if=/dev/zero of=VHD-log.img bs=1M count=1200
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.
Переместить старые файлы журнала:
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 после того, как все в порядке.
источник
Я бы просто:
источник
/var/log
установленным/home/log
как есть? Весь этот вопрос не для опытных администраторов, я полагаю.