Tarkibga o'tish

Disk kvotalari

NFS va autofs maqolasida bitta fayl tizimining tarmoq orqali bir nechta klientga ulanishi ko'rib chiqildi. Ko'p foydalanuvchili yoki umumiy fayl serverida esa boshqa muammo paydo bo'ladi: bitta foydalanuvchi yoki guruh butun bo'limni to'ldirib, xizmatni boshqa hamma uchun ishdan chiqarishi mumkin. Disk kvotasi — administratorga har bir foydalanuvchi yoki guruh qancha joy va nechta fayldan (inode’dan) foydalanishi mumkinligini fayl tizimi darajasida cheklash imkonini beradigan mexanizm.

Nimalarni o'rganasiz

Bu maqola oxirida siz quyidagilarni qila olasiz:

  • foydalanuvchi kvotasi va guruh kvotasi o'rtasidagi farqni tushuntirish;
  • soft limit, hard limit va grace period’ni hamda ular qanday birga ishlashini tushuntirish;
  • ext4 fayl tizimida /etc/fstab orqali kvotalarni yoqish va ularni quotacheck/quotaon bilan faollashtirish;
  • kvotalarni edquota, setquota va repquota bilan o'rnatish va kuzatish;
  • XFS’dagi kvota mexanizmi ext4 dan qanday farq qilishini tushuntirish.

Kvotalar nega kerak

Umumiy serverda (masalan, /home ostidagi uy kataloglari yoki fayl ulashish serveri) barcha foydalanuvchilar bitta fayl tizimini bo'lishadi. Kvotalarsiz bitta foydalanuvchi — tasodifan yoki ataylab — butun bo'limni to'ldirib, boshqa foydalanuvchilarni fayl yoza olmaydigan holatda qoldirishi mumkin; hatto tizim log'lari yoki vaqtinchalik fayllar uchun ham joy qolmaydi.

Kvotalar aynan shuning oldini oladi: har bir foydalanuvchi yoki guruh alohida cheklov oladi va undan oshish disk quota exceeded xatosi bilan to'xtaydi — bu butun fayl tizimiga emas, faqat o'sha foydalanuvchining yozish urinishiga ta’sir qiladi.

Info

Kvota — xavfsizlik mexanizmi emas, resurslarni taqsimlash vositasi. U foydalanuvchiga fayllarni o'qish yoki mavjudlarini bajarishga to'sqinlik qilmaydi — faqat u qancha yangi joyni egallashi mumkinligini cheklaydi.

Foydalanuvchi va guruh kvotalari o'rtasidagi farq

Kvotalarni ikkita mustaqil darajada o'rnatish mumkin:

  • Foydalanuvchi kvotasi — muayyan foydalanuvchiga (UID) qo'yilgan cheklov. Masalan, alice foydalanuvchisi /home ostida ko'pi bilan 10 GiB dan foydalanishi mumkin.
  • Guruh kvotasi — muayyan guruhga (GID) qo'yilgan umumiy cheklov. Guruhdagi har bir foydalanuvchining fayllari shu cheklovga birga hisoblanadi. Masalan, dev guruhi umumiy loyiha katalogida har bir a’zo uchun alohida emas, birgalikda ko'pi bilan 50 GiB dan foydalanishi mumkin.

Ikkalasini bir vaqtda ishlatish mumkin: foydalanuvchi ham o'zining shaxsiy cheklovi, ham tegishli guruh cheklovi bilan bog'langan — qaysi biri birinchi to'lsa, o'sha qo'llanadi.

Soft limit, hard limit va grace period

Kvota tizimi ikki darajali cheklovni qo'llab-quvvatlaydi:

