# Зберігання журналів Linux в RAM

Я тут недавно вимкнув SELinux і був не очікувано здивований приростом швидкості системи - адже цей "захист" постійно індексує ноди файлової системи і якщо на SSD цим можна знехтувати, то на HDD це перетворюється в пекло, особливо під час активної роботи з масивними репозиторіями Git.

Детальніше про вимкнення (на фоні енергетичної кризи) я описував одному з пунктів матеріалу:
=> power-optimization-on-linux.gmi Оптимізація швидкодії та енергоефективності GNOME / Linux

Отже, свій комп'ютер я оптимізував доволі фундаментально, HDD перестав фонити (звук якого для мене став найкращим індикатором того, що з системою щось в біса не так) а на іншому компі - SSD матиме довший термін служби. Тим не менше, залишився ще один момент, про який я знав, але довго відкладав. Ось коротенька довідка що я робив для перенесення журналів до оперативної пам'яті: бо на десктопі - переглядаю ці логи хіба в рамках поточної сесії.

В сучасній Fedora / Linux є два базові різновиди журналів:

## journald

Сучасний, бінарний формат журналювання. Переноситься в пам'ять відносно просто:

``` /usr/lib/systemd/journald.conf
[Journal]
Storage=volatile
RuntimeMaxUse=512M
```

Застосування змін:

``` bash
sudo systemctl restart systemd-journald
```

## rsyslog

Класичний варіант текстових журналів. Тут я підміняю системний /var/log на змонтований в нього tmpfs:
=> https://en.wikipedia.org/wiki/Tmpfs

* перш, як продовжити, я б радив за цим розташуванням почистити диск (зупинивши сервіси)

``` /etc/fstab
tmpfs /var/log tmpfs defaults,noatime,nofail,mode=0777,size=512M 0 0
```
* розмір і файлову систему обирайте самостійно: їх там багато, але я зупинився на добре знайомій мені `tmpfs` (яка передбачає атрибути і swap при виході за межі `size`)
* при використанні `tmpfs`, фізична пам'ять використовується по мірі заповнення (тобто з 512M, більша її частина буде фактично вільною)

В рамках поточної сесії, змонтуватись можна командою:

``` bash
mount -a
```
* інакше зміни застосуються після рестарту системи
* атрибут `nofail` - допоможе не брикнути завантажувач у разі помилки монтування або несправності носія (у цьому випадку - планки пам'яті)

### Ініціація розташувань

Багато програм (в т.ч. і моїх) не створюють кінцеві точки журналювання, тому для них потрібно заздалегідь створити теки з відповідними правами:

``` /etc/tmpfiles.d/var-log-structure.conf
# Тип  Шлях                       Права  Користувач  Група                   Час_життя
d      /var/log/audit             0750   root        root                    -
d      /var/log/dbus              0755   root        root                    -
d      /var/log/gdm               0711   root        gdm                     -
d      /var/log/journal           0755   root        systemd-journal         -
d      /var/log/lastlog           0664   root        utmp                    -
d      /var/log/libvirt           0755   root        root                    -
d      /var/log/lightdm           0711   root        root                    -
d      /var/log/ppp               0750   root        root                    -
d      /var/log/samba             0755   root        root                    -
d      /var/log/sssd              0750   root        root                    -
d      /var/log/swtpm             0750   tss         tss                     -
d      /var/log/glusterfs         0755   root        root                    -

# Створення порожніх файлів для системних звітів
f      /var/log/wtmp              0664   root        utmp                    -
f      /var/log/btmp              0660   root        utmp                    -
f      /var/log/lastlog           0664   root        utmp                    -

# Інше
d      /var/log/psocks     0755   psocks             psocks                  -
d      /var/log/ytd        0755   ytd                ytd                     -
```
* цей приклад я видер з ШІ, на перший погляд він ОК і після ребуту на Fedora 43 працює, але будьте уважні
* останні два пункти - це залежності мого юзерського софту, які я думаю перемістити до юніта systemd

Застосування змін:

``` bash
sudo systemd-tmpfiles --create
```

## Бонус

По аналогії, можна відправити в пам'ять будь яку теку: наприклад як мені нагадали, `~/.cache`
=> https://devzone.org.ua/post/zberihannia-zurnaliv-linux-v-ram#comment-448

На мою думку, її варто робити тимчасовою вибірково - адже деякі програми будуть надмірно навантажувати CPU при генерації індексів, прев'ю зображень та іншого кешу після рестарту системи. До того ж тека займає чимало місця і може потребувати від 5-20G RAM, інакше дані все одно підуть на диск, зповільнивши роботу основних програм.

Кому цікавий такий напрямок:

``` /etc/fstab
tmpfs /home/USER/.cache tmpfs defaults,noatime,nofail,mode=0700,uid=1000,gid=1000,size=4G 0 0
```
* `USER` - поточний користувач
* `uid=1000,gid=1000` - дивимось командою `id USER`

На Wayland/Fedora, після цього в деяких програмах відпала клавіатура. Повернув її так:

### Firefox

Актуально лише для старого ESR 115:
=> my-personal-i2pdbrowser-fork-for-privacy-oriented-web.gmi Мій форк i2pdbrowser для приватно-орієнтованого Веб

``` .desktop
Exec=env MOZ_ENABLE_WAYLAND=1 firefox
```

### Codium

``` .desktop
Exec=/usr/share/codium/codium --ozone-platform=wayland %F
```