Jak mogę przenieść katalog / var / log


16

Na naszym serwerze produkcyjnym znajduje się mały dysk dla głównego punktu montowania /, /var/logzajmuje zbyt dużo miejsca i muszę ręcznie usunąć niektóre pliki. Jak mogę przejść /var/log/do powiedzmy /home/logBEZ REBOOTINGU?

Oto rzecz, o której myślałem:

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

Ale wiem, że niektóre usługi używają deskryptorów plików, więc będą nadal używać /var/loglub i-węzłów.


Szczegółowa odpowiedź na to samo pytanie znajduje się w AskUbuntu na askubuntu.com/a/346579/422224
Eborbob

To nie jest odpowiedź, ale sugestia. jeśli to możliwe, użyj do rejestrowania systemu plików z kompresją w czasie rzeczywistym, takiego jak btrfs. Podczas montowania tej partycji, użyj opcji montowania „kompresuj = lzo” lub „kompresuj = zlib”. lzo oferuje lepszą wydajność, zlib lepszą kompresję.
Massimo,

Odpowiedzi:


26

Prawidłowy projekt

Zakładam, że nie możesz po prostu rozszerzyć danego systemu plików (używając lvextend && ext2online), ponieważ nie używasz LVM lub używasz niewłaściwego typu systemu plików.

Twoje podejście

To, co zaproponowałeś, może zadziałać, jeśli zasygnalizujesz demony SIGHUP (zabij -1 pid). Oczywiście trzeba później „zamontować -o powiązać / / gdzieś” i wyczyścić to, co pozostało pod zamontowanym / var / log. Ale ma dla mnie nieprzyjemny zapach, szczególnie podczas produkcji.

Unikaj przestojów, uzyskaj czysty wynik (ale skomplikowany)

Zapomnij o pomyśle „mount -o bind”, utwórz nową partycję LV / partycji, ale jeszcze jej nie instaluj.

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

Dla każdego demona, który ma dowolny otwarty plik (oczekiwałbym przynajmniej syslog, inetd, sshd):

  • ponownie skonfiguruj demona no, aby logował się do / var / log
  • odśwież demona ( kill -1 lub /etc/init.d/script reload)
  • potwierdź, lsof | grep /var/log że demon zamknął swoje pliki

Zamontuj nad / var / log. Przywróć stare konfiguracje, SIGHUP / przeładuj demony ponownie.

Łatwy sposób (przestój)

Utwórz nową partycję LV / i zamontuj ją poprawnie w katalogu / var lub / var / log. Najłatwiejszym sposobem jest przełączenie serwera w tryb konserwacji (tryb pojedynczego użytkownika) i użycie rzeczywistej konsoli (nie ssh) do operacji.


jak się upewnić, że nic nie zostanie utracone podczas okrążeń między uruchomieniem a zamontowanym / var / log?
Sandburg

8

Odpowiedzi wszystkich innych są doskonałe i poprawne, więc zdecydowanie powinieneś je najpierw przeczytać.

Pomyślałem, że podzielę się tym, ponieważ ułatwia to kopiowanie i wklejanie, jeśli twoja sprawa okazuje się dość prosta, taka jak moja:

Zatrzymaj syslog i skopiuj bieżące wylogowania:

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

następnie zamontuj nową lokalizację /var/log. Powiedzmy, że to nowe urządzenie o nazwie/dev/sdb

mount /dev/sdb /var/log

teraz możesz skopiować pliki z powrotem i ponownie uruchomić syslog:

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

Zakładając, że wszystko to dzieje się dość wcześnie w życiu twojej maszyny, rsyslogprawdopodobnie będzie to jedyny działający demon. YMMV!

PS - prawdopodobnie będziesz chciał również dodać go do swojego fstab. Oto jeden ze sposobów, aby to zrobić, ponownie zakładając bardzo prosty montaż:

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

