
Zaslal: čt 26. květen 2016 18:29 Předmět:
Pozor! Tento příspěvek obsahuje Linuxové příkazy a jeho čtení může vést k poškození mozku!
Tak jestli mi zase na Raspberry zhavaruje karta, tak už nevim, co s tím, protože nevím, jak omezit zápisy na kartu víc než jak jsem to teď udělal.
Kdyby někdo potřeboval... Třeba někdo z Googlu, místní to asi nevyužijí
***
Do
/etc/fstab jsem přidal řádek
kód: tmpfs /tmp tmpfs defaults,nodev,nosuid,noexec,noatime,mode=1777,size=20m 0 0
takže složka /tmp je v ramdisku. Zapisuju si tam různé dočasné pitomosti jako třeba teploty, než se uploadujou na web, apod.
***
Všechny obrázky z kamery ukládám na flešku, kterou připojuju do /mnt/usb, takže mi vybuchne maximálně ta stoletá fleška a ne paměťovka se systémem.
Linux má takovou skvělou featuru, že kdybych flešku třeba odpojil nebo vybouchla, tak se fleška nepřipojí a systém bude soubory zapisovat do složky /mnt/usb na systémové kartě. Naštěstí se takovému zapisování dá zabránit pomocí
kód: sudo chattr +i /mnt/usb/
Při spuštění toho příkazu nesmí být fleška připojená.
To na složku přidá nějaké oprávnění immutable a když tam není nic připojeného, tak tam nejde zapsat.
***
Víte, co zapisuje na kartu nejvíc, v čerstvě nainstalovaném systému? Logy! Nejspíš jdou nějak vypnout, ale můžou se hodit při řešení nenadálých problémů. Do RAM s nimi. Sice o ně při restartu/pádu systému přijdu, ale tak aspoň můžu žít v domění, že tam byly, než to havarovalo.
Dostat logy do ramdisku není tak jednoduché, jak by se mohlo zdát.
Když se udělá obyčejně mount jako mám nahoře u /tmp, tak mi část programů odmítla nastartovat, že nemají složku /var/log/*program*/. Zkusil jsem nějako utilitku která to má obcházet, která se jmenuje ramlog, ale to mi odmítlo fungovat.
Nakonec jsem přišel s geniálním skriptem, ze kterého by si každý kovaný linuxák asi hodil mašli.
V mém příkladu je umístěný v
/home/pi/logtoram.sh (nezapomenout oprávnění ke spuštění: chmod +x logtoram.sh)
kód: #!/bin/bash
case "$1" in
stop)
rsync -a -u --del --force --include '*/' --exclude '*' /var/log/. /var/log-hdd/
umount /var/log
;;
*)
mount -t tmpfs -o defaults,noatime,nosuid,nodev,noexec,mode=0755,size=10m tmpfs /var/log
cp -afr /var/log-hdd/. /var/log/
esac
Protože mám Raspbian se systemd (už to je pro část linuxáků důvod k té mašli), vytvoří se k tomu ještě konfigurák pro systemd v
/etc/systemd/system/logtoram.service
kód: [Unit]
Description=Log to ramdisk
Before=rsyslog.service
[Service]
Type=oneshot
ExecStart=/home/pi/logtoram.sh
ExecStop=/home/pi/logtoram.sh stop
RemainAfterExit=yes
[Install]
WantedBy=rsyslog.service
Před jeho prvním použitím je potřeba spustit
kód: sudo rsync -a -u --del --force --include '*/' --exclude '*' /var/log/. /var/log-hdd/
A pak ještě povolit v systemd
kód: sudo systemctl daemon-reload
sudo systemctl status logtoram.service
(To první možná není potřeba)
A tahle vychytávka vytvoří složku /var/log-hdd, ve které jsou všechny prázdné složky, do kterých všechny programy logujou.
Když se spustí systém, připojí se ramdisk na /var/log a ze složky /var/log-hdd si nakopíruje adresářovou strukturu, takže programy nepláčou, že nemají složku. A když se systém ukončuje, rsync nasynchronizuje jen složky z log zpátky do log-hdd.
Jo, je k tomu potřeba rsync. A při restartu přijdete o logy. Ale nepřijdete o paměťovku.
Ten řádek rsync v logtoram.sh se dá upravit, aby to nekopírovalo jen složky, ale i ty logy, pokud o ně nechcete při řádném vypnutí přijít. Ale nevím jak, ten příkaz jsem vygooglil.