Swap fayl va partition
Oldingi maqolalarda diskning tashkil qilinishi (RAID, LVM, LUKS, fayl tizimlari) ko'rildi — bularning barchasi doimiy ma'lumotni saqlash uchun. Swap esa boshqa vazifani bajaradi: u fayl tizimidan tashqarida, operativ xotira (RAM) yetishmay qolganda tizimga "zaxira xotira" beradi. RAM to'lib qolganda yadro kamroq ishlatilayotgan xotira sahifalarini diskka (swap) chiqarib, RAM'ni faol jarayonlar uchun bo'shatadi.
Swap fayl tizimi turlari maqolasidan keyin keladi, chunki swap ham diskdagi joy — partition yoki oddiy fayl ko'rinishida — bo'lib, uni sozlash mount va umount hamda fstab maqolalarida ko'riladigan mexanizmlar bilan chambarchas bog'liq. Farqi shundaki, swap fayl tizimi emas: unda fayllar saqlanmaydi, u faqat xotira sahifalarini vaqtinchalik joylashtirish uchun ishlatiladi.
O'quv maqsadlari
Maqolani tugatgach:
- swap nima uchun kerakligini va uning zamonaviy tizimlarda qanday roli o'zgarganini tushunasiz;
- swap partition va swap fayl orasidagi farqni va qachon qaysi birini tanlashni bilasiz;
mkswapvaswapon/swapoffbilan swap yarata va boshqara olasiz;/etc/fstaborqali swapni doimiy faollashtira olasiz;swappinessparametrini tushunasiz va uni vaziyatga qarab sozlay olasiz;- swap va OOM killer o'rtasidagi munosabatni, shuningdek konteyner/cloud muhitlarda swap kerak yoki kerak emasligini baholay olasiz.
Swap nima uchun kerak
Yadro xotira boshqaruvida barcha jarayonlarning xotira sahifalarini doimiy ravishda kuzatib boradi. RAM yetarli bo'lmaganda, yadro uzoq vaqt ishlatilmagan sahifalarni diskdagi swap maydoniga "chiqarib qo'yadi" (swap out), RAM'ni faol foydalanilayotgan jarayonlar uchun bo'shatadi. Sahifa keyinroq kerak bo'lsa, u qayta RAM'ga qaytariladi (swap in).
Swap quyidagi vaziyatlarda foydali:
- RAM vaqtincha yetishmay qolganda — masalan, kamdan-kam ishga tushadigan og'ir jarayon (backup, kompilyatsiya) uchun qo'shimcha zaxira;
- hibernate (uyquga ketish) uchun — tizim butun RAM holatini diskka yozib, keyin qayta tiklaydi, bu faqat swap orqali mumkin;
- OOM killer'dan qochish uchun — swap bo'lmasa, RAM tugaganda yadro darhol jarayonlarni majburan o'chirishga (OOM kill) o'tadi, swap esa qo'shimcha vaqt va yumshoqlik beradi.
Info
Swap RAM'ning to'liq o'rnini bosuvchi emas — disk RAM'dan minglab marta sekinroq. Swap doimiy, faol ishlatilishga emas, vaqti-vaqti bilan yuzaga keladigan xotira zichligiga (memory pressure) mo'ljallangan. Tizim doimiy ravishda swap bilan ishlasa (bu "thrashing" deyiladi), unumdorlik keskin pasayadi — bu holatda yechim ko'proq swap emas, ko'proq RAM.
Swap partition vs swap fayl
Swap ikki shaklda bo'lishi mumkin: alohida disk bo'limi (swap partition) yoki oddiy fayl tizimi ichidagi maxsus fayl (swap fayl).
| Mezon | Swap partition | Swap fayl |
|---|---|---|
| Yaratish | Diskni qayta bo'lish kerak | Mavjud fayl tizimida oddiy fayl sifatida yaratiladi |
| Hajmni o'zgartirish | Qiyin, ko'pincha qayta bo'lish kerak | Fayl o'chirib, kattaroq/kichikroq qayta yaratish oson |
| Unumdorlik | Deyarli bir xil (zamonaviy yadroda farq ahamiyatsiz) | Deyarli bir xil |
| Moslashuvchanlik | Past | Yuqori — masalan, cloud VM'da disk hajmini o'zgartirmasdan swap qo'shish/o'chirish mumkin |
| Odatiy holat | An'anaviy server o'rnatishlarida | Zamonaviy distributivlar (Ubuntu 22.04+, va h.k.) standart tanlov |
Zamonaviy Linux yadrosida ikkalasining unumdorlik farqi deyarli yo'q (btrfs kabi ba'zi fayl tizimlarida swap fayl uchun cheklovlar bo'lishi mumkin — masalan, btrfs da swap fayl maxsus tayyorlanishi kerak). Shu sabab ko'pchilik zamonaviy distributiv o'rnatuvchilari moslashuvchanligi tufayli swap faylni standart qiladi.
Swap partition yaratish
Faraz qilaylik, /dev/sdb1 — swap uchun ajratilgan bo'sh bo'lim.
Danger
mkswap diskdagi mavjud ma'lumotni o'chirib yuboradi (bo'lim sarlavhasini swap formatiga o'zgartiradi). Bu buyruqni faqat bo'sh, ishlatilmayotgan bo'limda, tercihan disposable test VM'da bajaring. Production diskda ishlatishdan oldin qurilma nomini (lsblk, blkid) ikki marta tekshiring.
1. Tekshiruv (read-only)
Bo'limda hozircha swap yoki boshqa fayl tizimi belgisi yo'qligiga ishonch hosil qilinadi.
2. Swap formatida tayyorlash
Natijada bo'lim swap formatiga o'tkaziladi va unga UUID beriladi.
3. Faollashtirish
Tekshirish:
swapon --show faol swap qurilmalarini, free -h esa umumiy va ishlatilayotgan swap hajmini ko'rsatadi.
Swap fayl yaratish
Swap fayl uchun disk qayta bo'linmaydi — u mavjud fayl tizimi ichida oddiy fayl sifatida yaratiladi.
1. Fayl yaratish va o'lchamini belgilash
fallocate diskda ko'rsatilgan hajmni tezda ajratadi. Agar fayl tizimi fallocateni qo'llab-quvvatlamasa (masalan, ba'zi btrfs sozlamalarida), muqobil sifatida dd ishlatiladi:
2. Ruxsatlarni cheklash
Swap fayl boshqa foydalanuvchilar tomonidan o'qilishi mumkin bo'lmasligi kerak — aks holda xotiradagi maxfiy ma'lumot (masalan, parollar) diskka yozilgan swap fayl orqali o'qilishi mumkin.
3. Swap formatida tayyorlash va faollashtirish
Tekshirish:
Swapni o'chirish
yoki swap fayl uchun:
Warning
swapoff faol ishlatilayotgan swap sahifalarini RAM'ga qaytarib olishga urinadi. Agar RAM'da yetarli bo'sh joy bo'lmasa, swapoff muvaffaqiyatsiz tugashi yoki tizim vaqtincha sekinlashishi mumkin. Swapni o'chirishdan oldin free -h orqali qancha swap ishlatilayotganini va RAM'da shuncha joy borligini tekshiring.
/etc/fstab orqali doimiy faollashtirish
swapon bilan qo'lda faollashtirilgan swap reboot'dan keyin yo'qoladi. Doimiy qilish uchun /etc/fstab ga yozuv qo'shiladi.
Swap partition uchun, avval UUID aniqlanadi:
/etc/fstab yozuvi:
Swap fayl uchun UUID kerak emas, to'g'ridan-to'g'ri fayl yo'li ishlatiladi:
Yozuv qo'shilgandan keyin, reboot qilmasdan tekshirish uchun:
swapon -a /etc/fstab dagi barcha swap yozuvlarini faollashtiradi — bu fstab yozuvi to'g'ri ekanini reboot qilmasdan tekshirish imkonini beradi. fstab formati va mount/umount bilan bog'liqligi haqida batafsil fstab va mount va umount maqolalarida ko'riladi.
swappiness: yadro qachon swap ishlatishini boshqarish
swappiness — yadroga qanchalik "tez" swap ishlatishni aytadigan parametr, 0 dan 100 gacha qiymat oladi:
- 0 ga yaqin — yadro swapdan iloji boricha qochadi, RAM to'lib-toshgunga qadar faqat RAM ishlatiladi;
- 100 ga yaqin — yadro RAM sal band bo'lishi bilanoq faol ravishda swap ishlatishga moyil.
Joriy qiymatni tekshirish:
Ko'pchilik distributivlarda standart qiymat 60. Vaqtinchalik (reboot'gacha) o'zgartirish:
Doimiy o'zgartirish uchun /etc/sysctl.conf yoki /etc/sysctl.d/ ichidagi faylga qo'shiladi:
Qachon qanday qiymat mos keladi:
| Muhit | Tavsiya etilgan swappiness |
Sabab |
|---|---|---|
| Ma'lumotlar bazasi serveri | Past (1–10) | Baza o'z xotira boshqaruviga ega, swap kechikishni oshiradi |
| Desktop / kundalik ish stansiyasi | O'rtacha (30–60) | Balans — kamdan-kam ishlatiladigan dasturlar swap'ga chiqadi, tez-tez ishlatiladiganlar RAM'da qoladi |
| Ko'p xotira, kam swap kerak bo'lgan server | Past (10–20) | Kechikishni kamaytirish, swap faqat favqulodda holat uchun |
Info
swappiness=0 swapni butunlay o'chirmaydi — u faqat yadroni swap ishlatishga eng oxirgi chorada murojaat qilishga undaydi. Swapni butunlay o'chirish uchun swapoff kerak.
Swap va OOM killer
RAM va swap ikkalasi ham to'lib qolsa, yadro "Out Of Memory" (OOM) holatiga tushadi va OOM killer mexanizmi ishga tushadi — u eng ko'p xotira ishlatayotgan yoki eng "arzon" (oom_score past) jarayonni majburan to'xtatadi, tizimni butunlay qulashdan saqlash uchun.
Swap borligi OOM killer ishga tushishini kechiktiradi va yumshoqroq qiladi: RAM to'lganda darhol jarayon o'chirilmaydi, avval kamroq faol sahifalar swapga chiqariladi. Swap yo'q yoki juda kichik bo'lsa, RAM tugashi bilanoq OOM killer keskin ishga tushadi — bu ayniqsa qisqa muddatli xotira sakrashlarida (masalan, build jarayoni) kutilmagan jarayon o'chishlariga olib kelishi mumkin.
Bu buyruqlar OOM killer ishga tushgan holatlarni jurnal yozuvlaridan topishga yordam beradi.
Konteyner va cloud VM'da swap kerakmi
Swap har doim ham kerak emas — muhitga qarab qaror boshqacha bo'ladi:
- Konteynerlar (Docker, Kubernetes) — odatda swap o'chirilgan yoki resurs chegaralari (
memory limit) orqali boshqariladi. Kubernetes, masalan, node'larda swap yoqilgan bo'lsa resurs hisob-kitobi buzilishi mumkinligi sababli uzoq vaqt swapni umuman qo'llab-quvvatlamagan (yaqinda cheklangan qo'llab-quvvatlash qo'shilgan, lekin production'da ehtiyotkorlik bilan ishlatiladi). - Cloud VM (masalan, kichik instance turlari) — RAM chegaralangan bo'lishi mumkin, shu sababda swap fayl qo'shish arzon va tez yechim; ko'p provayderlar buni tavsiya qiladi.
- Ma'lumotlar bazasi serverlari — ko'pincha kam yoki minimal swap bilan ishlaydi, chunki baza o'zining xotira boshqaruviga ega va disk kechikishi baza unumdorligiga salbiy ta'sir qiladi.
- Hibernate kerak bo'lgan noutbuk/desktop — swap (kamida RAM hajmicha) shart, chunki hibernate butun RAM holatini swapga yozadi.
Amaliy ssenariy: mavjud VM'da swap fayl qo'shish
Muammo: production cloud VM'da vaqti-vaqti bilan xotira yetishmasligi tufayli jarayonlar OOM killer tomonidan o'chirilmoqda, lekin diskni qayta bo'lish imkoni yo'q (bulut provayderi bo'lim o'lchamini o'zgartirishni talab qiladi va downtime beradi).
1. Joriy holatni tekshirish:
Natijada swap umuman yo'qligi va OOM killer yaqinda ishga tushgani aniqlanadi.
2. Diskda bo'sh joy borligini tekshirish:
3. 2 GiB swap fayl yaratish:
4. Tekshirish:
5. Doimiy qilish:
Bu qatorni /etc/fstab oxiriga qo'shish kerak.
6. swappinessni server yuklamasiga moslashtirish:
Bu qiymat /etc/sysctl.d/99-swappiness.conf fayliga doimiy yozib qo'yiladi.
Natija: VM disk qayta bo'linmasdan qo'shimcha 2 GiB zaxira xotira oldi. swappiness=10 bilan yadro swapni faqat zarurat tug'ilganda ishlatadi, shu bilan birga vaqtinchalik xotira sakrashlarida OOM killer ishga tushish ehtimoli kamayadi.
Xulosa: swap fayl disk qayta bo'lishisiz tezkor va qaytariladigan yechim beradi — muammo kelib chiqsa, swapoff va rm bilan bekor qilish oson. Lekin bu doimiy yechim emas: xotira doimiy yetishmasa, muammoning haqiqiy yechimi ko'proq RAM yoki yuklamani optimallashtirish.
Ko'p uchraydigan xatolar
Swap faylga ochiq ruxsat qoldirish
chmod 600 /swapfile bajarilmasa, boshqa foydalanuvchilar xotiradagi maxfiy ma'lumotni (parollar, kalitlar) o'z ichiga olishi mumkin bo'lgan swap faylni o'qiy olishi mumkin.
swapon dan keyin fstabni unutish
Qo'lda swapon bilan faollashtirilgan swap keyingi reboot'da yo'qoladi — u ishlayotganini ko'rib, muammo hal bo'ldi deb o'ylash xato. Doimiy bo'lishi uchun fstab yozuvi shart.
Swapni RAM yetishmasligining doimiy yechimi deb hisoblash
Swap vaqtinchalik zaxira, doimiy va faol ishlatilishi tizim unumdorligini keskin pasaytiradi (thrashing). Doimiy yuqori swap ishlatilishi ko'proq RAM kerakligining belgisi, swapni oshirish yechimi emas.
swappinessni tekshirmasdan o'zgartirish
swappiness qiymatini ma'lumotlar bazasi kabi sezgir xizmatlarda o'ylamasdan yuqori qo'yish, kutilmagan kechikishlarga olib kelishi mumkin. O'zgarishni monitoring bilan birga, bosqichma-bosqich sinash tavsiya etiladi.
Amaliy mashqlar
- Disposable VM'da 1 GiB swap fayl yarating,
swapon --showvafree -hbilan natijani tasdiqlang, so'ngswapoffbilan o'chiring. /etc/fstabga swap fayl yozuvini qo'shing vaswapon -abilan reboot qilmasdan tekshiring.vm.swappinessqiymatini10va80ga o'zgartirib,/proc/sys/vm/swappinessorqali farqni kuzating (real ta'sirni ko'rish uchun xotira band qiluvchi test dastur kerak bo'lishi mumkin).dmesgyokijournalctl -kjurnalidan OOM killer ishga tushgan holatlarni qidiring (agar mavjud bo'lsa) va qaysi jarayon o'chirilganini aniqlang.
Xulosa
Swap RAM yetishmagan paytda vaqtinchalik zaxira beradi — partition yoki fayl ko'rinishida bo'lishi mumkin, zamonaviy tizimlarda moslashuvchanligi tufayli swap fayl ko'proq tavsiya etiladi. mkswap bilan tayyorlanib, swapon/swapoff bilan boshqariladi, doimiyligi esa /etc/fstab orqali ta'minlanadi. swappiness parametri yadroga qachon swap ishlatishni aytadi, swapning o'zi esa OOM killer ishga tushishini kechiktirib, yumshoqroq qiladi — lekin konteyner va ba'zi ma'lumotlar bazasi muhitlarida ataylab o'chirilgan yoki minimal qoldiriladi. Endi diskdagi barcha bu qatlamlar (RAID, LVM, LUKS, fayl tizimi, swap) qanday mount qilinishi va tizim yuklanganda avtomatik ulanishi mount va umount va fstab maqolalarida davom etadi.