您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

8 年前
8 年前
7 年前
8 年前
7 年前
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. # Log2Ram
  2. Log2Ram works just like ramlog for systemd (on Debian 8 Jessie for example).
  3. Useful for **RaspberryPi** for not writing on the SD card all the time. You need it because your SD card doesn't want to suffer anymore!
  4. Explanations: The script creates a `/var/log` mount point in RAM. So any writing of the log to the `/var/log` folder will not actually be written to disk (in this case to the SD card on a Raspberry Pi) but directly to RAM. By default, every day the CRON will synchronize the contents in RAM with the folder located on the physical disk. The script will also make this copy of RAM to disk in case of machine shutdowns (but, of course, it still won't do it in case of power failures). This way you can avoid excessive writing on the SD card and extend its life.
  5. [Log2Ram](https://github.com/azlux/log2ram)'s script works on every Linux system. If you don't have Systemd, you can still use Log2Ram with your own daemon manager.
  6. Log2Ram is based on transient /var/log for Systemd. For more information, check [here](https://www.debian-administration.org/article/661/A_transient_/var/log).
  7. _____
  8. ## Table of Contents
  9. 1. [Installation](#installation)
  10. 2. [Is it working?](#is-it-working)
  11. 3. [Upgrading](#upgrading)
  12. 4. [Customization](#customization)
  13. 5. [Troubleshooting](#troubleshooting)
  14. 6. [Uninstallation](#uninstallation-)
  15. ## Installation
  16. ### Via APT (recommended)
  17. ```bash
  18. echo "deb [signed-by=/usr/share/keyrings/azlux-archive-keyring.gpg] http://packages.azlux.fr/debian/ bookworm main" | sudo tee /etc/apt/sources.list.d/azlux.list
  19. sudo wget -O /usr/share/keyrings/azlux-archive-keyring.gpg https://azlux.fr/repo.gpg
  20. sudo apt update
  21. sudo apt install log2ram
  22. ```
  23. ### Manually
  24. ```bash
  25. curl -L https://github.com/azlux/log2ram/archive/master.tar.gz | tar zxf -
  26. cd log2ram-master
  27. chmod +x install.sh && sudo ./install.sh
  28. cd ..
  29. rm -r log2ram-master
  30. ```
  31. For better performances, `RSYNC` is a recommended package.
  32. **REBOOT** before installing anything else (for example `apache2`)
  33. ## Is it working?
  34. After installing and rebooting, use systemctl to check if Log2Ram started successfully:
  35. ```bash
  36. systemctl status log2ram
  37. ```
  38. This will show a color-coded status (green: active/red: failed), as well as the last few log lines. To show the full log (scrolled to the end), run:
  39. ```bash
  40. journalctl -u log2ram -e
  41. ```
  42. The log is also written to `/var/log/log2ram.log`.
  43. You can also inspect the mount folder in RAM with:
  44. ```bash
  45. df -hT | grep log2ram | awk '{print " Name: " $1 "\nMount: " $7 "\n Type: " $2 "\nUsage: " $6 "\n Size: " $3 "\n Used: " $4 "\n Free: " $5}'
  46. ```
  47. Returns:
  48. ```bash
  49. Name: log2ram
  50. Mount: /var/log
  51. Type: tmpfs
  52. Usage: 72%
  53. Size: 128M
  54. Used: 93M
  55. Free: 36M
  56. ```
  57. Or also:
  58. ```bash
  59. mount | grep log2ram | awk -F'[ ()]+' '{print " Name: " $1 "\n Mount: " $3 "\n Type: " $5 "\nOptions: " $6}'
  60. ```
  61. Returns:
  62. ```bash
  63. Name: log2ram
  64. Mount: /var/log
  65. Type: tmpfs
  66. Options: rw,nosuid,nodev,noexec,noatime,size=131072k,mode=755,uid=100000,gid=100000,inode64
  67. ```
  68. If you do not get any line as response of these commands, something is not working. Refer to [this section](#is-it-working).
  69. ## Upgrading
  70. You need to stop Log2Ram (`systemctl stop log2ram`) and execute the [installation](#installation) process. If you used APT, this will be done automatically.
  71. ## Customization
  72. #### Variables
  73. In the file `/etc/log2ram.conf`, there are nine variables:
  74. - `SIZE`: defines the size the log folder will reserve into the RAM (default is `128M`).
  75. - `USE_RSYNC`: (commented out by default = `true`) use `cp` instead of `rsync` (if set to `false`).
  76. - `NOTIFICATION`: disables the notification system mail if there is not enough place in RAM (if set to `false`).
  77. - `NOTIFICATION_COMMAND`: Specify the command for sending error notifications (By default, it uses the `mail` command).
  78. - `PATH_DISK`: activate log2ram for other path than default one. Paths should be separated with a `;`.
  79. - `JOURNALD_AWARE`: enable log rotation for journald logs before syncing. (default is `true`). Check the comment in the config file or the [Troubleshooting](#Troubleshooting) section below for journald SystemMaxUse recommendations.
  80. - `ZL2R`: enable zram compatibility (`false` by default). Check the comment in the config file. See https://github.com/StuartIanNaylor/zram-swap-config to configure a zram space on your raspberry before enabling this option.
  81. - `COMP_ALG`: choose a compression algorithm from those listed in /proc/crypto. (default is `lz4`). See [Compressor](#Compressor) section below for options.
  82. - `LOG_DISK_SIZE`: specifies the uncompressed zram disk size
  83. #### Refresh time
  84. By default, Log2Ram writes to disk every day. If you think this is too much, you can run `systemctl edit log2ram-daily.timer` and for example add:
  85. ```ini
  86. [Timer]
  87. OnCalendar=
  88. OnCalendar=Mon *-*-* 23:55:00
  89. ```
  90. Note:
  91. The ``OnCalendar=`` is important because it disables all existing times (e.g. the default one) for log2ram.
  92. ... Or even disable it altogether with `systemctl disable log2ram-daily.timer`, if you instead prefer Log2Ram to be writing logs only on system stops/reboots.
  93. #### Compressor
  94. Compressor for ZRAM. Useful for the `COMP_ALG` of ZRAM in the config file.
  95. | Compressor name | Ratio | Compression | Decompress. |
  96. |------------------------|----------|-------------|-------------|
  97. |zstd 1.3.4 -1 | 2.877 | 470 MB/s | 1380 MB/s |
  98. |zlib 1.2.11 -1 | 2.743 | 110 MB/s | 400 MB/s |
  99. |brotli 1.0.2 -0 | 2.701 | 410 MB/s | 430 MB/s |
  100. |quicklz 1.5.0 -1 | 2.238 | 550 MB/s | 710 MB/s |
  101. |lzo1x 2.09 -1 | 2.108 | 650 MB/s | 830 MB/s |
  102. |lz4 1.8.1 | 2.101 | 750 MB/s | 3700 MB/s |
  103. |snappy 1.1.4 | 2.091 | 530 MB/s | 1800 MB/s |
  104. |lzf 3.6 -1 | 2.077 | 400 MB/s | 860 MB/s |
  105. ###### Now, muffins for everyone!
  106. ## Troubleshooting
  107. ### Existing content in `/var/log` too large for RAM
  108. One thing that stops Log2Ram from functioning is if `/var/log` is too large before starting Log2Ram the first time. This can happen if logs had been collected for a long time before installing Log2Ram itself. Find the largest directories in `/var/log` (this example command only shows the 3 largest):
  109. ```bash
  110. sudo du -hs /var/log/* | sort -h | tail -n 3
  111. ```
  112. If the `/var/log/journal` is very large, then there are a lot of system logs. Deletion of old "archived" logs can be fixed by adjusting a setting. Edit the `/etc/systemd/journald.conf` file and add the following option:
  113. ```bash
  114. SystemMaxUse=20M
  115. ```
  116. **Or** the more radical version of directly flushing the journal to a size that matches log2ram size imediately _(Be aware that this flish flush the systemd journal logs imediately to the given size!)_
  117. ```bash
  118. journalctl --vacuum-size=32M
  119. ```
  120. This should be set to a value smaller than the size of the RAM volume; for example, half of it could be fine. Then, apply the new setting:
  121. ```bash
  122. sudo systemctl restart systemd-journald
  123. ```
  124. This should shrink the size of "archived" logs to be below the newly imposed limit. Reboot and check that Log2Ram now works properly:
  125. ```bash
  126. sudo reboot
  127. ```
  128. Wait until system reboots...
  129. ```bash
  130. systemctl status log2ram
  131. ```
  132. ## Uninstallation :(
  133. (Because sometimes we need it)
  134. ### Via APT
  135. ```bash
  136. sudo apt remove log2ram
  137. ```
  138. You can add the `--purge` argument to remove Log2Ram config files as well.
  139. ### Manually
  140. ```bash
  141. chmod +x /usr/local/bin/uninstall-log2ram.sh && sudo /usr/local/bin/uninstall-log2ram.sh
  142. ```