Много често ще забележите, че вече не се заделя SWAP дял, а се ползва това пространство във вид на файл. Ще се постарая да покажа няколко начина за това решение. Първия въпрос, който винаги произлиза е за размера. ● за сървъри до 4GB RAM - SWAP >= от 2GB до размера на RAM-а ● за сървъри над 4GB RAM - SWAP = 4GB ● за работни станции - SWAP-a >= 1.5*RAM-a, защото компютъра влиза в режим хибернация Следващия въпрос е къде да е разположен. ● ако е във вид на дял, то той трябва да е последен, защото рядко се използва, а за дискове с въртящ механизъм най-отзад скоростта на четене/запис е най-малка ● ако е във вид на файл, то тогава където се падне.
Както споменах по-горе дяла трябва да е разположен най-отзад. Това се отнася за дискове с въртящ механизъм. За SSD дискове този проблем не важи, защото където и да е разположен дяла, скоростта на четене/запис е една и съща. При дискове с въртящ механизъм, колкото дяла е по-далеч от оста на въртене толкова скоростта на четене/запис е по-малка. И тъй като се обръщаме рядко към SWAP-a то не се изисква голяма скорост и затова го разполагаме най-отзад.
Тук имаме за задача да създадем SWAP област във вид на файл.
Нямаме дял за swap, затова ще го дефинираме по друг начин (като файл).
free -h total used free shared buff/cache available Mem: 3.8Gi 306Mi 3.6Gi 644Ki 98Mi 3.5Gi Swap: 0B 0B 0B cat /proc/meminfo | grep Swap SwapCached: 0 kB SwapTotal: 0 kB SwapFree: 0 kB cat /proc/swaps /usr/sbin/swapon --show ### Няма нищо
Да създадем SWAP файл.
dd if=/dev/zero of=/swapfile bs=1MB count=4096 4096+0 records in 4096+0 records out 4096000000 bytes (4.1 GB, 3.8 GiB) copied, 7.88359 s, 520 MB/s
if=/dev/zero - входен, специален файл, връща толкова 0, колкото изисква операцията за четене of=/swapfile - изходен файл за съхранение на SWAP. Обичайна практика е да се слага в основната папка. bs=1MB - размер на блока count=1024 - определя колко блока да се копират bs*count = размера на SWAP файла, в случая е 1M*4096=4096MB=4GB.
Дефинираме root какви права ще има за четене и запис върху swap файла.
chmod 600 /swapfile ls -l / | grep swapfile -rw-r--r-- 1 root root 4096000000 Jun 15 09:44 swapfile
Създадохме swap файл но трябва да го маркираме като swap пространство в паетта на Linux.
/usr/sbin/mkswap /swapfile mkswap: /swapfile: insecure permissions 0644, fix with: chmod 0600 /swapfile Setting up swapspace version 1, size = 3.8 GiB (4095995904 bytes) no label, UUID=6bb3644a-6eb7-424a-a95a-9b0ca25caf59
Да активираме SWAP-a.
/usr/sbin/swapon /swapfile swapon: /swapfile: insecure permissions 0644, 0600 suggested.
Да проверим какво създадохме.
/usr/sbin/swapon --show NAME TYPE SIZE USED PRIO /swapfile file 3.8G 0B -2
Имаме SWAP. Проблема е, че при рестарт на системата ще изчезне.
nano /etc/fstab
#
След рестарта да проверим:
/usr/sbin/swapon --show NAME TYPE SIZE USED PRIO /swapfile file 3.8G 0B -2
Всичко е наред.
Идеята е както в горния случай, но за да генерираме файл ще ползваме приложение.
apt install zram-tools lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS sr0 11:0 1 1024M 0 rom zram0 253:0 0 256M 0 disk [SWAP] nvme0n1 259:0 0 55G 0 disk ├─nvme0n1p1 259:1 0 487M 0 part /boot/efi └─nvme0n1p2 259:2 0 54.5G 0 part /var/lib/lxd/storage-pools/mypool /home /
Имаме SWAP област. Размера обаче не е правилен. Затова:
nano /etc/default/zramswap # Compression algorithm selection #ALGO=lz4 ALGO=lz4 # Specifies the amount of RAM that should be used for zram # based on a percentage the total amount of available memory # This takes precedence and overrides SIZE below #PERCENT=50 PERCENT=25
ALGO=lz4 - тип на компресия във файла. PERCENT=25 - размера на SWAP-a е 25% от размера на RAM паметта Това е примерен размер. Ръководете се от това с колко RAM разполагате и за какво ще го ползвате. След като направите промените рестартирайте сървиса за да влязат в сила промените.
service zramswap restart