Pytanie:
Jak mogę ograniczyć zapisywanie do plików dziennika
Frank Breitling
2017-02-26 17:21:27 UTC
view on stackexchange narkive permalink

Częstym zmartwieniem użytkowników Raspberry Pi jest zużycie i zniszczenie ich kart SD (które mają ograniczone cykle zapisu) przez zbyt wiele zapisów. Doświadczenia zgłaszane przez użytkowników potwierdzają to założenie.

Rejestrowanie jest jednym ze źródeł częstego dostępu do zapisu.

Powstaje więc pytanie, jak można to zmniejszyć w Raspbian.

Możesz przenieść lokalizację plików dziennika na dysk zewnętrzny lub dysk flash, ale IMO te obawy są przesadzone.
* „Doświadczenia zgłaszane przez użytkowników potwierdzają to założenie.” * -> ** Tylko wtedy, gdy są pozbawieni rozsądku. ** Internet jest pełen histerycznych raportów od histerycznych ludzi. Bigfoot! UFO! Logowanie zniszczyło moją kartę SD! Itd. Zobacz http://unix.stackexchange.com/a/84905/25985
Bardziej mnie niepokoi, ponieważ ktoś, kto często wyciąga wtyczkę, to wiedzieć, że nic nie będzie zapisywać na karcie SD, gdy pociągnę za przewód.
@SteveRobillard @goldilocks Więcej niż wiele zapisów to nieoczekiwana utrata mocy; to może nie być winą za uszkodzenie SD, ale tak na wszelki wypadek zawsze robię „zamknięcie teraz” i koniec z uszkodzeniami SD.
@goldilocks Jestem sceptyczny co do twoich obliczeń. Wygląda to dość optymistycznie. Przyjrzyj się [temu szczegółowemu] (http://stackoverflow.com/a/24360304/2235831). > „W ten sposób rejestrowanie danych co 10 minut [...] będzie dobre przez 20 000 lat… Powyższe obliczenia zakładają doskonałe wyrównanie zużycia i bardzo wydajny system pilników”. (co nie ma miejsca) „Oczywiście, można to dość łatwo zepsuć”, na przykład, jeśli karta jest pełna itp. Wtedy degradacja może być szybsza o rząd wielkości.
Zgadzam się, że to hiperboliczne - ale myślę, że jest to wyraźne. Ten jastrych jest antytoksyną. Chodzi o to, że * zdecydowana większość * użytkowników nie musi się tym martwić. Ludzie nie powinni uważać za dobre i normalne działanie z całkowicie wypełnionym głównym systemem plików na pi, ich laptopie, serwerze inet itp.; domyślnie ext fs odkłada 5% na bok tylko do użytku roota, aby pomóc złagodzić ten problem. Więc naprawdę mówisz o ** skrzynkach narożnych **, a moja wołowina jest taka, że ​​przedstawiłeś je tak, jakby każdy samoświadomy obywatel powinien traktować to jako problem. * Nie, nie powinno. *
To zależy od aplikacji. Na przykład używam Pi z Apache i PHP do sterowania i testowania maszyny. Wbudowana przeglądarka stale odświeża wyświetlaną stronę ze stanem (liczniki, temperatura itp.), Co odbywa się poprzez wywołania Ajax do programów PHP. Każde odświeżenie dodaje wiersz do pliku access.log. W zależności od częstotliwości odświeżania może to być DUŻO zapisów. A urządzenie jest stale włączone.
Pięć odpowiedzi:
#1
+12
joan
2017-02-26 17:33:33 UTC
view on stackexchange narkive permalink

Jeśli nie jesteś zainteresowany logami, możesz wiele wyłączyć za pomocą ustawień konfiguracji dziennika.

Edytuj plik /etc/rsyslog.conf i zaraz po początek sekcji

  ################### RULES ################## #  

dodaj następujący wiersz.

  *. * ~  

Jeśli chcesz być bardziej w porządku- ziarnisty, musisz przeczytać komentarze do pliku.

Nie zapomnij zrestartować demona rsyslog:

  usługa sudo restart rsyslog  
Proste i czyste rozwiązanie. Skomentowałem wszystko, co zapisuje w / var / out. To * powinno * działać.
Ale interesują mnie logi. Są bardzo ważne przy wyszukiwaniu problemów w systemie!
Jeśli interesują Cię dzienniki, istnieje wiele sposobów ich przechowywania, ale unikaj zapisów SD. Wyślij dzienniki do / dev / shm (RAM), a następnie uruchom logrotate co 300 sekund i wyślij je do Amazon S3. Lub Dropbox. Pamiętaj, dzienniki mają OGRANICZONĄ wartość, która z czasem maleje. Często potrzebujesz tylko aktualnych, aktualnych dzienników ...
#2
+9
Frank Breitling
2017-02-26 19:22:00 UTC
view on stackexchange narkive permalink

Moje rozwiązanie dla Raspbian 8.0 (Jessie) oparte na logowaniu do pamięci RAM

Istnieje już pakiet Ramlog Debian i instrukcje instalacji do tego. Jednak to nie zadziałało (Uruchamiam ramlog-tmpfs 2.0.0: Błąd: / var / log jest używany ... [niepowodzenie]).

Używanie iotop -bktoqqq Odkryłem najczęstszy dostęp do zapisu. Okazuje się, że często zapisuje się również / var / cache / samba /. Więc to również musi trafić do pamięci RAM oprócz / var / tmp /, gdzie będą nowe pliki dziennika.

1. Tworzenie ramdysku

Więc najpierw te dwa wpisy należy dodać do / etc / fstab :

  tmpfs / var / tmp tmpfs size = 10M, nodev, nosuid 0 0tmpfs / var / cache / samba tmpfs size = 5M, nodev, nosuid 0 0  

2. Skrypt log2disk

Musimy zapisać ten skrypt w / usr / local / bin / log2disk , który doda i usunie zawartość wszystkich plików dziennika w / var / tmp / log / do plików w /var/log/.

  #! / bin / sh # Autor: Frank Breitling <frank.breitling @ gmx.de>DESC = "Przenoszenie zawartości z / var / tmp / log / do / var / log /" if [$ (id -u) -ne 0] then echo "Uruchom jako root" exitfiecho $ DESCexec >> / var / log /log2disk.log 2>&1datecd / var / tmp / for i in log / *; do basename $ i cat $ i >> / var / $ i > $ idone  

i uczyń go wykonywalnym sudo chmod + x / usr / local / bin / log2disk .

3. Dodawanie do crontab

Chcemy uruchamiać ten skrypt co 3 godziny i dodawać tę linię do systemu /etc/crontab

  10 * / 3 * * * root / usr / local / bin / log2disk  

(Nie zapomnij o ostatnim znaku nowej linii, który jest wymagany przez crontab.)

4. Instalowanie log2disk.service

Musimy stworzyć usługę systemd w /lib/systemd/system/log2disk.service , która wykonuje ten skrypt przed zamknięciem i ponownym uruchomieniem, aby zawartość pliku dziennika została zachowana:

  [Unit] Description = Zapisywanie plików dziennika do diskRequiresMountsFor = / Before = rsyslog.service [Service] Type = oneshotRemainAfterExit = trueExecStart = / bin / trueExecStop = / usr / local / bin / log2disk [Install] WantedBy = multi-user.target  

i zainstaluj go z sudo systemctl włącz log2disk .

5. Wybieranie plików dziennika dla pamięci RAM

Teraz możemy powiedzieć /etc/rsyslog.conf , które pliki dziennika mają przechowywać w pamięci RAM. Te pliki to auth.log, syslog, daemon.log, user.log i messages , a dla każdego z ich wpisów zastępujemy ścieżkę log / przez tmp / log / na przykład w ten sposób:

  auth, authpriv. * /var/tmp/log/auth.log  

Gotowe!

Po ponownym uruchomieniu system będzie teraz rejestrował najczęstsze wpisy dziennika w / var / tmp / log i synchronizował je co 3 godziny, a przed zamknięciem.

Możemy ponownie użyć iotop , aby znaleźć znacznie zmniejszoną aktywność zapisu, jednak nie powinniśmy się martwić o miganie zielonej diody ACT. Najwyraźniej nie jest to dobry wskaźnik dostępu do zapisu.

* „Opracowałem następujące rozwiązanie dla Raspbian 8.0 (Jessie) w oparciu o pomysł logowania do pamięci RAM.” * -> Biorąc pod uwagę, w jaki sposób Jessie jest oparta na systemd, jest to już kilka poprawionych linii konfiguracyjnych za pośrednictwem Journald. Spójrz na `man journald.conf` i zanotuj` Storage = volatile` itd. Następnie po prostu * wyłącz * rsyslog (i tak jest zasilany z journald teraz) i presto, logowanie oparte na pamięci RAM z wieloma dzwonkami i gwizdkami oraz opcjami dostosowywania . Bez kłopotów.
@goldilocks Zastanawiam się, jak to może być przydatne do tworzenia takiego bufora pliku dziennika, który utworzyłem.
Nie jestem pewny co masz na myśli. TBH Nie jestem fanem dziennika (głównie ze względu na format binarny), a powód, dla którego tak dużo o nim wiem, jest taki, że z nim robię - wyłącz logowanie na dysk (i zostaw to rsyslog), i daj mu niewielką ilość pamięci RAM do wykorzystania jako bufor. Jeśli masz na myśli okresowe opróżnianie go na dysk, nie rozumiem, dlaczego nie.
AiliyrzgbrCMT Więc jak?
Jeśli nigdy go nie używałeś, powinieneś rzucić okiem na `man journalctl`. Tak jak powiedziałem, jestem staroświeckim facetem od syslogów, ale zauważyłem, że jest przełącznik `-s --since`; następnie musisz go po prostu zmusić do zrzucenia go w sposób odpowiedni do przekierowania do pliku (domyślnie może się to nie zdarzyć ... jeśli trochę się pobawisz, otrzymasz obraz).
@goldilocks Brzmi to dość niejasno i szczerze mówiąc, nie mam pojęcia, o czym mówisz. Ale zwykle okazuje się, że sprawy nie są tak proste, jak myślisz.
#3
+2
CoderX
2017-05-28 22:37:33 UTC
view on stackexchange narkive permalink

Sposób na obejście tego polega na zainstalowaniu katalogu głównego na nośniku USB zamiast na karcie SD. Używam karty SD tylko do rozruchu.

Dzięki temu nie muszę martwić się zapisami na mojej karcie SD.

Aby to osiągnąć, używam berryboot.

#4
  0
Fabian
2018-01-31 01:26:34 UTC
view on stackexchange narkive permalink

Aby ograniczyć operacje zapisu pliku dziennika w RPi, można skonfigurować scentralizowany serwer dziennika z rsyslog. Jeśli chcesz zachować wpisy, po prostu wyślij komunikaty do zdalnego serwera dziennika, w przeciwnym razie do / dev / null.

#5
  0
Nick Painter
2019-06-01 03:03:45 UTC
view on stackexchange narkive permalink

Zamiast edytować plik rsyslog.conf, możesz po prostu zatrzymać usługę, jeśli chcesz usunąć wszystkie dzienniki.

  sudo service rsyslog stop  

Następnie, możesz go wyłączyć przy starcie:

  sudo systemctl wyłącz rsyslog  

aby włączyć go ponownie przy starcie:

  sudo systemctl włącz rsyslog  
Ale to zatrzymuje wszystkie rejestrowanie.
Zapomniałeś poprzedzić polecenia przedrostkiem „sudo”. Jeśli używasz `systemctl`, powinieneś także użyć go do zatrzymania usługi za pomocą` sudo systemctl stop rsyslog.service`.
Bardzo dobre opinie. Zaktualizowałem tę odpowiedź, aby odzwierciedlić oba te komentarze.
Przy okazji, jeśli skopiujesz czyjąś odpowiedź, zwykle uprzejmie jest się do niej odwołać. Tutaj zrobię to za Ciebie: https://stackoverflow.com/a/32553762/4453048


To pytanie i odpowiedź zostało automatycznie przetłumaczone z języka angielskiego.Oryginalna treść jest dostępna na stackexchange, za co dziękujemy za licencję cc by-sa 3.0, w ramach której jest rozpowszechniana.
Loading...