Raspberry pi 4 (4GB)に、Raspberry pi OS(32bit)を導入した。
OSのバージョンは、2021-10-30-raspios-bullseye-armhf-lite である。
通常通り、microSDを使用している。
次のページに記載の手順でシステムを準備した。
このRaspberry piによるシステムの運用に際して、SDカードの書き込み寿命が気になった。
いくら耐久性の高いカードを用いたとしても、刻々とログが書き込まれることを考えると、不安である。
そこで、「/var/log」のパーティションとしてRAM領域が使用されるようにした。
これを実現する方法として、「Log2Ram」というパッケージを用いることにした。
1、Log2Ramは、システム起動時に自動的に動作して、SDに保存されている「/var/log」の内容を、確保したRAM領域に保存し「/var/log」にマウントしなおす。
2、以後、システムのログシステムはRAM領域にログを刻むことになる。
3、システムの終了時や、Log2Ramの終了時、設定で指定したタイミングで、それまでRAM領域に保存されていた内容は、SDに保存され永続化される。
このようなライフサイクルを繰り返す。
以下はこの「Log2Ram」の導入手順と動作テストについて記述してある。
■ rootユーザーに切り替えた。
root@raspberrypi:/home/pi# su
■ Log2Ramのインストール
◯リポジトリの設定
# echo "deb [signed-by=/usr/share/keyrings/azlux-archive-keyring.gpg] http://packages.azlux.fr/debian/ bullseye main" | sudo tee /etc/apt/sources.list.d/azlux.list
deb [signed-by=/usr/share/keyrings/azlux-archive-keyring.gpg] http://packages.azlux.fr/debian/ bullseye main
# wget -O /usr/share/keyrings/azlux-archive-keyring.gpg https://azlux.fr/repo.gpg
(10.7 MB/s) - '/usr/share/keyrings/azlux-archive-keyring.gpg' saved [2255/2255]
◯パッケージのインストール
上記で設定したリポジトリからパッケージを導入する。
# apt update
Get:1 http://archive.raspberrypi.org/debian bullseye InRelease [23.5 kB]Get:2 http://raspbian.raspberrypi.org/raspbian bullseye InRelease [15.0 kB]Get:3 http://packages.azlux.fr/debian bullseye InRelease [3988 B]Get:4 http://raspbian.raspberrypi.org/raspbian bullseye/main armhf Packages [13.2 MB]Get:5 http://archive.raspberrypi.org/debian bullseye/main armhf Packages [249 kB]Get:6 http://packages.azlux.fr/debian bullseye/main armhf Packages [3427 B]Fetched 13.5 MB in 10s (1384 kB/s)Reading package lists... DoneBuilding dependency tree... DoneReading state information... Done1 package can be upgraded. Run 'apt list --upgradable' to see it.
# apt install log2ram
The following NEW packages will be installed:log2ram0 upgraded, 1 newly installed, 0 to remove and 1 not upgraded.Need to get 4204 B of archives.After this operation, 0 B of additional disk space will be used.Get:1 http://packages.azlux.fr/debian bullseye/main armhf log2ram all 1.6.1 [4204 B]<略>Unpacking log2ram (1.6.1) ...Setting up log2ram (1.6.1) ...Created symlink /etc/systemd/system/sysinit.target.wants/log2ram.service → /etc/systemd/system/log2ram.service.Created symlink /etc/systemd/system/timers.target.wants/log2ram-daily.timer → /etc/systemd/system/log2ram-daily.timer.##### Reboot to activate log2ram ########## edit /etc/log2ram.conf to configure options ####
■Log2Ramの設定
◯サービスが有効になっているか確認した。
# systemctl is-enabled log2ram
enabled
◯Log2Ramが使用するRAMの容量を設定した。
次のduコマンドの結果から、/var/logのサイズが、109MBだとわかった。
これはほとんど、 /var/log/journal が占めている容量である。
# du /var/log -h
4.0K /var/log/runit/ssh8.0K /var/log/runit152K /var/log/apt4.0K /var/log/private105M /var/log/journal/********************************105M /var/log/journal4.0K /var/log/asterisk/cdr-csv4.0K /var/log/asterisk/cdr-custom24K /var/log/asterisk109M /var/log
そのため、この現状に合わせて次のように確保容量を次のように再設定した。
# nano /etc/log2ram.conf
(関係する部分のみ抜粋)
# Size for the ram folder, it defines the size the log folder will reserve into the RAM.# If it's not enough, log2ram will not be able to use ram. Check you /var/log size folder.# The default is 40M and is basically enough for a lot of applications.# You will need to increase it if you have a server and a lot of log for example.SIZE=150M
これに関して、後でわかったことだが、/var/logよりもRamの確保容量が小さい場合、次のエラーが発生してLog2Ramは動作しなかった。
log2ram[299]: ERROR: RAM disk for "/var/hdd.log/" too small. Can't sync.
◯RamDiskからSDカードへの「定期的」な書き戻しは行わないようにした。
これを設定すると、突然の電源遮断によりログがごっそりと消滅してしまう危険がある。
そのため、この設定は必要に応じて行うべきである。
# systemctl disable log2ram-daily.timer
Removed /etc/systemd/system/timers.target.wants/log2ram-daily.timer
以上で基本的な設定は完了した。
(他にも有用な設定があるので、参考サイトを参照してください。)
後は、システムを再起動するか、log2ramをsystemctlでstartするだけで、Log2Ramは機能する。
■ Log2Ramの動作確認
◯Log2Ramの動作前後でのdfコマンドの結果の違いを確認した。
再起動前、Log2Ramが動作する前は次のような状態だった。
# df -h
(Log2Ramが動作する前の状態)
Filesystem Size Used Avail Use% Mounted on/dev/root 29G 1.5G 27G 6% /devtmpfs 1.8G 0 1.8G 0% /devtmpfs 1.9G 0 1.9G 0% /dev/shmtmpfs 768M 1.1M 767M 1% /runtmpfs 5.0M 4.0K 5.0M 1% /run/lock/dev/mmcblk0p1 253M 49M 204M 20% /boottmpfs 384M 0 384M 0% /run/user/1000
・システムの再起動
# reboot
再起動後、Log2Ramは動作することになる。
そして先程と同様に、dfコマンドの結果を確認した。
# df -h
(Log2Ramの動作後の状態)
Filesystem Size Used Avail Use% Mounted on/dev/root 29G 1.5G 27G 6% /devtmpfs 1.8G 0 1.8G 0% /devtmpfs 1.9G 0 1.9G 0% /dev/shmtmpfs 768M 1.1M 767M 1% /runtmpfs 5.0M 4.0K 5.0M 1% /run/lock/dev/mmcblk0p1 253M 49M 204M 20% /bootlog2ram 150M 22M 129M 15% /var/logtmpfs 384M 0 384M 0% /run/user/1000
log2ramの領域として、指定したとおり150MBが確保され、/var/logにマウントされていた。
そのうち、22MBが使用されていることがわかった。
(ところで、初めに、/var/logは109MB専有していたのに、log2ramが動作後は、22MBに急減したのか。これについては後で考察した。)
Log2Ramが動作していることは次のコマンドの結果からも確認できた。
# mount
一部のみ抜粋
log2ram on /var/log type tmpfs (rw,nosuid,nodev,noexec,noatime,size=153600k,mode=755)
tmpfsが使用されていることがわかった。
■ journaldの動作について
少し上のところで疑問が生じたように、Log2Ramの動作前後で、/var/logの使用容量が109MBから22MBに急減したのか。
/var/logが占めている容量について、Log2Ramの動作前後で確認したものを再掲する。
# du /var/log -h
(Log2Ramの動作前)
4.0K /var/log/runit/ssh8.0K /var/log/runit152K /var/log/apt4.0K /var/log/private105M /var/log/journal/********************************105M /var/log/journal4.0K /var/log/asterisk/cdr-csv4.0K /var/log/asterisk/cdr-custom24K /var/log/asterisk109M /var/log
# du /var/log -h
(Log2Ramの動作後)
0 /var/log/runit/ssh0 /var/log/runit0 /var/log/private16M /var/log/journal/********************************16M /var/log/journal0 /var/log/asterisk/cdr-custom0 /var/log/asterisk/cdr-csv16K /var/log/asterisk144K /var/log/apt22M /var/log
このように、/var/log/journal の占める領域が、105MBだったのが16MBばかりに減ったことがわかる。
/var/log/journalは、journaldが全てのログを刻々とバイナリ保存している場所である。
journaldは、保存先ディレクトリのディスク空き容量の一部のみを使用するように制御されている。
別のディストリビューションのArchLinuxの場合は、/var/log/journalのあるパーティションの10%だけが使用されるらしい。
◯そこで、次のように実験してみた。
今、次のように、/var/log/journal/ が占める容量は約26MBである。
root@raspberrypi:/home/pi# du /var/log -h
4.0K /var/log/runit/ssh8.0K /var/log/runit152K /var/log/apt4.0K /var/log/private26M /var/log/journal/********************************26M /var/log/journal4.0K /var/log/asterisk/cdr-csv4.0K /var/log/asterisk/cdr-custom68K /var/log/asterisk36M /var/log
これは、次のコマンドを使ってもわかる。
root@raspberrypi:/home/pi# journalctl --disk-usage
Archived and active journals take up 25.5M in the file system.
次に、Log2Ramが確保するRAM容量を、50MBに減らした。
これによって、journaldが使用できる容量は制限される。
root@raspberrypi:/home/pi# nano /etc/log2ram.conf
(関係する部分のみ表示)
SIZE=50M
ここで、システムを再起動し、Log2Ram、journaldを再起動した。
root@raspberrypi:/home/pi# reboot
再起動後、次のように、Log2Ramが確保した50MB領域が/var/logにマウントされていることを確認した。
root@raspberrypi:/home/pi# df -h
Filesystem Size Used Avail Use% Mounted on/dev/root 29G 1.5G 27G 6% /devtmpfs 1.8G 0 1.8G 0% /devtmpfs 1.9G 0 1.9G 0% /dev/shmtmpfs 768M 1.1M 767M 1% /runtmpfs 5.0M 4.0K 5.0M 1% /run/lock/dev/mmcblk0p1 253M 49M 204M 20% /bootlog2ram 50M 24M 27M 48% /var/logtmpfs 384M 0 384M 0% /run/user/1000
そして、journaldによるログサイズを確認した。
25MBだったものが、13.6MBにまで減っていた。
root@raspberrypi:/home/pi# journalctl --disk-usage
Archived and active journals take up 13.6M in the file system.
これは、duコマンドの内容と一致した。
root@raspberrypi:/home/pi# du /var/log -h
0 /var/log/runit/ssh0 /var/log/runit0 /var/log/private14M /var/log/journal/********************************14M /var/log/journal0 /var/log/asterisk/cdr-custom0 /var/log/asterisk/cdr-csv56K /var/log/asterisk144K /var/log/apt24M /var/log
このように、/var/logの空き容量によって、journaldが使用できる容量が変化することがわかかった。
Log2Ramを導入する前は、/var/logはルートディレクトリと同じパーティションにあったため、より多くの領域を使用することができた。
そのため、最初に示したとおり、/var/log/journalは、105MBもの容量を専有できていた。
しかし、Log2Ramを導入した後は、RAM領域の150MBのみが/var/log/にマウントされたため、journaldが使用できるディスク容量は急減し、/var/log/journalが占める容量は105MBから16MBまで小さくされたと考えられる。journaldがこれら削減の作業を行ったと考えられる。
<参考>
◆「Log2Ramについて」
・azlux/log2ram
< https://github.com/azlux/log2ram > 2022年2月11日
・How To Write Log Files In RAM Using Log2ram In Linux
< https://ostechnix.com/how-to-write-log-files-in-ram-using-log2ram-in-linux/ > 2022年2月10日
・Using Log2RAM on the Raspberry Pi
< https://pimylifeup.com/raspberry-pi-log2ram/ > 2022年2月10日
・How log2ram works.
< https://linuxfun.org/en/2021/01/01/what-log2ram-does-en/ > 2022年2月10日
・Log2Ram: Extending SD Card Lifetime for Raspberry Pi LoRaWAN Gateway
< https://mcuoneclipse.com/2019/04/01/log2ram-extending-sd-card-lifetime-for-raspberry-pi-lorawan-gateway/ > 2022年2月10日
・Improve system performance by moving your log files to RAM Using Ramlog
< http://www.ubuntugeek.com/improve-system-performance-by-moving-your-log-files-to-ram-using-ramlog.html > 2022年2月10日
◆「 systemd journalについて」
・A Guide to systemd journal Maintenance [With Examples]
< https://www.debugpoint.com/2021/01/systemd-journald-clean/ > 2022年2月12日
・Arch Linux - journalctl ログの最大サイズを設定
< https://b.fugenjikko.com/archlinux/archlinux-journal-maxsize > 2022年2月12日
・CentOS 7のログ管理「journald」
< https://thinkit.co.jp/story/2014/12/18/5389?page=0%2C1 > 2022年2月12日
◆「tmpfsについて」
・Linux豆知識 111 / tmpfs
< https://linuc.org/study/knowledge/441/ > 2022年2月12日