Як я можу перемістити каталог / var / log


16

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


На AskUbuntu є детальна відповідь на те саме запитання на сайті askubuntu.com/a/346579/422224
Eborbob

Це не відповідь, а пропозиція. якщо можливо, використовуйте для журналів файлову систему з стисненням у реальному часі, як, наприклад, btrfs. Коли ви монтуєте цей розділ, використовуйте параметр монтажу "компрес = lzo" або "стиснути = zlib". lzo пропонує кращі показники, zlib - краще стиснення.
Массімо

Відповіді:


26

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

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

Ваш підхід

Те, що ви запропонували, може спрацювати, якщо ви подасте сигнал демонам за допомогою SIGHUP (убийте -1 pid). Очевидно, вам потрібно буде пізніше "mount -o прив’язати / / десь" та очистити те, що залишилося під змонтованим / var / log. Але у мене поганий запах, особливо на виробництво.

Уникайте простоїв, мати чистий результат (але це складно зробити)

Забудьте про ідею "mount -o bind", створіть новий LV / розділ, але не монтуйте його поки.

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

Для кожного демона, який має будь-який відкритий файл (я б очікував принаймні syslog, inetd, sshd):

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

Монтувати над / var / log. Відновіть старі конфігурації, SIGHUP / перезавантажте демон знову.

Простий спосіб (простої)

Створіть новий LV / розділ та встановіть його належним чином через / var або / var / log. Найпростіший спосіб - перевести сервер у режим обслуговування (режим однокористувача) і використовувати фактичну консоль (не ssh) для операції.


8

Відповіді всіх інших є чудовими і правильними, і ви їх обов'язково повинні прочитати першими.

Я просто думав, що поділюсь цим, оскільки це дозволяє легко скопіювати та вставити, якщо ваш випадок виявиться досить простим, як у мене:

Зупинення системного журналу та копіювання поточних журналів:

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

(див. /server//a/267610/80606 про те, щоб перейти на mtab до fstab)


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розділу з достатньою кількістю місця (або розширення поточного),


Чи буде якийсь ефект від створення ідеї посилання, якщо логротат запускається? Я не знав, чи буде це перезаписувати чи викручувати місця файлів, якщо вони вже не були посиланнями ... це може означати пізніше головних болів у обслуговуванні.
Барт Сільверстрім

Так, нарешті здається, що робити цю операцію під час роботи сервера - це не так добре. Тоді я не зможу побачити, який процес все ще використовує старий / var / log / Більше того, я думаю, що деякі додатки не так легко впораються із символічним посиланням, щоб у підсумку викрутити журнал. Можливо, я повинен запланувати режим обслуговування. Насправді я видаляю файли вручну, коли ліве місце стає невеликим. mriedman: Я перевірю, чи зможу змінити розмір цього розділу
Razique

0

Інше рішення, засноване на @hwjp, якщо ви не можете використовувати інший об'єм диска для їх переміщення, ви можете створити об'єм віртуального диска в інший том, у якого є більше місця (це мій випадок):

Створіть віртуальний том:

А) робіть: sudo dd if=/dev/zero of=VHD-log.img bs=1M count=1200

  • if = / dev / zero: вхідний файл, щоб забезпечити потік символів для ініціалізації зберігання даних
  • = VHD.img: файл зображення, який потрібно створити як об'єм зберігання в / thevolumeofyourchoice
  • bs = 1М: читати і записувати до 1М одночасно
  • count = 1200: копіює лише вхідні блоки 1200M (1GB)

B) виконайте: sudo mkfs -t ext4 /thevolumeofyourchoice/VHD-log.imgвідформатуйте тип файлової системи EXT4 у файлі зображень VHD-журналу за допомогою утиліти mkfs.

C) робити: sudo mkdir /thevolumeofyourchoice/vlogВстановити VHD-журнал у каталог (точка монтування)

D) робити: 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 = режим, право власності, часові позначки)

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) do: 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 / аудит на фактичних окремих точках монтажу. В іншому випадку залиште їх і просто встановіть відповідне обертання журналу, щоб уникнути зайвого використання диска.
Бред
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.