Domanda:
Come posso ridurre la scrittura sui file di registro
Frank Breitling
2017-02-26 17:21:27 UTC
view on stackexchange narkive permalink

Una preoccupazione comune degli utenti di Raspberry Pi è l'usura e la distruzione della loro scheda SD (che ha cicli di scrittura limitati) da troppe scritture. L'esperienza riportata dagli utenti supporta questa ipotesi.

La registrazione è una delle fonti di frequenti accessi in scrittura.

Quindi sorge la domanda su come questo possa essere ridotto su Raspbian.

Puoi spostare la posizione dei file di registro su un'unità esterna o un'unità flash, ma IMO queste preoccupazioni sono esagerate.
* "L'esperienza riportata dagli utenti supporta questa ipotesi." * -> ** Solo se sono privi di ragione. ** Internet è pieno di rapporti isterici di persone isteriche. Bigfoot! UFO! La registrazione ha distrutto la mia scheda SD! Ecc. Vedere http://unix.stackexchange.com/a/84905/25985
La cosa più preoccupante per me, come qualcuno che stacca spesso la spina, è sapere che nulla scriverà sulla scheda SD quando tiro il cavo.
@SteveRobillard @goldilocks Più che a molte scritture, è la perdita di potenza imprevista; questo potrebbe non essere il culpit del danno SD ma, per ogni evenienza, faccio sempre uno "spegnimento adesso" e non più corruzioni SD.
@goldilocks Sono scettico con il tuo calcolo. Sembra abbastanza ottimista. Dai un'occhiata a [questo dettagliato] (http://stackoverflow.com/a/24360304/2235831). > "In questo modo la registrazione ogni 10 minuti [...] sarà valida per 20 000 anni ... Il calcolo sopra presuppone un perfetto livellamento dell'usura e un file system molto efficiente." (che non è il caso) "Naturalmente, questo può essere rovinato abbastanza facilmente", ad esempio se la scheda è piena, ecc. Quindi il degrado può essere di ordini di grandezza più veloce.
Sono d'accordo che sia iperbolico, ma penso che sia esplicito. Quel massetto è un'antitossina. Il punto è che la * stragrande maggioranza * degli utenti non deve preoccuparsi di questo. Le persone non dovrebbero considerare normale e corretto operare con un filesystem root completamente riempito su un pi, il loro laptop, un server inet, ecc .; per impostazione predefinita, ext fs mette da parte il 5% per l'uso come root solo per aiutare a mitigare ciò. Quindi stai davvero parlando di ** casi d'angolo **, e il manzo che ho qui è che tu lo hai presentato come se dovesse essere considerato un problema da ogni cittadino consapevole. * No, non dovrebbe. *
Dipende dall'applicazione. Ad esempio, utilizzo un Pi con Apache e PHP per eseguire il controllo e il test della macchina. Il browser integrato aggiorna costantemente la pagina di visualizzazione con lo stato (contatori, temperatura, ecc.) Che viene eseguito tramite chiamate ajax ai programmi PHP. Ogni aggiornamento aggiunge una riga al file access.log. A seconda della frequenza di aggiornamento, questo può essere un SACCO di scritture. E il dispositivo è costantemente acceso.
Cinque risposte:
joan
2017-02-26 17:33:33 UTC
view on stackexchange narkive permalink

Se non sei interessato ai log, puoi disattivare molte impostazioni utilizzando un'impostazione di configurazione del log.

Modifica il file /etc/rsyslog.conf e subito dopo il sezione che inizia

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

aggiungi la seguente riga.

  *. * ~  

Se vuoi essere più fine- grained dovrai leggere i commenti del file.

Non dimenticare di riavviare il demone rsyslog:

  sudo service rsyslog restart  
Soluzione facile e pulita. Ho commentato tutto ciò che scrive in / var / out. Dovrebbe funzionare.
Ma a me interessano i log. Sono molto importanti per trovare problemi di sistema!
Se sei interessato ai log, ci sono molti approcci per conservarli, ma evita le scritture su SD. Invia i log a / dev / shm (RAM), quindi esegui logrotate ogni 300 secondi e invia i log ad Amazon S3. O Dropbox. Ricorda, i log hanno un valore LIMITATO che diminuisce nel tempo. Spesso hai solo bisogno di registri aggiornati e tempestivi ...
Frank Breitling
2017-02-26 19:22:00 UTC
view on stackexchange narkive permalink

La mia soluzione per Raspbian 8.0 (Jessie) basata sull'accesso alla RAM

Esiste già il pacchetto Debian Ramlog e le istruzioni di installazione per questo. Tuttavia, questo non ha funzionato per me (avvio di ramlog-tmpfs 2.0.0: errore: / var / log è in uso ... [fallito]).

Uso di iotop -bktoqqq Ho scoperto l'accesso in scrittura più frequente. Si scopre che anche / var / cache / samba / viene spesso scritto. Quindi questo deve anche andare alla RAM oltre a / var / tmp / dove saranno i nuovi file di log.

1. Creazione del ramdisk

Quindi prima queste due voci devono essere aggiunte a / etc / fstab :

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

2. Lo script log2disk

