Skip to content

Disk kvotalari

NFS va autofs maqolasida bitta fayl tizimi tarmoq orqali bir nechta mijozga ulanishi ko'rildi. Ko'p foydalanuvchili yoki umumiy fayl serverda yana bir muammo paydo bo'ladi: bitta foydalanuvchi yoki bitta guruh butun bo'limni to'ldirib qo'yishi mumkin, va bu boshqa hamma uchun xizmatni to'xtatadi. Disk kvotasi — administratorga har bir foydalanuvchi yoki guruh qancha joy va qancha fayl (inode) ishlatishi mumkinligini fayl tizimi darajasida cheklash imkonini beruvchi mexanizm.

O'quv maqsadlari

Maqolani tugatgach:

  • user va group kvotasi orasidagi farqni tushunasiz;
  • soft limit, hard limit va grace period tushunchalarini va ular birga qanday ishlashini bilasiz;
  • ext4 fayl tizimida /etc/fstab orqali kvotani yoqa olasiz va quotacheck/quotaon bilan ishga tushira olasiz;
  • edquota, setquota va repquota bilan kvotani belgilash va nazorat qila olasiz;
  • XFS fayl tizimidagi kvota mexanizmi ext4'dan nima bilan farq qilishini tushunasiz.

Nima uchun kvota kerak

Umumiy serverda (masalan, uy kataloglari /home da, yoki fayl almashish serverida) barcha foydalanuvchilar bitta fayl tizimidan foydalanadi. Kvotasiz vaziyatda bitta foydalanuvchi — tasodifan yoki ataylab — butun bo'limni to'ldirishi mumkin, natijada boshqa foydalanuvchilar fayl yoza olmay qoladi, hatto tizim loglari va vaqtinchalik fayllar uchun ham joy qolmaydi.

Kvota shu muammoni oldini oladi: har bir foydalanuvchi yoki guruhga alohida chegara qo'yiladi, chegaradan oshib ketish urinishi disk quota exceeded xatosi bilan to'xtatiladi — butun fayl tizimi emas, faqat shu foydalanuvchining yozish amali.

Info

Kvota — xavfsizlik mexanizmi emas, resurs taqsimoti vositasi. U foydalanuvchini fayllarni o'qishdan yoki mavjud fayllarni bajarishdan to'xtatmaydi — faqat yangi joy egallashini cheklaydi.

User va group kvota farqi

Kvota ikki mustaqil darajada belgilanishi mumkin:

  • User kvota — muayyan bitta foydalanuvchiga (UID) qo'yilgan chegara. Masalan, alice foydalanuvchisi /home da ko'pi bilan 10 GiB ishlatishi mumkin.
  • Group kvota — muayyan guruhga (GID) qo'yilgan umumiy chegara. Guruh ichidagi barcha foydalanuvchilarning fayllari birgalikda shu chegaraga hisoblanadi. Masalan, dev guruhi umumiy loyihalar katalogida ko'pi bilan 50 GiB ishlatishi mumkin, guruh ichidagi har bir a'zo alohida emas.

Ikkalasi bir vaqtda ham ishlatilishi mumkin: foydalanuvchi o'zining shaxsiy limitidan tashqari, a'zo bo'lgan guruhning umumiy limitiga ham bog'liq bo'ladi — qaysi biri birinchi to'lsa, o'sha chegara ishlaydi.

Soft limit, hard limit va grace period

Kvota tizimi ikkita chegara darajasini qo'llab-quvvatlaydi:

Tushuncha Ma'nosi
Soft limit Ogohlantirish chegarasi. Undan oshib ketish darhol taqiqlanmaydi, lekin foydalanuvchiga ogohlantirish ko'rsatiladi va grace period boshlanadi
Hard limit Qat'iy chegara. Bu qiymatdan oshib ketish umuman mumkin emas — yozish amali darhol Disk quota exceeded xatosi bilan to'xtaydi
Grace period Soft limit oshib ketgandan keyin, hard limitgacha vaqtinchalik ishlashga ruxsat berilgan muddat (odatda kunlarda)

Mantiq quyidagicha: foydalanuvchi soft limitdan oshsa, tizim darhol bloklamaydi — grace period davomida ishlashni davom ettirish mumkin (masalan, katta faylni tugatish uchun). Agar grace period tugagunga qadar foydalanish soft limitdan pastga tushmasa, tizim avtomatik ravishda soft limitni ham hard limit kabi qat'iy qo'llay boshlaydi.

