Snok

Snok / systemd-zram-generator

Last active 2 hours ago

Like 0

Revision 7472c741e0be17cdf6e0c4ab8297a6e1d4b4f4f0

gistfile1.txt Raw
1#!/bin/bash
2
3set -e
4
5# ============================================================
6# Оптимізація пам'яті Linux
7# zRAM + Swapfile 8 ГБ
8# Debian / Ubuntu
9# ============================================================
10
11SWAPFILE="/swapfile"
12SWAP_SIZE="8G"
13ZRAM_CONFIG="/etc/systemd/zram-generator.conf"
14SYSCTL_CONFIG="/etc/sysctl.d/99-zram-mem.conf"
15
16echo "============================================================"
17echo " Налаштування zRAM + Swapfile"
18echo "============================================================"
19
20# ------------------------------------------------------------
21# 0. Перевірка root
22# ------------------------------------------------------------
23
24if [ "$EUID" -ne 0 ]; then
25 echo "Помилка: скрипт потрібно запускати через sudo."
26 echo
27 echo "Приклад:"
28 echo "sudo $0"
29 exit 1
30fi
31
32# ------------------------------------------------------------
33# 1. Визначення файлової системи
34# ------------------------------------------------------------
35
36echo
37echo "=== 1. Перевірка файлової системи ==="
38
39ROOT_FS=$(findmnt -n -o FSTYPE /)
40
41echo "Файлова система /: $ROOT_FS"
42
43case "$ROOT_FS" in
44 btrfs)
45 echo
46 echo "УВАГА: коренева файлова система Btrfs."
47 echo "Для swapfile потрібні спеціальні налаштування Btrfs."
48 echo "Цей скрипт не буде автоматично створювати swapfile,"
49 echo "щоб не пошкодити систему."
50 echo
51 echo "Вихід."
52 exit 1
53 ;;
54 zfs)
55 echo
56 echo "УВАГА: коренева файлова система ZFS."
57 echo "Звичайний /swapfile для ZFS не рекомендується."
58 echo
59 echo "Вихід."
60 exit 1
61 ;;
62esac
63
64# ------------------------------------------------------------
65# 2. Створення Swapfile
66# ------------------------------------------------------------
67
68echo
69echo "=== 2. Swapfile 8 ГБ ==="
70
71if [ -e "$SWAPFILE" ]; then
72
73 echo "$SWAPFILE вже існує."
74
75 # Перевіряємо, чи це справді swap
76 if file "$SWAPFILE" | grep -qi "swap"; then
77 echo "Файл розпізнано як swap."
78 else
79 echo
80 echo "ПОМИЛКА:"
81 echo "$SWAPFILE існує, але не розпізнаний як swap-файл."
82 echo
83 echo "Щоб не видалити потенційно важливий файл,"
84 echo "скрипт зупинено."
85 exit 1
86 fi
87
88else
89
90 echo "Створюємо swapfile $SWAP_SIZE..."
91
92 # Для ext4/xfs та більшості звичайних файлових систем
93 # fallocate значно швидший за dd.
94 fallocate -l "$SWAP_SIZE" "$SWAPFILE"
95
96 chmod 600 "$SWAPFILE"
97
98 mkswap "$SWAPFILE"
99
100 echo "Swapfile створено."
101
102fi
103
104# ------------------------------------------------------------
105# 3. Додавання Swapfile у /etc/fstab
106# ------------------------------------------------------------
107
108echo
109echo "=== 3. Налаштування /etc/fstab ==="
110
111if grep -qE "^${SWAPFILE}[[:space:]]" /etc/fstab; then
112
113 echo "Запис $SWAPFILE вже є в /etc/fstab."
114
115 # Якщо старий запис без потрібного пріоритету —
116 # замінюємо його.
117 sed -i "\|^${SWAPFILE}[[:space:]]|c\\${SWAPFILE} none swap sw,pri=10 0 0" /etc/fstab
118
119else
120
121 echo "${SWAPFILE} none swap sw,pri=10 0 0" >> /etc/fstab
122
123 echo "Swapfile додано в /etc/fstab."
124
125fi
126
127# ------------------------------------------------------------
128# 4. Активація Swapfile
129# ------------------------------------------------------------
130
131echo
132echo "=== 4. Активація Swapfile ==="
133
134if swapon --show=NAME | grep -qx "$SWAPFILE"; then
135
136 echo "Swapfile вже активний."
137
138else
139
140 echo "Активуємо $SWAPFILE..."
141 swapon -p 10 "$SWAPFILE"
142
143 echo "Swapfile активовано."
144
145fi
146
147# ------------------------------------------------------------
148# 5. Встановлення zram-generator
149# ------------------------------------------------------------
150
151echo
152echo "=== 5. Встановлення systemd-zram-generator ==="
153
154export DEBIAN_FRONTEND=noninteractive
155
156apt update
157apt install -y systemd-zram-generator
158
159echo "systemd-zram-generator встановлено."
160
161# ------------------------------------------------------------
162# 6. Конфігурація zRAM
163# ------------------------------------------------------------
164
165echo
166echo "=== 6. Налаштування zRAM ==="
167
168cat > "$ZRAM_CONFIG" <<'EOF'
169[zram0]
170zram-size = ram * 1
171compression-algorithm = zstd
172swap-priority = 100
173fs-type = swap
174EOF
175
176echo "Створено:"
177echo "$ZRAM_CONFIG"
178
179echo
180echo "Параметри:"
181echo " Розмір : 100% від RAM"
182echo " Алгоритм : zstd"
183echo " Пріоритет : 100"
184
185# ------------------------------------------------------------
186# 7. Налаштування параметрів ядра
187# ------------------------------------------------------------
188
189echo
190echo "=== 7. Налаштування параметрів пам'яті ==="
191
192cat > "$SYSCTL_CONFIG" <<'EOF'
193# Оптимізація роботи пам'яті з zRAM
194vm.swappiness = 100
195vm.vfs_cache_pressure = 50
196EOF
197
198sysctl --system
199
200echo
201echo "vm.swappiness:"
202sysctl -n vm.swappiness
203
204echo
205echo "vm.vfs_cache_pressure:"
206sysctl -n vm.vfs_cache_pressure
207
208# ------------------------------------------------------------
209# 8. Активація / оновлення zRAM
210# ------------------------------------------------------------
211
212echo
213echo "=== 8. Активація zRAM ==="
214
215systemctl daemon-reload
216
217if systemctl is-active --quiet systemd-zram-setup@zram0.service; then
218
219 echo "zRAM вже активна."
220 echo "Перезапускаємо для застосування нової конфігурації..."
221
222 systemctl restart systemd-zram-setup@zram0.service
223
224else
225
226 echo "Створюємо zRAM..."
227
228 systemctl start /dev/zram0
229
230fi
231
232# ------------------------------------------------------------
233# 9. Перевірка
234# ------------------------------------------------------------
235
236echo
237echo "============================================================"
238echo " РЕЗУЛЬТАТ"
239echo "============================================================"
240
241echo
242echo "--- Swap ---"
243swapon --show
244
245echo
246echo "--- zRAM ---"
247zramctl
248
249echo
250echo "--- Пам'ять ---"
251free -h
252
253echo
254echo "--- Swappiness ---"
255sysctl vm.swappiness
256
257echo
258echo "--- Cache pressure ---"
259sysctl vm.vfs_cache_pressure
260
261echo
262echo "--- Стан zRAM service ---"
263systemctl --no-pager --full status systemd-zram-setup@zram0.service 2>/dev/null || true
264
265echo
266echo "============================================================"
267echo " ГОТОВО"
268echo "============================================================"
269
270echo
271echo "Очікувано:"
272echo " zRAM -> priority 100"
273echo " swapfile -> priority 10"
274echo
275echo "zRAM використовується першою, swapfile — як резерв."
276echo