Dobbiamo salvare questo script in / usr / local / bin / log2disk che aggiungerà ed eliminerà il contenuto da tutti i file di log in / var / tmp / log / nei file in /var/log/.

  #! / bin / sh # Autore: Frank Breitling <frank.breitling @ gmx.de>DESC = "Spostamento di contenuti da / var / tmp / log / a / var / log /" if [$ (id -u) -ne 0] then echo "Si prega di eseguire come root" exitfiecho $ DESCexec >> / var / log /log2disk.log 2>&1datecd / var / tmp / for i in log / *; fare basename $ i cat $ i >> / var / $ i > $ idone  

e renderlo eseguibile sudo chmod + x / usr / local / bin / log2disk .

3. Aggiunta a crontab

Vogliamo eseguire questo script ogni 3 ore e aggiungere questa riga al /etc/crontab

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

(Non dimenticare una nuova riga finale necessaria a crontab.)

4. Installazione di log2disk.service

Dobbiamo creare un servizio systemd in /lib/systemd/system/log2disk.service che esegua questo script prima dell'arresto e del riavvio, in modo che il contenuto del file di log venga preservato:

  [Unit] Description = Scrivi i file di registro su diskRequiresMountsFor = / Before = rsyslog.service [Service] Type = oneshotRemainAfterExit = trueExecStart = / bin / trueExecStop = / usr / local / bin / log2disk [Install] WantedBy = multi-user.target  

e installalo con sudo systemctl enable log2disk .

5. Selezione dei file di log per la RAM

Ora possiamo dire a /etc/rsyslog.conf quali file di log tenere nella RAM. Questi file sono auth.log, syslog, daemon.log, user.log e messages e sostituiamo per ciascuna delle loro voci il percorso log / con tmp / log / ad esempio in questo modo:

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

Fatto!

Dopo un riavvio, il sistema ora registrerà le voci di registro più frequenti in / var / tmp / log e le sincronizzerà di nuovo ogni 3 ore e prima dello spegnimento.

Possiamo utilizzare di nuovo iotop per trovare un'attività di scrittura notevolmente ridotta, tuttavia non dovremmo preoccuparci del LED ACT verde lampeggiante. Apparentemente questo non è un buon indicatore di accesso in scrittura.

* "Ho elaborato la seguente soluzione per Raspbian 8.0 (Jessie) basata sull'idea di accedere a ram." * -> Visto che Jessie è basato su systemd, sono già a poche righe di configurazione ottimizzate tramite journald. Dai un'occhiata a `man journald.conf` e nota` Storage = volatile`, ecc. Quindi semplicemente * disabilita * rsyslog (è comunque alimentato da journald) e presto, registrazione basata su RAM con molte campane e fischietti e opzioni di personalizzazione . Senza alcun problema.
@goldilocks Mi chiedo come questo possa essere utile per creare un tale buffer di file di registro che ho creato.
Non sono sicuro di cosa intendi. TBH Non sono un fan di journald (principalmente a causa del formato binario), e il motivo per cui ne so così tanto è che questo è quello che faccio con esso: disabilitare la registrazione su disco (e lasciarla a rsyslog), e dategli una modesta quantità di RAM da utilizzare come buffer. Se intendi scaricarlo periodicamente su disco, non vedo perché no.
@goldilocks Allora come?
Se non l'hai mai usato, dovresti dare un'occhiata a `man journalctl`. Come ho detto, sono un vecchio syslog, ma ho notato che c'è un interruttore `-s --since`; quindi devi solo scaricarlo in un modo appropriato per il reindirizzamento a un file (che potrebbe non accadere di default ... se giochi un po 'otterrai l'immagine).
@goldilocks Questo suona abbastanza vago e ad essere sincero non ho idea di cosa tu stia parlando. Ma di solito si scopre che le cose non sono così semplici come pensi.
CoderX
2017-05-28 22:37:33 UTC
view on stackexchange narkive permalink

Il modo in cui evito questo è installando la mia directory principale su una USB invece che sulla scheda SD. Uso la scheda SD solo per l'avvio.

Questo mi evita di dovermi preoccupare delle scritture sulla mia scheda SD.

Uso berryboot per ottenere questo risultato.

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

Per ridurre le operazioni di scrittura dei file di log sull'RPi è possibile configurare un server di log centralizzato con rsyslog. Se vuoi conservare le voci, invia semplicemente i messaggi al server di log remoto, altrimenti a / dev / null.

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

Invece di modificare rsyslog.conf, puoi semplicemente interrompere il servizio se desideri eliminare tutti i log.

  sudo service rsyslog stop  

Quindi, puoi disabilitarlo all'avvio:

  sudo systemctl disable rsyslog  

per abilitarlo di nuovo all'avvio:

  sudo systemctl abilita rsyslog  
Ma questo interrompe tutte le registrazioni.
Hai dimenticato di anteporre ai comandi `sudo`. Se usi `systemctl` dovresti usarlo anche per fermare un servizio con` sudo systemctl stop rsyslog.service`.
Feedback molto buono. Ho aggiornato questa risposta per riflettere entrambi questi commenti.
A proposito, se copi la risposta di qualcun altro di solito è educato farvi riferimento. Ecco, lo farò per te: https://stackoverflow.com/a/32553762/4453048


Questa domanda e risposta è stata tradotta automaticamente dalla lingua inglese. Il contenuto originale è disponibile su stackexchange, che ringraziamo per la licenza cc by-sa 3.0 con cui è distribuito.
Loading...