Swap fayl va partition
Oldingi maqolalarda disklar qanday tashkil qilinishi (RAID, LVM, LUKS, fayl tizimlari) ko'rib chiqildi — bularning hammasi doimiy ma’lumotlarni saqlashga xizmat qiladi. Swap esa boshqa maqsadga xizmat qiladi: u fayl tizimidan tashqarida turadi va RAM (fizik xotira) yetishmaganda tizimga "zaxira xotira" beradi. RAM to'lganda kernel kamroq ishlatiladigan xotira sahifalarini diskka (swap’ga) chiqarib, faol jarayonlar uchun RAM’ni bo'shatadi.
Swap Fayl tizimi turlari dan keyin keladi, chunki swap ham disk maydoni — bo'lim yoki oddiy fayl ko'rinishida — va uni sozlash mount va umount hamda fstab maqolalarida ko'rib chiqiladigan mexanizmlar bilan chambarchas bog'liq. Farqi shundaki, swap fayl tizimi emas: u fayllarni saqlamaydi, faqat xotira sahifalarini vaqtincha ushlab turadi.
Nimalarni o'rganasiz
Bu maqola oxirida siz quyidagilarni qila olasiz:
- swap nega mavjudligini va zamonaviy tizimlarda uning roli qanday o'zgarganini tushuntirish;
- swap partition va swap faylni farqlash va qachon qaysi birini tanlashni bilish;
mkswapvaswapon/swapoffbilan swap yaratish va boshqarish;- swap’ni
/etc/fstaborqali doimiy qilish; swappinessparametrini tushunish va uni muayyan vaziyatga moslab sozlash;- swap va OOM killer o'rtasidagi munosabatni tushuntirish va konteyner/bulut muhitida swap kerakmi-yo'qmi, baholash.
Swap nega kerak
Kernelning xotira menejeri har bir jarayonning xotira sahifalarini uzluksiz kuzatib boradi. RAM yetarli bo'lmaganda kernel bir muddat ishlatilmagan sahifalarni diskdagi swap maydoniga chiqaradi ("swap out") va faol ishlatilayotgan jarayonlar uchun RAM’ni bo'shatadi. Keyinroq sahifa yana kerak bo'lganda u RAM’ga qaytariladi ("swap in").
Swap quyidagi vaziyatlarda foydali:
- vaqtinchalik RAM yetishmovchiligi — masalan, vaqti-vaqti bilan ishlaydigan og'ir jarayon (zaxira nusxa, kompilyatsiya) uchun qo'shimcha zaxira;
- hibernation — tizim butun RAM holatini diskka yozadi va keyinroq tiklaydi; bu faqat swap orqali mumkin;
- OOM killer’dan qochish — swap bo'lmasa, RAM tugashi bilan kernel to'g'ridan-to'g'ri jarayonlarni majburan o'ldirishga (OOM kill) o'tadi; swap qo'shimcha vaqt beradi va bu o'tishni yumshatadi.
Info
Swap RAM’ning to'liq o'rnini bosa olmaydi — disk RAM’dan minglab marta sekinroq. Swap uzluksiz, og'ir foydalanish uchun emas, vaqti-vaqti bilan bo'ladigan xotira bosimi uchun mo'ljallangan. Agar tizim doimiy ravishda swap’ga tayansa ("thrashing" deb ataladi), unumdorlik keskin pasayadi — bunday holatda yechim ko'proq swap emas, ko'proq RAM.
Swap partition va swap fayl
Swap ikki shaklda bo'lishi mumkin: alohida disk bo'limi (swap partition) yoki mavjud fayl tizimi ichidagi maxsus fayl (swap fayl).
| Mezon | Swap partition | Swap fayl |
|---|---|---|
| Yaratish | Diskni qayta bo'limlashni talab qiladi | Mavjud fayl tizimida oddiy fayl sifatida yaratiladi |
| Hajmni o'zgartirish | Qiyin, odatda qayta bo'limlash kerak | Oson — faylni o'chirib, boshqa hajmda qayta yarating |
| Unumdorlik | Amalda bir xil (zamonaviy kernellarda farq sezilmas darajada) | Amalda bir xil |
| Moslashuvchanlik | Past | Yuqori — masalan, bulut VM disk hajmini o'zgartirmasdan swap qo'shishi/olib tashlashi mumkin |
| Sukut bo'yicha tanlov | An’anaviy server o'rnatmalari | Zamonaviy distributivlar (Ubuntu 22.04+ va boshqalar) sukut bo'yicha shundan foydalanadi |
Zamonaviy Linux kernelida ikkalasi o'rtasidagi unumdorlik farqi amalda yo'q (btrfs kabi ayrim fayl tizimlari swap faylni tayyorlashga maxsus talablar qo'yadi). Shu sababli ko'p zamonaviy distributivlar o'rnatuvchilari moslashuvchanligi uchun sukut bo'yicha swap fayldan foydalanadi.
Swap partition yaratish
Faraz qilaylik, /dev/sdb1 — swap uchun ajratilgan bo'sh bo'lim.
Danger
mkswap diskdagi mavjud ma’lumotlarni o'chiradi (u bo'lim sarlavhasini swap formatiga o'tkazadi). Bu buyruqni faqat bo'sh, ishlatilmayotgan bo'limda, ideal holda o'chirib tashlasa bo'ladigan sinov VM’ida ishga tushiring. Buni production diskka qo'llashdan oldin qurilma nomini qayta tekshiring (lsblk, blkid).
1. Tekshiruv (faqat o'qish)
Bo'limda hali swap yoki boshqa fayl tizimi imzosi yo'qligini tasdiqlang.
2. Uni swap sifatida tayyorlash
Bu bo'limni swap formatiga o'tkazadi va unga UUID beradi.
3. Uni faollashtirish
Tekshirish:
swapon --show faol swap qurilmalarini ro'yxatlaydi, free -h esa umumiy va ishlatilgan swap’ni ko'rsatadi.
Swap fayl yaratish
Swap fayl uchun disk qayta bo'limlanmaydi — u mavjud fayl tizimi ichida oddiy fayl sifatida yaratiladi.
1. Faylni yarating va hajmini belgilang
fallocate diskda so'ralgan hajmni tezda ajratadi. Agar fayl tizimi fallocate ni qo'llab-quvvatlamasa (masalan, ayrim btrfs konfiguratsiyalarida), muqobil — dd:
2. Ruxsatlarni cheklang
Swap fayl hech qachon boshqa foydalanuvchilar o'qiy oladigan bo'lmasligi kerak — aks holda xotiradagi maxfiy ma’lumotlarni (masalan, parollarni) diskdagi swap fayl orqali qayta o'qish mumkin bo'lib qoladi.
3. Uni swap sifatida tayyorlang va faollashtiring
Tekshirish:
Swap’ni o'chirish
yoki swap fayl uchun:
Warning
swapoff faol ishlatilayotgan swap sahifalarini RAM’ga qaytarishga urinadi. Agar RAM’da yetarli bo'sh joy bo'lmasa, swapoff muvaffaqiyatsiz bo'lishi yoki tizim vaqtincha sekinlashishi mumkin. Swap’ni o'chirishdan oldin free -h bilan qancha swap ishlatilayotganini va RAM’da unga joy borligini tekshiring.
/etc/fstab orqali doimiy qilish
swapon bilan qo'lda faollashtirilgan swap qayta yuklashdan keyin yo'qoladi. Uni doimiy qilish uchun /etc/fstab ga yozuv qo'shiladi.
Swap partition uchun avval uning UUID’sini toping:
/etc/fstab yozuvi:
Swap fayl uchun UUID kerak emas — fayl yo'li to'g'ridan-to'g'ri ishlatiladi:
Yozuv qo'shilgach, uni qayta yuklamasdan tekshirish uchun:
swapon -a /etc/fstab dagi har bir swap yozuvini faollashtiradi — bu fstab yozuvi to'g'ri ekanini qayta yuklamasdan tasdiqlash imkonini beradi. fstab formati va uning mount/umount bilan aloqasi fstab va mount va umount maqolalarida chuqur ko'rib chiqiladi.
swappiness: kernel swap’dan qachon foydalanishini boshqarish
swappiness kernelga swap’dan qanchalik ishtiyoq bilan foydalanishni 0 dan 100 gacha shkalada aytadi:
- 0 ga yaqin — kernel iloji boricha swap’dan qochadi va RAM deyarli to'lguncha faqat undan foydalanadi;
- 100 ga yaqin — kernel RAM biroz band bo'lishi bilanoq swap’dan faol foydalanishga moyil bo'ladi.
Joriy qiymatni tekshirish:
Ko'p distributivlarda sukut bo'yicha qiymat — 60. Uni vaqtincha (qayta yuklashgacha) o'zgartirish:
Doimiy o'zgartirish uchun uni /etc/sysctl.conf ga yoki /etc/sysctl.d/ ostidagi faylga qo'shing:
Qaysi qiymat qaysi muhitga mos keladi:
| Muhit | Tavsiya etilgan swappiness |
Sababi |
|---|---|---|
| Ma’lumotlar bazasi serveri | Past (1–10) | Ma’lumotlar bazasi o'z xotirasini o'zi boshqaradi; swap kechikish qo'shadi |
| Desktop / kundalik ish stantsiyasi | O'rtacha (30–60) | Muvozanat — kam ishlatiladigan dasturlar swap’ga ketadi, tez-tez ishlatiladiganlari RAM’da qoladi |
| Swap’ga kamdan-kam muhtoj bo'ladigan, xotirasi katta server | Past (10–20) | Kechikishni kamaytiradi, swap faqat favqulodda holatlar uchun qoldiriladi |
Info
swappiness=0 swap’ni butunlay o'chirmaydi — u faqat kernelni swap’ga oxirgi chora sifatida murojaat qilishga undaydi. Swap’ni butunlay o'chiradigan narsa — swapoff.
Siqilgan swap: zram va zswap
Zamonaviy tizimlar diskdagi swap’dan butunlay qochib, buning o'rniga xotirani siqishga tobora ko'proq murojaat qilmoqda. Bu konteynerlar, VM’lar va RAM’i kam mashinalar uchun tez-tez uchraydi.
-
zram RAM ichida siqilgan block qurilma yaratadi va undan swap sifatida foydalanadi. Sahifalar diskka yozilmaydi, siqiladi (odatda 2–3 barobar), shuning uchun "swap qilish" xotira tezligida qoladi. Fedora va Ubuntu endi ko'p o'rnatmalarda uni sukut bo'yicha yoqadi. Bu haqiqiy swap —
swapon --showuni ro'yxatlaydi — lekin disk emas, RAM bilan ta’minlangan.Amalda u qo'lda emas, deklarativ tarzda sozlanadi (systemd
zram-generatoryokizram-toolspaketi). -
zswap boshqacha: u haqiqiy diskdagi swap oldidagi siqilgan kesh. Sahifalar avval siqilgan RAM pool’iga tushadi; faqat shu pool to'lgandagina eng sovuq sahifalar haqiqiy swap qurilmasiga yoziladi. Shunday qilib zswap diskdagi swap faylni to'ldiradi, zram esa odatda uning o'rnini bosadi.
Info
zram I/O (diskka yozish) o'rniga CPU’dan (siqish) foydalanadi — RAM to'siq bo'lgan va diskdagi swap sekin yoki tavsiya etilmaydigan bulut VM’lari va konteynerlar uchun bu juda yaxshi kelishuv. U hibernation uchun ishlamaydi, chunki hibernation baribir kamida RAM hajmidagi haqiqiy diskdagi swap maydonini talab qiladi.
Swap ustuvorligi
Bir vaqtda bir nechta swap maydoni faol bo'lishi mumkin va pri parametri ulardan qaysi tartibda foydalanishni boshqaradi — avval yuqoriroq ustuvorlik, teng ustuvorliklar esa parallel ishlatiladi:
Bu tez, siqilgan zram swap’ni afzal ko'rish va sekinroq diskdagi swap faylga faqat haqiqiy bosim ostida o'tishning standart usuli. Natijani swapon --show bilan tasdiqlang — uning PRIO ustuni shu qiymatlarni aks ettiradi.
Swap va OOM killer
Agar RAM ham, swap ham to'lsa, kernel "Out Of Memory" (OOM) holatiga o'tadi va OOM killer’ni ishga tushiradi — tizim butunlay qulab tushmasligi uchun u eng ko'p xotira ishlatayotgan yoki eng "arzon" (oom_score i eng past) jarayonni majburan tugatadi.
Swap mavjudligi OOM killer’ni kechiktiradi va uning ta’sirini yumshatadi: RAM to'lganda jarayon darhol o'ldirilmaydi — avval kamroq faol sahifalar swap’ga chiqariladi. Swap bo'lmasa yoki juda kam bo'lsa, RAM tugashi bilanoq OOM killer keskin ishga tushadi — bu, ayniqsa qisqa muddatli xotira sakrashlarida (masalan, build jarayonida), kutilmaganda jarayonlarning o'ldirilishiga sabab bo'lishi mumkin.
Bu buyruqlar log yozuvlaridan OOM killer ishga tushgan holatlarni topishga yordam beradi.
Konteyner yoki bulut VM’ida swap kerakmi
Swap har doim ham kerak emas — to'g'ri qaror muhitga bog'liq:
- Konteynerlar (Docker, Kubernetes) — odatda swap o'chirilgan bo'ladi yoki resurs cheklovlari (
memory limit) orqali boshqariladi. Masalan, Kubernetes uzoq vaqt node’larda swap’ni umuman qo'llab-quvvatlamagan, chunki swap yoqilganda u resurslarni hisobga olishni buzib qo'yishi mumkin (yaqinda cheklangan qo'llab-quvvatlash qo'shilgan, lekin production’da undan ehtiyotkorlik bilan foydalaniladi). - Bulut VM’lari (masalan, kichikroq instance turlari) — RAM cheklangan bo'lishi mumkin, shuning uchun swap fayl qo'shish arzon va tezkor yechim; ko'p provayderlar buni tavsiya qiladi.
- Ma’lumotlar bazasi serverlari — ko'pincha kam yoki minimal swap bilan ishlaydi, chunki ma’lumotlar bazasi o'z xotirasini o'zi boshqaradi va disk kechikishi ma’lumotlar bazasi unumdorligiga zarar yetkazadi.
- Hibernation kerak bo'lgan noutbuk/desktop — swap (kamida RAM hajmida) shart, chunki hibernation butun RAM holatini swap’ga yozadi.
Amaliy vaziyat: mavjud VM’ga swap fayl qo'shish
Muammo: production bulut VM’ida xotira yetishmasligi sababli jarayonlar vaqti-vaqti bilan OOM killer tomonidan o'ldirilmoqda, lekin diskni qayta bo'limlash imkoni yo'q (bulut provayderi bo'lim hajmini o'zgartirishni talab qiladi, bu esa uzilishga sabab bo'ladi).
1. Joriy holatni tekshiring:
Bu swap umuman yo'qligini va yaqinda OOM killer ishga tushganini tasdiqlaydi.
2. Diskda bo'sh joy borligini tekshiring:
3. 2 GiB hajmli swap fayl yarating:
4. Tekshiring:
5. Doimiy qiling:
Bu qator /etc/fstab oxiriga qo'shiladi.
6. swappiness ni server yuklamasiga moslang:
Bu qiymat doimiy ravishda /etc/sysctl.d/99-swappiness.conf ga yoziladi.
Natija: VM diskni qayta bo'limlamasdan qo'shimcha 2 GiB zaxira xotiraga ega bo'ldi. swappiness=10 bilan kernel swap’dan faqat haqiqatan kerak bo'lganda foydalanadi va shu bilan birga vaqtinchalik xotira sakrashlarida OOM killer ishga tushishi ehtimolini kamaytiradi.
Xulosa: swap fayl qayta bo'limlashsiz tezkor, ortga qaytariladigan yechim beradi — muammo yuzaga kelsa, uni swapoff va rm bilan osongina bekor qilish mumkin. Lekin bu doimiy yechim emas: agar xotira doimiy yetishmasa, haqiqiy yechim — ko'proq RAM yoki yuklamani optimallashtirish.
Keng tarqalgan xatolar
Swap faylni hamma o'qiy oladigan qilib qoldirish
Agar chmod 600 /swapfile qo'llanmasa, boshqa foydalanuvchilar xotiradagi maxfiy ma’lumotlarni (parollar, kalitlar) o'z ichiga olishi mumkin bo'lgan swap faylni o'qiy olishi mumkin.
swapon dan keyin fstab ni unutish
swapon bilan qo'lda faollashtirilgan swap keyingi qayta yuklashda yo'qoladi — uning ishlayotganini ko'rib, muammo hal bo'ldi deb hisoblash xato. U saqlanib qolishi uchun fstab yozuvi shart.
Swap’ni RAM yetishmovchiligining doimiy yechimi deb hisoblash
Swap — vaqtinchalik zaxira; unga uzluksiz va og'ir tayanish tizim unumdorligini keskin pasaytiradi (thrashing). Doimiy yuqori swap ishlatilishi ko'proq swap qo'shish uchun sabab emas, ko'proq RAM kerakligining belgisi.
swappiness ni oldindan tekshirmasdan o'zgartirish
Ma’lumotlar bazasi kabi sezgir xizmatda swappiness ni ehtiyotsizlik bilan yuqori qo'yish kutilmagan kechikishlarga olib kelishi mumkin. Uni monitoring bilan birga, bosqichma-bosqich o'zgartirish tavsiya etiladi.
Mashqlar
- O'chirib tashlasa bo'ladigan VM’da 1 GiB hajmli swap fayl yarating, uni
swapon --showvafree -hbilan tasdiqlang, so'ngswapoffbilan o'chiring. /etc/fstabga swap fayl yozuvini qo'shing va uni qayta yuklamasdanswapon -abilan tekshiring.vm.swappinessni avval10ga, so'ng80ga o'zgartiring va farqni/proc/sys/vm/swappinessorqali kuzating (haqiqiy ta’sirni ko'rish uchun xotira sarflaydigan sinov dasturi kerak bo'lishi mumkin).dmesgyokijournalctl -klog'laridan OOM killer ishga tushgan holatlarni (agar bo'lsa) qidiring va qaysi jarayon tugatilganini aniqlang.
Mashqni bajardim deyish uchun: server roli (ma’lumotlar bazasi, desktop, hibernation kerak bo'lgan bulut VM) berilganda mos swappiness qiymatini tavsiya qila olishingiz va uni asoslab bera olishingiz kerak.
Xulosa
Swap RAM yetishmaganda vaqtinchalik zaxira xotirani ta’minlaydi — u bo'lim yoki fayl bo'lishi mumkin, zamonaviy tizimlarda esa moslashuvchanligi uchun ko'proq swap fayl tavsiya etiladi. U mkswap bilan tayyorlanadi, swapon/swapoff bilan boshqariladi va /etc/fstab orqali doimiy qilinadi. swappiness parametri kernelga swap’dan qachon foydalanishni aytadi, swap’ning o'zi esa OOM killer’ni kechiktiradi va uning ta’sirini yumshatadi — lekin konteynerlarda va ayrim ma’lumotlar bazasi muhitlarida u ataylab o'chiriladi yoki minimal darajada saqlanadi. Bu qatlamlarning hammasi (RAID, LVM, LUKS, fayl tizimi, swap) boot paytida aslida qanday mount qilinishi va avtomatik ulanishi mount va umount hamda fstab maqolalarida davom etadi.