Tushuncha Ma’nosi
Soft limit Ogohlantirish chegarasi. Undan oshish darhol bloklanmaydi, lekin foydalanuvchi ogohlantiriladi va grace period boshlanadi
Hard limit Qat’iy cheklov. Bu qiymatdan hech qachon oshib bo'lmaydi — yozish darhol Disk quota exceeded xatosi bilan to'xtaydi
Grace period Soft limit’dan yuqorida ishlashga ruxsat berilgan vaqt, shundan keyin u hard limit kabi qat’iy qo'llanadi (odatda kunlarda o'lchanadi)

Mantiq shunday ishlaydi: agar foydalanuvchi soft limit’dan oshsa, tizim uni darhol bloklamaydi — u grace period davomida ishlashda davom etishi mumkin (masalan, katta faylni yozib tugatish uchun). Agar grace period tugashidan oldin foydalanish yana soft limit’dan pastga tushmasa, tizim avtomatik ravishda soft limit’ni hard limit kabi qat’iy qo'llay boshlaydi.

0 ────────── soft limit ────────── hard limit
   free usage    warning +              writing
                grace period            blocked

Bu ikki bosqichli yondashuv amalda muhim: u foydalanuvchiga vaqtincha qo'shimcha joy beradi, lekin muammoning cheksiz davom etishiga yo'l qo'ymaydi.

/etc/fstab da kvotalarni yoqish (ext4)

Kvotalar fayl tizimi mount qilinganda usrquota va/yoki grpquota parametrlari bilan yoqiladi. Ular /etc/fstab dagi tegishli qatorga qo'shiladi:

UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx  /home  ext4  defaults,usrquota,grpquota  0  2
  • usrquota — foydalanuvchi kvotalarini yoqadi;
  • grpquota — guruh kvotalarini yoqadi.

/etc/fstab sintaksisi va UUID orqali mount qilish fstab maqolasida chuqur ko'rib chiqiladi.

O'zgarishdan keyin fayl tizimini qayta mount qiling (yoki serverni qayta yuklang):

sudo mount -o remount /home

quotacheck: dastlabki hisob-kitob

Kvotalar yoqilgach, mavjud fayllarning har bir egasi bo'yicha foydalanishini birinchi marta hisoblash kerak. Buni quotacheck bajaradi:

sudo quotacheck -cug /home
  • -c — yangi kvota fayllarini (aquota.user, aquota.group) yaratish;
  • -u — foydalanuvchi kvotalari uchun hisoblash;
  • -g — guruh kvotalari uchun hisoblash.
ls -la /home/aquota.*

Warning

quotacheck fayl tizimini skanerlaydi va katta bo'limlarda vaqt olishi mumkin. Faol yozishlar davom etayotgan production fayl tizimida noaniq natija olish xavfi bor — uni yuklama past bo'lgan paytda yoki fayl tizimi faqat o'qish rejimida bo'lganda ishga tushirish tavsiya etiladi.

quotaon / quotaoff: kvota nazoratini faollashtirish

Hisob-kitob fayllari tayyor bo'lgach, kvota nazoratini faollashtirish kerak:

sudo quotaon /home

Holatni tekshirish:

sudo quotaon -p /home

O'chirish (masalan, texnik xizmat uchun):

sudo quotaoff /home

quotaoff kvota fayllarini o'chirmaydi — u faqat nazoratni vaqtincha to'xtatadi.

edquota: kvotalarni o'rnatish (interaktiv)

edquota — foydalanuvchi yoki guruhning soft/hard cheklovlarini tahrirlash uchun interaktiv vosita; u tizimning sukut bo'yicha matn muharririni ($EDITOR) ochadi:

sudo edquota -u alice

Tahrirlash oynasi taxminan shunday ko'rinadi:

Disk quotas for user alice (uid 1001):
  Filesystem     blocks   soft   hard   inodes   soft   hard
  /dev/vg_data/lv_home  512000  10485760  12582912  8000  20000  25000
  • blocks ustunlari kilobaytlarda o'lchanadi (soft/hard);
  • inodes ustunlari fayllar sonini cheklaydi — bu oz joy egallasa ham juda ko'p mayda fayl yaratishning oldini oladi.