0 ────────── soft limit ────────── hard limit
   erkin        ogohlantirish +        yozish
   foydalanish  grace period          taqiqlanadi

Bu ikki bosqichli yondashuv real hayotda muhim: foydalanuvchiga vaqtinchalik biroz ortiqcha joy berib, lekin muammoni cheksiz davom ettirishga yo'l qo'ymaydi.

/etc/fstab da kvotani yoqish (ext4)

Kvota fayl tizimi mount qilinganda usrquota va/yoki grpquota opsiyalari bilan yoqiladi. /etc/fstab da tegishli qatorga qo'shiladi:

UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx  /home  ext4  defaults,usrquota,grpquota  0  2
  • usrquota — user kvotasini yoqadi;
  • grpquota — group kvotasini yoqadi.

/etc/fstab sintaksisi va UUID orqali mount qilish fstab maqolasida batafsil ko'rilgan.

O'zgarishdan keyin fayl tizimini qayta mount qilish (yoki serverni qayta yuklash):

sudo mount -o remount /home

quotacheck: boshlang'ich hisob-kitob

Kvota yoqilgandan keyin, mavjud fayllarning har bir egasi qancha joy ishlatayotganini birinchi marta hisoblash kerak. Buning uchun quotacheck ishlatiladi:

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

Warning

quotacheck fayl tizimini skanerlaydi va katta bo'limlarda vaqt talab qilishi mumkin. Faol yozuv davom etayotgan production fayl tizimida noto'g'ri natija olish xavfi bor — imkon qadar kam yuklama vaqtida yoki fayl tizimi read-only rejimida bajarish tavsiya etiladi.

quotaon / quotaoff: kvotani ishga tushirish

Hisob-kitob fayllari tayyor bo'lgandan keyin, 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 — faqat nazoratni vaqtincha to'xtatadi.

edquota: kvota belgilash (interaktiv)

edquota foydalanuvchi yoki guruh uchun soft/hard limitlarni tahrirlash imkonini beruvchi interaktiv vosita — tizim standart matn muharririni ($EDITOR) ochadi:

sudo edquota -u alice

Ochilgan tahrirlash oynasi taxminan quyidagicha 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 (soft/hard) o'lchanadi;
  • inodes ustunlari fayl sonini cheklaydi — bu katta miqdorda mayda fayl yaratishning oldini oladi, hatto ular kam joy egallasa ham.

Guruh uchun analog buyruq:

sudo edquota -g dev

Grace period ni sozlash uchun alohida buyruq:

sudo edquota -t

setquota: kvota belgilash (skript uchun)

edquota interaktiv muharrirni talab qiladi, avtomatlashtirish uchun esa setquota qulayroq — bitta buyruqda barcha qiymatlar beriladi:

sudo setquota -u alice 10485760 12582912 8000 25000 /home

Argumentlar tartibi: foydalanuvchi soft-block hard-block soft-inode hard-inode fayl-tizimi.

sudo setquota -g dev 52428800 62914560 40000 50000 /home

setquota skriptlarda va konfiguratsiya-boshqaruv vositalarida (Ansible va h.k.) ko'p foydalaniladi, chunki u interaktiv muloqot talab qilmaydi.

repquota: hisobot olish

Barcha foydalanuvchilar yoki guruhlar bo'yicha joriy foydalanish va limitlarni bir jadvalda ko'rish uchun:

sudo repquota /home

Namunaviy natija:

*** 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 limitdan oshib ketgan va grace period tugashiga 6 kun qolgan, shundan keyin yozish taqiqlanadi degani.

XFS fayl tizimidagi kvota: pquota/gquota

ext4 kvotasi fayl tizimi ustida qo'shimcha, alohida boshqariladigan qatlam sifatida ishlaydi (quotacheck, aquota.user fayllari orqali). XFS esa bundan farqli — kvota mexanizmi fayl tizimining o'ziga o'rnatilgan (built-in), tashqi quotacheck talab qilinmaydi.

XFS da mount opsiyalari boshqacha nomlanadi:

UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx  /data  xfs  defaults,usrquota,grpquota,pquota  0  2
  • uquota/usrquota — user kvotasi;
  • gquota/grpquota — group kvotasi;
  • pquota/prjquotaproject kvota, XFS'ga xos uchinchi daraja: foydalanuvchi yoki guruhdan qat'i nazar, muayyan katalogga (masalan, /data/project-a) chegara qo'yish imkonini beradi.

