отмонтируем var без ребутаВсе-таки lvm-прикольная штука. А также рекомендации по созданию нескольких точек монтирования не беспочвенны. У нашего доброго друга nginx'a есть некоторая проблема, что когда он не может писать в var, он просто падает и все. Переполнение может возникнуть, когда прилетает одномоментно тонна логов и место просто заканчивается. В связи с этим было принято решение создать точку монтирования на /var, а старый /var смонтировать на /var/log. Сделать это совсем уж без даунтайма нельзя, но, благо пока один upstream недоступен вся нагрузка идет на другие. задача лишь плавно погасить клиентские сессии.
первое что нужно сделать - создать новый раздел, сделать на нем ext4, смонтировать и отсинкать на него содержимое /var, но без логов.
lvcreate -L 20G -n var-root vg_system
mkfs.ext4 /dev/mapper/vg_system-var--root
mount /dev/mapper/vg_system-var--root /mnt/
rsync -avz --exclude 'log' /var/ /mnt/
mkdir /mnt/log
umount /mnt
теперь наш диск готов для монтирования на место /var. Но, еще нужно воссоздать структуру директорий /var/log/* на новом диске (текущий /var), т.к. когда он смонтируется на /var/log, логи будут на уровне /var/log/log. для этого можно использовать rsync с фильтрами, но я заленился читать ман и написал скрипт. скрипт ищет все папки в /var/log, узнает их права и владельца и создает такую же структуру на уровне /var
#!/bin/bash
echo ""
for i in $(find /var/log -type d -printf '%d\t%P\n' | sort -r -nk1 | cut -f2-); do
mkdir -p /var/temp/$i
chown $(stat -c %u /var/log/$i):$(stat -c %g /var/log/$i) /var/$i
chmod $(stat -c %a /var/log/$i) /var/$i
echo ""
done
Теперь дело за малым - отмонтировать старый /var. Для этого нужно погасить все службы, которые им пользуются.
lsof /var
и далее скурпулезно начинаем гасить службы, которые пользуются этим разделом. В самую последнюю очередь - nginx, поскольку именно через него ходят клиенты.
nginx -s quit
таким образом можно погасить nginx плавно завершая клиентские сессии и больше не принимая новых. соседний сервер приянл на себя несколко сотен мегабит клиентского траффика, но вполне его выдержал без проблем. После того как вывод lsof становится пустым можно перемонтировать тома. после чего внести новую запись в fstab. проверить fstab и mtab на предмет того что текущее монтирование соответствует порядку монтирования при загрузке. После чего можно стартануть все службы обратно и убедиться что все они пишут логи так как должны и у них нет ошибок. Для успокоения можно ребутнуть сервер целиком, а можно и не ребутать. по факту работы уже закончены.