Guruh uchun ekvivalent buyruq:

sudo edquota -g dev

Grace period’ni alohida buyruq o'rnatadi:

sudo edquota -t

setquota: kvotalarni o'rnatish (skriptlar uchun)

edquota interaktiv muharrirni talab qiladi; setquota esa avtomatlashtirish uchun qulayroq — har bir qiymat bitta buyruqda beriladi:

sudo setquota -u alice 10485760 12582912 8000 25000 /home

Argumentlar tartibi: user soft-block hard-block soft-inode hard-inode filesystem.

sudo setquota -g dev 52428800 62914560 40000 50000 /home

setquota skriptlarda va konfiguratsiyani boshqarish vositalarida (Ansible va boshqalar) keng ishlatiladi, chunki u hech qanday interaktiv kiritishni talab qilmaydi.

repquota: hisobot chiqarish

Har bir foydalanuvchi yoki guruh uchun joriy foydalanish va cheklovlarni bitta jadvalda ko'rish uchun:

sudo repquota /home

Namunaviy chiqish:

*** Report for user quotas on device /dev/vg_data/lv_home
Block grace time: 7days; Inode grace time: 7days
                        Block limits                File limits
User            used    soft    hard  grace    used  soft  hard  grace
----------------------------------------------------------------------
alice     --   9800000 10485760 12582912          7500  8000 25000
bob       +-  12800000 10485760 12582912  6days    9100  8000 25000

bob qatoridagi + belgisi va grace ustunidagi 6days bob soft limit’dan oshganini va grace period tugashiga 6 kun qolganini bildiradi; shundan keyin yozish bloklanadi.

XFS’dagi kvotalar: pquota/gquota

ext4 kvotalari fayl tizimi ustida qo'shimcha, alohida boshqariladigan qatlam sifatida ishlaydi (quotacheck, aquota.user fayllari orqali). XFS boshqacha — uning kvota mexanizmi fayl tizimining o'ziga o'rnatilgan va tashqi quotacheck talab qilinmaydi.

XFS da mount parametrlari boshqacha nomlanadi:

UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx  /data  xfs  defaults,usrquota,grpquota,pquota  0  2
  • uquota/usrquota — foydalanuvchi kvotasi;
  • gquota/grpquota — guruh kvotasi;
  • pquota/prjquota — loyiha kvotasi (project quota), XFS’ga xos uchinchi o'lchov: foydalanuvchi yoki guruhdan qat’i nazar muayyan katalogga (masalan, /data/project-a) bog'langan cheklov.

XFS’da boshqaruv edquota/setquota orqali emas, xfs_quota buyrug'i orqali bajariladi:

sudo xfs_quota -x -c 'limit bsoft=10g bhard=12g alice' /data
sudo xfs_quota -x -c 'report -u' /data

Info

XFS kvotalari fayl tizimi darajasida ishlagani uchun ular odatda ext4 talab qiladigan alohida quotacheck qadamisiz, mount paytidayoq faollashadi. Bu katta production fayl tizimlari uchun ko'pincha XFS tanlanishining sabablaridan biri.

Amaliy vaziyat: umumiy fayl serverida kvota o'rnatish

Vaziyat: /home — bir nechta foydalanuvchi bo'lishadigan ext4 fayl tizimi. Foydalanuvchilardan biri (bob) katta video fayllarni yuklab, boshqalarga joy qoldirmagan.

1-qadam. /etc/fstab da kvotalarni yoqing.

UUID=1234-5678  /home  ext4  defaults,usrquota,grpquota  0  2

2-qadam. Qayta mount qiling va dastlabki hisob-kitobni bajaring.

sudo mount -o remount /home
sudo quotacheck -cug /home
sudo quotaon /home

3-qadam. bob uchun cheklov o'rnating: soft 8 GiB, hard 10 GiB.

sudo setquota -u bob 8388608 10485760 0 0 /home

4-qadam. Natijani tasdiqlang.

