投げ銭

★当サイトへの投げ銭(PayPal)★

LINK


(無償、寄付歓迎) logo
世界中で使われるISO標準オフィスソフト(MSオフィス互換)

★LibreOfficeの導入事例★
詳細について

人気の投稿(1ヶ月間)

Ad

Ad

投げ銭

★当サイトへの投げ銭(PayPal)★

2022年2月12日土曜日

【Linux RaspiOS bullseye】Log2Ramを利用してログの記録先(/var/log)をRAM領域に変更した【log2ram 1.6.1】

 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... Done
Building dependency tree... Done
Reading state information... Done
1 package can be upgraded. Run 'apt list --upgradable' to see it.
# apt install log2ram
The following NEW packages will be installed:               
  log2ram
0 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/ssh
8.0K    /var/log/runit
152K    /var/log/apt
4.0K    /var/log/private
105M    /var/log/journal/********************************
105M    /var/log/journal
4.0K    /var/log/asterisk/cdr-csv
4.0K    /var/log/asterisk/cdr-custom
24K     /var/log/asterisk
109M    /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% /dev
tmpfs           1.9G     0  1.9G   0% /dev/shm
tmpfs           768M  1.1M  767M   1% /run
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
/dev/mmcblk0p1  253M   49M  204M  20% /boot
tmpfs           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% /dev
tmpfs           1.9G     0  1.9G   0% /dev/shm
tmpfs           768M  1.1M  767M   1% /run
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
/dev/mmcblk0p1  253M   49M  204M  20% /boot
log2ram         150M   22M  129M  15% /var/log
tmpfs           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/ssh
8.0K    /var/log/runit
152K    /var/log/apt
4.0K    /var/log/private
105M    /var/log/journal/********************************
105M    /var/log/journal
4.0K    /var/log/asterisk/cdr-csv
4.0K    /var/log/asterisk/cdr-custom
24K     /var/log/asterisk
109M    /var/log

# du /var/log -h

(Log2Ramの動作後)
0 /var/log/runit/ssh
0 /var/log/runit
0 /var/log/private
16M /var/log/journal/********************************
16M /var/log/journal
0 /var/log/asterisk/cdr-custom
0 /var/log/asterisk/cdr-csv
16K /var/log/asterisk
144K /var/log/apt
22M /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/ssh
8.0K /var/log/runit
152K /var/log/apt
4.0K /var/log/private
26M /var/log/journal/********************************
26M /var/log/journal
4.0K /var/log/asterisk/cdr-csv
4.0K /var/log/asterisk/cdr-custom
68K /var/log/asterisk
36M /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% /dev
tmpfs           1.9G     0  1.9G   0% /dev/shm
tmpfs           768M  1.1M  767M   1% /run
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
/dev/mmcblk0p1  253M   49M  204M  20% /boot
log2ram          50M   24M   27M  48% /var/log
tmpfs           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/ssh
0 /var/log/runit
0 /var/log/private
14M /var/log/journal/********************************
14M /var/log/journal
0 /var/log/asterisk/cdr-custom
0 /var/log/asterisk/cdr-csv
56K /var/log/asterisk
144K /var/log/apt
24M /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日

投げ銭

★当サイトへの投げ銭(PayPal)★

Ad

Ad