(por. https://serverfault.com/a/267610/80606 o catting mtab do fstab)


5
Niezłe rozwiązanie. Jedna rzecz, ja bym zmiana jest zastąpienie cp -rze sudo tar cpfi sudo tar xpfzachować na własność pliku i uprawnienia na przypadek wyłączenia istnieją logi tworzone przez użytkownika innego niż root.
Brenda Bell,

2

Inną rzeczą, którą możesz zrobić, jest:

  • Zatrzymaj procesy z otwartymi plikami /var/log
  • Sprawdź, czy nie ma żadnych procesów z otwartymi plikami /var/log(używając lsofzgodnie z sugestią kubanskamac)
  • Przenieś swoją /var/logna inną partycję z wystarczającą ilością wolnego miejsca (zgodnie z twoim przykładem, to byłoby /home/log)
  • Utwórz dowiązanie symboliczne z / var / log do / home / log ( ln -s /home/log /var/log)
  • Uruchom ponownie procesy zatrzymane w pierwszym kroku

Pamiętaj, że jest to dalekie od tego, co uważam za dobrą praktykę. Jest to tylko obejście problemu, dzięki któremu nie musisz wyłączać serwera. Właściwym rozwiązaniem byłoby utworzenie nowej /varlub /var/logpartycji z wystarczającą ilością miejsca (lub rozszerzenie obecnej),


Czy wykonanie logrotatu przyniosłoby jakikolwiek efekt? Nie wiedziałem, czy zastąpiłoby lub zepsuło lokalizację plików, gdyby nie były już linkami ... to może oznaczać więcej problemów z utrzymaniem.
Bart Silverstrim,

Tak, w końcu wydaje się, że wykonanie tej operacji podczas działania serwera nie jest tak dobre. Nie będę wtedy mógł zobaczyć, który proces nadal używa starego / var / log / Co więcej, myślę, że niektóre aplikacje nie radzą sobie łatwo z dowiązaniem symbolicznym, więc może to w końcu zepsuć dziennik. Może powinienem zaplanować tryb konserwacji. Właściwie ręcznie usuwam pliki, gdy brakuje miejsca. mriedman: Sprawdzę, czy mogę zmienić rozmiar tej partycji
Razique

0

Inne rozwiązanie oparte na @hwjp, jeśli nie możesz użyć innego woluminu dysku do przeniesienia go, możesz utworzyć wolumin dysku wirtualnego na innym woluminie, który ma więcej dostępnego miejsca (tak jest w moim przypadku):

Utwórz wolumin wirtualny:

A) wykonaj: sudo dd if=/dev/zero of=VHD-log.img bs=1M count=1200

  • if = / dev / zero: plik wejściowy zapewniający strumień znaków do inicjowania przechowywania danych
  • of = VHD.img: plik obrazu do utworzenia jako wolumin pamięci w / thevolumeofyourchoice
  • bs = 1M: odczyt i zapis do 1M na raz
  • count = 1200: kopiuje tylko bloki wejściowe 1200 M (1 GB)

B) do: sudo mkfs -t ext4 /thevolumeofyourchoice/VHD-log.imgSformatuj typ systemu plików EXT4 w pliku obrazu VHD-log za pomocą narzędzia mkfs.

C) do: sudo mkdir /thevolumeofyourchoice/vlogPodłącz VHD-log do katalogu (punkt podłączenia)

D) wykonaj: sudo mount -t auto -o loop /thevolumeofyourchoice/VHD-log.img /thevolumeofyourchoice/vlog

D1) Aby zamontować dziennik VHD podczas uruchamiania systemu do katalogu końcowego, dodaj ten wpis do pliku / etc / fstab.

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

Przenieś stare pliki dziennika:

E) wykonaj:

  • service rsyslog stop
  • lsof | grep /var/log do list otwiera pliki w / var / log i wyłącza potrzebnego demona (apach2, w moim przypadku freshclam)
  • cp -rp /var/log/* /thevolumeofyourchoice/vlog (cp -p to samo, co --preserve = tryb, własność, znaczniki czasu)

F) wykonaj:

  • 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 starti uruchom ponownie inne usługi, które zatrzymałeś

Wreszcie podwójna kontrola:

Możesz zrobić - lsof | grep /var/logaby wyświetlić listę otwartych plików w / var / log i sprawdzić, czy wskazują one na / var / log, a nie / var / log-old

Możesz mv, wykonać kopię zapasową lub usunąć / var / log-old, ponieważ wszystko jest w porządku.


-1

Po prostu:

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

Czy dobrze jest zostawić /var/logzamontowane /home/logtak, jak jest? Przypuszczam, że całe to pytanie nie dotyczy doświadczonych administratorów.
kubańczyk

Co masz na myśli? / home / log jest montowany na / var / log, a nie na odwrót. I tak, nie jest problemem pozostawienie go takim, jakim jest, po prostu upewnij się, że jest on przywracany automatycznie przy każdym rozruchu i wystarczająco wcześnie, aby wszystkie procesy nie próbowały tworzyć nowych dzienników w pustym punkcie montowania / var / log.
Alexander Shcheblikin

wiele razy wymagania bezpieczeństwa wymagają / var / log i / var / log / audit na rzeczywistych osobnych punktach montowania. W przeciwnym razie pozostaw je i po prostu skonfiguruj odpowiedni obrót dziennika, aby uniknąć niepotrzebnego użycia dysku.
Brad
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.