sudo repquota /home
bob       --   7900000 8388608 10485760          420     0     0

5-qadam. bob cheklovdan oshib yozishga urinadi.

$ dd if=/dev/zero of=/home/bob/bigfile bs=1M count=3000
dd: error writing '/home/bob/bigfile': Disk quota exceeded

Xulosa: yozish hard limit’da to'xtadi, fayl tizimining qolgan qismi esa (boshqa foydalanuvchilar uchun) himoyalangan holda qoldi. Endi butun serverni qayta ishga tushirmasdan bob bilan keraksiz fayllarni o'chirish yoki cheklovni oshirish haqida to'g'ridan-to'g'ri gaplashish mumkin.

Keng tarqalgan xatolar

Avval quotacheck siz quotaon ni chaqirish

Agar kvota fayllari (aquota.user, aquota.group) mavjud bo'lmasa, quotaon muvaffaqiyatsiz bo'ladi. quotacheck har doim quotaon dan oldin kamida bir marta ishga tushirilishi kerak.

Soft va hard limit’larni bir xil qiymatga o'rnatish

Agar soft va hard teng bo'lsa, grace period mexanizmi amalda hech qanday ta’sir qilmaydi — foydalanuvchi cheklovga yetishi bilan ogohlantirish uchun vaqtsiz bloklanadi. Soft limit odatda hard limit’dan biroz pastroq qo'yiladi.

XFS’da ext4 sintaksisidan foydalanishga urinish

edquota/setquota XFS kvotalarini to'liq boshqara olmaydi — XFS uchun xfs_quota kerak. Fayl tizimi turlarini adashtirmang.

Faqat foydalanuvchi kvotasini yoqib, guruh kvotasini unutish

Umumiy loyiha katalogida guruh darajasidagi nazorat bo'lmasa, bitta guruhning bir nechta a’zosi, har biri o'z foydalanuvchi cheklovidan past bo'lsa ham, birgalikda joyni to'ldirib qo'yishi mumkin.

Mashqlar

  1. O'chirib tashlasa bo'ladigan VM’da alohida bo'lim yarating, uni ext4 bilan formatlang va usrquota/grpquota bilan mount qiling.
  2. Sinov foydalanuvchisi uchun setquota orqali 100 MiB soft / 150 MiB hard cheklov o'rnating va undan dd bilan oshishga urinib ko'ring.
  3. repquota chiqishidagi grace period ustunini kuzating: soft limit’dan oshgandan keyin necha kundan so'ng u hard limit sifatida qo'llana boshlashini aniqlang.
  4. Xuddi shu bo'limni xfs bilan formatlang va o'sha cheklovni xfs_quota orqali qayta o'rnating hamda ikki fayl tizimi o'rtasidagi buyruq farqlarini qayd qiling.

Mashqni bajardim deyish uchun: foydalanuvchining + belgisi va grace qiymatini ko'rsatayotgan repquota qatori berilganda grace period tugashidan oldin foydalanish kamaytirilmasa nima bo'lishini tushuntira olishingiz kerak.

Xulosa

Disk kvotasi joy va inode’lar sonini foydalanuvchi va guruh darajasida cheklaydi; soft/hard limit’lar va grace period qat’iylik bilan moslashuvchanlikni muvozanatlaydi. ext4 da kvotalar /etc/fstab parametri, quotacheck va quotaon orqali bosqichma-bosqich yoqiladi hamda edquota/setquota/repquota uchligi orqali boshqariladi. XFS’ning o'z ichki kvota mexanizmi bor; u xfs_quota orqali boshqariladi va loyiha darajasidagi kvotalarni qo'shimcha qo'llab-quvvatlaydi. Kvota foydalanuvchilarni cheklaydi, lekin fayl tizimining haqiqiy joriy bandligini ko'rsatmaydi — bu farq Disk bandligi (disk usage) maqolasida ko'rib chiqiladi.

Manbalar