XFS'da boshqaruv xfs_quota buyrug'i orqali amalga oshiriladi, edquota/setquota emas:

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

Info

XFS kvotasi fayl tizimi darajasida ishlaganligi sababli, odatda ext4dagi alohida quotacheck bosqichisiz, mount paytidayoq faollashadi. Bu XFS'ning katta production fayl tizimlarida tez-tez tanlanishining sabablaridan biri.

Amaliy ssenariy: umumiy fayl serverida kvota o'rnatish

Vaziyat: /homeext4 fayl tizimi, bir nechta foydalanuvchi umumiy ishlatadi. Bitta foydalanuvchi (bob) katta video fayllar yuklab, boshqalarga joy qoldirmayapti.

1-qadam. Kvotani /etc/fstab da yoqish.

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

2-qadam. Qayta mount qilish va boshlang'ich hisoblash.

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

3-qadam. bob uchun chegara belgilash: soft 8 GiB, hard 10 GiB.

sudo setquota -u bob 8388608 10485760 0 0 /home

4-qadam. Natijani tekshirish.

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

5-qadam. bob chegaradan oshirib faylga 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 jarayoni hard limitda to'xtadi, lekin fayl tizimining qolgan qismi (boshqa foydalanuvchilar uchun) himoyalangan qoldi. Endi bob bilan alohida gaplashib, keraksiz fayllarni o'chirish yoki limitni oshirish masalasini hal qilish mumkin — butun serverni qayta ishga tushirmasdan.

Ko'p uchraydigan xatolar

quotachecksiz quotaon chaqirish

Kvota fayllari (aquota.user, aquota.group) mavjud bo'lmasa, quotaon xato beradi. quotacheck har doim quotaondan oldin, kamida bir marta bajarilishi kerak.

Soft va hard limitni bir xil qiymat qilib qo'yish

Agar soft va hard bir xil bo'lsa, grace period mexanizmi amalda ishlamaydi — foydalanuvchi chegaraga yetgan zahoti bloklanadi, ogohlantirish uchun vaqt qolmaydi. Odatda soft limit hard limitdan biroz past qo'yiladi.

ext4 sintaksisini XFS'da ishlatishga urinish

edquota/setquota XFS kvotasini to'liq boshqara olmaydi — XFS uchun xfs_quota ishlatilishi shart. Fayl tizimi turini aralashtirib yubormaslik kerak.

Faqat user kvotasini yoqib, group kvotasini unutish

Umumiy loyihalar katalogida guruh darajasidagi nazoratsiz, bitta guruhning bir nechta a'zosi birgalikda joyni tugatishi mumkin, garchi har bir a'zo alohida o'z user limitidan pastda bo'lsa ham.

Amaliy mashqlar

  1. Disposable VM'da alohida bo'lim yarating, uni ext4 bilan formatlab, usrquota/grpquota bilan mount qiling.
  2. Test foydalanuvchisi uchun setquota orqali soft 100 MiB, hard 150 MiB chegara qo'ying va dd bilan chegaradan oshirib ko'ring.
  3. repquota natijasidagi grace period ustunini kuzating: soft limitdan oshgach necha kundan keyin hard limit sifatida qo'llanishini aniqlang.
  4. Xuddi shu bo'limni xfs bilan formatlab, xfs_quota orqali bir xil chegarani qayta o'rnating va ikkala fayl tizimidagi buyruqlar farqini yozib chiqing.

Xulosa

Disk kvotasi user va group darajasida joy hamda inode sonini cheklaydi, soft/hard limit va grace period orqali qat'iylik va moslashuvchanlik o'rtasida muvozanat yaratadi. ext4da kvota /etc/fstab opsiyasi, quotacheck va quotaon orqali qadam-baqadam yoqiladi, boshqaruv esa edquota/setquota/repquota uchligi bilan amalga oshiriladi. XFS o'zining built-in kvota mexanizmiga ega va xfs_quota orqali boshqariladi, qo'shimcha ravishda project-darajasidagi kvotani ham qo'llab-quvvatlaydi. Kvota foydalanuvchilarni cheklaydi, lekin butun fayl tizimining real bandligini ko'rsatmaydi — bu farq disk bandligi maqolasida ko'riladi.

Manbalar