Snok

Snok / systemd-zram-generator

Last active 2 hours ago

Like 0

Snok revised this gist 2 hours ago · 7472c74

1 file changed, 276 insertions

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