Темата е интересна за тези ползващи преносими компютри, които често им се налага да "заспиват". Всичко би се оправило със създаване на отделен дял за тази цел, но ние ще се постараем да използваме по-нови методи. Първо дисковете които се ползват са SSD, а те са с по-кратък живот на четене/запис. Поради тази причина се ползва zram като технология за SWAP. ZRam се използва за swap, когато искате да увеличите капацитета на оперативната памет (RAM) чрез компресия, без да използвате бавния хард диск или SSD. Това създава виртуален swap сектор директно в самата RAM памет. Когато системата започне да се пълни, тя не изпраща данните към диска, а ги компресира в ZRam устройството, което спестява място и работи изключително бързо. Всичко изглежда прекрасно до момента когато системата трябва да заспи. В този случай е необходима хибернация, а класическия ZRam не върши работа. За хибернацията се изисква физическо дисково пространство. За по-нагледно нека предположим, че имаме 16GB RAM и някакъв процесор (примерно Intel i7). Това са чисто хипотетични числа. Изхождайки от горните условия стъпките които ще изпълним са: ● Създаваме основен Swap дял или файл върху диска (с размер около 17-20 GB, за да събере 16GB RAM + кеша при хибернация). ● Създаваме zRAM с по-висок приоритет (за да може системата да ползва бързата компресирана памет в ежедневието и да записва на диска само при хибернация или краен недостиг на RAM).
Тъй като вече имате инсталирана система, най-лесно е да се създаде SWAP файл на диска (вместо да се преоразмерява дяла). Създаване на празен файл с размер 20 GB (препоръчително за 16GB RAM):
sudo dd if=/dev/zero of=/swapfile bs=1G count=20 status=progress
След това трябва да се дефинират правилни права за сигурност.
sudo chmod 600 /swapfile
Формиране като SWAP.
sudo mkswap /swapfile
Активиране на SWAP-a.
sudo swapon /swapfile
SWAP-a е готов. Да го опишем в /etcfstab.
echo '/swapfile none swap defaults,pri=1 0 0' | sudo tee -a /etc/fstab
Забележка: Задаваме нисък приоритет pri=1, за да може zRAM да се ползва с предимство
За да знае ядрото (kernel) откъде да прочете данните при събуждане от хибернация, ни трябват UUID на диска и offset (отместването) на swap файла.
Намерете UUID на основния ви дял (където е /swapfile):
findmnt -no UUID -T /swapfile
Запишете си този дълъг низ, например: 1234abcd-56ef-78gh-... Намерете offset на файла:
sudo filefrag -v /swapfile | awk '{if($1=="0:") print substr($4, 1, length($4)-2)}'
Запишете си полученото число, например: 34528 Редактирайте GRUB конфигурацията:
sudo nano /etc/default/grub # GRUB_CMDLINE_LINUX_DEFAULT="loglevel=3 quiet" GRUB_CMDLINE_LINUX_DEFAULT="quiet splash resume=UUID=ВАШИЯТ_UUID_ТУК resume_offset=ВАШИЯТ_OFFSET_ТУК"
След това GRUB трябва да се обнови.
sudo grub-mkconfig -o /boot/grub/grub.cfg
Следва Initramfs.
sudo nano /etc/mkinitcpio.conf HOOKS=(base udev autodetect microcode modconf kms keyboard keymap consolefont block resume filesystems fsck)
Генерираме наново Initramfs.
sudo mkinitcpio -P
За най-лесно управление на zRAM в Arch Linux се използва пакетът zram-generator.
sudo pacman -S zram-generator
Създаme конфигурационен файл /etc/systemd/zram-generator.conf.
sudo nano /etc/systemd/zram-generator.conf [zram0] zram-size = ram compression-algorithm = zstd swap-priority = 100
Тази настройка създава zRAM с размер 16GB (равен на вашата RAM) и с приоритет 100. Тъй като физическият swap файл има приоритет 1, системата винаги ще пълни първо zRAM, а диска ще ползва само за хибернация. Стартираме услугата.
sudo systemctl daemon-reload sudo systemctl start systemd-zram-setup@zram0.service
Проверяваме дали всичко работи.
zramctl swapon --show
Трябва да виждате и двете устройства, като zram0 е с по-висок приоритет.
След като бекендът е готов, трябва да кажете на KDE да показва бутона за Хибернация. 1. Отидете в System Settings (Системни настройки) -> Power Management (Управление на захранването) -> Energy Saving. 2. Вече трябва да виждате опция "Hibernate" при затваряне на капака или натискане на бутона за включване. 3. Ако бутонът липсва в старт менюто, проверете дали Polkit не го блокира. Обикновено в Arch и KDE, ако ядрото поддържа хибернация, бутонът се появява автоматично след рестарт. Тествайте хибернацията ръчно през терминала:
systemctl hibernate
Лаптопът трябва да изключи напълно. При повторно включване системата трябва да зареди директно в KDE Plasma със записваните отворени прозорци.
Ако използвате systemd-boot вместо GRUB, процедурата се променя единствено в начина, по който предавате параметрите на ядрото (kernel parameters). Всичко останало (UUID, offset на файла и промяната в mkinitcpio.conf) остава абсолютно същото. Много важен момент!. Трябва да знаете къде е активната конфигурация за зареждане. Ето как да настроите systemd-boot за хибернация: 1. Намерете активната конфигурация на зареждане. Конфигурационните файлове на systemd-boot се намират в EFI дяла ви, обикновено в директорията /boot/loader/entries/. Там ще намерите един или повече .conf файлове (например arch.conf). Отворете активния конфигурационен файл, ако няма го създадете:
sudo nano /boot/loader/entries/arch.conf title Arch Linux linux /vmlinuz-linux initrd /intel-ucode.img initrd /initramfs-linux.img options root=UUID=ВАШ_ROOT_UUID rw quiet splash resume=UUID=ВАШ_ROOT_UUID resume_offset=ВАШ_OFFSET sudo nano /boot/loader/loader.conf timeout 3 default arch.conf # console-mode keep
(По избор) Ако използвате sd-vconsole или systemd куки Тъй като използвате systemd-boot, е много вероятно в /etc/mkinitcpio.conf на реда HOOKS=(...) вместо udev да използвате systemd. * Ако ползвате udev подредба: добавете resume (както е описано в предния отговор). * Ако ползвате systemd подредба: вместо resume, трябва да добавите куката systemd (тя вече трябва да е там), а самата хибернация ще се управлява автоматично от нея. Няма нужда да добавяте нищо допълнително в реда HOOKS. За всеки случай, след промяната на .conf файла, генерирайте отново initramfs имиджите:
sudo mkinitcpio -P
При systemd-boot няма нужда от команда за обновяване (като grub-mkconfig). Промените влизат в сила веднага след записването на файла. Можете да рестартирате лаптопа и да тествате хибернацията.
Ако използвате по-новата практика с Unified Kernel Images (UKI), няма да намерите отделен .img файл. Вместо това ще имате файл с разширение .efi (например arch-linux.efi), който съдържа в себе си и ядрото, и initramfs. Той се намира в: /efi/EFI/Linux/ или /boot/EFI/Linux/.
sudo nano /boot/loader/entries/arch-hiber.conf title Arch Linux (Hibernation) linux /EFI/Linux/arch-linux.efi options root=UUID=ВАШ_ROOT_UUID rw quiet splash resume=UUID=ВАШ_ROOT_UUID resume_offset=ВАШ_OFFSET
swapon --show NAME TYPE SIZE USED PRIO /swapfile file 4G 0B 1 /dev/zram0 partition 3.8G 0B 100