Skip to content

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;
  • mkswap va swapon/swapoff bilan swap yarata va boshqara olasiz;
  • /etc/fstab orqali swapni doimiy faollashtira olasiz;
  • swappiness parametrini 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)

lsblk
sudo blkid /dev/sdb1

Bo'limda hozircha swap yoki boshqa fayl tizimi belgisi yo'qligiga ishonch hosil qilinadi.

2. Swap formatida tayyorlash

sudo mkswap /dev/sdb1

Natijada bo'lim swap formatiga o'tkaziladi va unga UUID beriladi.

3. Faollashtirish

sudo swapon /dev/sdb1

Tekshirish:

swapon --show
free -h

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

sudo fallocate -l 4G /swapfile

fallocate diskda ko'rsatilgan hajmni tezda ajratadi. Agar fayl tizimi fallocateni qo'llab-quvvatlamasa (masalan, ba'zi btrfs sozlamalarida), muqobil sifatida dd ishlatiladi:

sudo dd if=/dev/zero of=/swapfile bs=1M count=4096

2. Ruxsatlarni cheklash

sudo chmod 600 /swapfile

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

sudo mkswap /swapfile
sudo swapon /swapfile

Tekshirish:

swapon --show
free -h

Swapni o'chirish

sudo swapoff /dev/sdb1

yoki swap fayl uchun:

sudo swapoff /swapfile
sudo rm /swapfile

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:

sudo blkid /dev/sdb1

/etc/fstab yozuvi:

UUID=1234-5678-...  none  swap  sw  0  0

Swap fayl uchun UUID kerak emas, to'g'ridan-to'g'ri fayl yo'li ishlatiladi:

/swapfile  none  swap  sw  0  0

Yozuv qo'shilgandan keyin, reboot qilmasdan tekshirish uchun:

sudo swapon -a
swapon --show

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:

cat /proc/sys/vm/swappiness

Ko'pchilik distributivlarda standart qiymat 60. Vaqtinchalik (reboot'gacha) o'zgartirish:

sudo sysctl vm.swappiness=10

Doimiy o'zgartirish uchun /etc/sysctl.conf yoki /etc/sysctl.d/ ichidagi faylga qo'shiladi:

vm.swappiness=10

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.

dmesg | grep -i "out of memory"
journalctl -k | grep -i "oom"

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:

free -h
swapon --show
dmesg | grep -i "out of memory"

Natijada swap umuman yo'qligi va OOM killer yaqinda ishga tushgani aniqlanadi.

2. Diskda bo'sh joy borligini tekshirish:

df -h /

3. 2 GiB swap fayl yaratish:

sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

4. Tekshirish:

free -h
swapon --show

5. Doimiy qilish:

/swapfile  none  swap  sw  0  0

Bu qatorni /etc/fstab oxiriga qo'shish kerak.

6. swappinessni server yuklamasiga moslashtirish:

sudo sysctl vm.swappiness=10

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

  1. Disposable VM'da 1 GiB swap fayl yarating, swapon --show va free -h bilan natijani tasdiqlang, so'ng swapoff bilan o'chiring.
  2. /etc/fstab ga swap fayl yozuvini qo'shing va swapon -a bilan reboot qilmasdan tekshiring.
  3. vm.swappiness qiymatini 10 va 80 ga o'zgartirib, /proc/sys/vm/swappiness orqali farqni kuzating (real ta'sirni ko'rish uchun xotira band qiluvchi test dastur kerak bo'lishi mumkin).
  4. dmesg yoki journalctl -k jurnalidan 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.

Manbalar