NFS va autofs
Shu paytgacha ko'rilgan har bir fayl tizimi — mount va umount va fstab — fizik yoki mantiqiy (LVM) disklar bilan ishlardi: qurilmaning o'zi serverda turardi. Amalda fayl tizimi ko'pincha butunlay boshqa serverda turadi va tarmoq orqali ulanadi. Bu maqola eng keng tarqalgan tarmoq fayl tizimi — NFS (Network File System) ni va uni talab bo'yicha avtomatik boshqarish uchun ishlatiladigan xizmat — autofs ni ko'rib chiqadi. NFS mount’larini ham fstab orqali doimiy qilish mumkin, lekin tarmoq fayl tizimlari uchun oddiy fstab yozuvi ko'pincha yetarli bo'lmaydi — shuning uchun autofs bu yerda alohida ko'rib chiqiladi.
Nimalarni o'rganasiz
Bu maqola oxirida siz quyidagilarni qila olasiz:
- NFS server va klient rollarini tushuntirish hamda resursni
/etc/exportsvaexportfsbilan ulashish; - klient tomonidan NFS ulashmasiga
showmountvamount -t nfsbilan ulanish; - NFSv3 va NFSv4 o'rtasidagi asosiy farqlarni tushuntirish;
- autofs nega mavjudligini — talab bo'yicha mount qilish va ishlatilmayotgan mount’larni avtomatik uzishni tushuntirish;
/etc/auto.masterva map fayllarining tuzilishini o'qish va yozish;root_squash, tarmoq ishonchi va firewall portlari bo'yicha asosiy xavfsizlik choralarini bilish.
NFS nima va u nega kerak
NFS — Sun Microsystems tomonidan ishlab chiqilgan va Unix/Linux muhitlarida eng keng ishlatiladigan tarmoq fayl tizimi protokoli. U bitta serverdagi katalogni tarmoq orqali boshqa mashinalarga "eksport" qilish va u yerda xuddi lokal fayl tizimi kabi mount qilish imkonini beradi. Foydalanuvchi yoki dastur nuqtai nazaridan NFS orqali mount qilingan katalog deyarli oddiy lokal katalog kabi ishlaydi — farqi shundaki, fayl amallari fonda tarmoq orqali serverga yuboriladi.
Odatiy foydalanish holatlari:
- bir nechta server o'rtasida umumiy konfiguratsiya yoki ma’lumotlar katalogini ulashish;
- markazlashgan foydalanuvchi
homekataloglari (/home) — foydalanuvchi qaysi serverga kirishidan qat’i nazar bir xil fayllarni ko'radi; - markazlashgan zaxira yoki arxiv saqlash.
Server tomoni: /etc/exports va exportfs
NFS serverda qaysi kataloglar, qanday ruxsatlar bilan va kimga ulashilishi /etc/exports da belgilanadi. Format:
Misol:
/srv/nfs/shared 192.168.1.0/24(rw,sync,no_subtree_check)
/srv/nfs/backup 192.168.1.50(ro,sync,root_squash)
/home 10.0.0.0/8(rw,sync,root_squash,no_subtree_check)
Har bir qator quyidagilarni o'z ichiga oladi:
- eksport qilinayotgan katalog yo'li;
- qaysi klient(lar)ga ruxsat berilgani (aniq IP, tarmoq oralig'i yoki hostname/wildcard);
- qavs ichidagi ulashish parametrlari.
Eng ko'p ishlatiladigan parametrlar:
| Parametr | Vazifasi |
|---|---|
rw / ro |
o'qish-yozish yoki faqat o'qish huquqi |
sync |
yozish so'rovi faqat haqiqatan diskka yozilgandan keyin tasdiqlanadi (ishonchli, lekin sekinroq) |
async |
tezroq, lekin server ishdan chiqsa, ma’lumot yo'qotish xavfi bor |
root_squash |
klientning root foydalanuvchisini serverda huquqsiz foydalanuvchiga (nobody) moslaydi |
no_root_squash |
klientning root iga serverda ham to'liq root huquqlarini beradi — juda xavfli, faqat to'liq ishonchli ichki tarmoqda oqlanadi |
no_subtree_check |
subtree tekshiruvini o'chiradi; tezlik va barqarorlik uchun ko'p holatlarda tavsiya etiladi |
/etc/exports o'zgartirilgandan keyin o'zgarishlarni xizmatni qayta ishga tushirmasdan qo'llang:
-r — /etc/exports asosida barcha eksportlarni qayta o'qish, -a — har bir yozuvni qo'llash. Joriy eksportlarni ko'rish:
Klient tomoni: showmount va mount qilish
Klient tomonidan mount qilishdan oldin server qaysi kataloglarni ulashganini tekshirish mumkin:
NFS resursini qo'lda mount qilish oddiy mount buyrug'idan farq qilmaydi, faqat fayl tizimi turi nfs bo'ladi va qurilma o'rniga server:/path beriladi:
Doimiy mount uchun xuddi shu fstab mantiqi to'g'ridan-to'g'ri qo'llanadi:
Warning
NFS (va boshqa tarmoq fayl tizimlari) uchun fstab yozuviga nofail va _netdev ni qo'shish deyarli majburiy. _netdev tizimga bu fayl tizimi tarmoqqa bog'liqligini aytadi — boot tartibi buni hisobga oladi (tarmoq ko'tarilmaguncha mount qilishga urinmaydi). nofail esa server vaqtincha yetib bo'lmaydigan bo'lsa ham klient tizimi boot paytida qotib qolmasligini ta’minlaydi. Ikkalasisiz yetib bo'lmaydigan NFS server klientni qayta yuklay olmaydigan holatda qoldirib, emergency shell’ga tushirishi mumkin — bu fstab maqolasida ko'rilgan noto'g'ri yozuv vaziyatiga juda o'xshaydi.
hard va soft mount’lar: klassik NFS savoli
NFS server amal o'rtasida yo'qolib qolganda klient bilan nima bo'lishini bitta mount parametri hal qiladi va bu eng ko'p beriladigan NFS intervyu savoli.
hard(sukut bo'yicha va tavsiya etilgan) — server javob bermay qolsa, klient I/O'ni cheksiz qayta urinadi va server qaytmaguncha jarayonni bloklaydi. Fayl o'qiyotgan dastur shunchaki qotib qoladi, server qaytgach esa aynan to'xtagan joyidan davom etadi. Ma’lumotlar yo'qolmaydi va indamay qisqarib qolmaydi.soft— har biritimeobo'lganretransta urinishdan keyin I/O taslim bo'ladi va ilovaga xato (EIO) qaytaradi. Jarayon qotib qolmaydi, lekin shu tarzda muvaffaqiyatsiz bo'lgan yozish faylni indamay shikastlangan yoki qisman yozilgan holda qoldirishi mumkin, chunki ilova xatoni tekshirmasligi mumkin.
hard |
soft |
|
|---|---|---|
| Serverga yetib bo'lmaydi | Jarayon bloklanadi va cheksiz qayta urinadi | Timeout’dan keyin I/O EIO bilan muvaffaqiyatsiz bo'ladi |
| Xavf | Server qaytguncha qotib qoladi | Yozishlarda ma’lumotlarning indamay shikastlanishi |
| Qachon ishlatiladi | O'qish-yozish mount’lari, haqiqiy ma’lumot saqlaydigan har qanday narsa (sukut bo'yicha) | Kamdan-kam — faqat qotib qolish qabul qilib bo'lmaydigan faqat o'qiladigan mount’lar |
Amaliy qoida: har qanday o'qish-yozish mount’i uchun hard dan foydalaning (u bejiz sukut bo'yicha emas) va soft ni faqat qotib qolgan mount xatodan yomonroq bo'ladigan faqat o'qiladigan ma’lumotlar uchun ko'rib chiqing. Sekin server boot’ni qotirib qo'ymasligi uchun hard ni bg (boot paytida mount’ni fonda qayta urinish) va _netdev/nofail bilan birga ishlating.
Warning
Eski qo'llanmalarda (va ayrim map fayl misollarida) uchraydigan intr parametri eskirgan — Linux kernel 2.6.25 dan beri u hech qanday ta’sir qilmaydi va e’tiborsiz qoldiriladi. Zamonaviy hard mount’lar allaqachon halokatli signal (SIGKILL) bilan uziladi, shuning uchun intr keraksiz; qotib qolgan hard mount’dan chiqish uchun unga tayanmang.
NFSv3 va NFSv4 o'rtasidagi farq
| Xususiyat | NFSv3 | NFSv4 |
|---|---|---|
| Portlar | Bir nechta port (rpcbind, mountd, nfsd alohida) |
Bitta port — TCP 2049, rpcbind kerak emas |
| Holat | Stateless (holatsiz) | Stateful — server klient sessiyasini kuzatadi |
| Xavfsizlik | Asosan AUTH_SYS (klientning UID/GID’iga ishonadi) |
Kerberos orqali kuchli autentifikatsiyani qo'llab-quvvatlaydi |
| Fayllarni bloklash | Alohida NLM protokoli orqali |
Protokolning o'ziga birlashtirilgan |
| Firewall bilan ishlash | Bir nechta portni ochish kerak, murakkabroq | Bitta port tufayli ancha oddiy |
Zamonaviy tizimlarda, ayniqsa firewall va xavfsizlik talablari mavjud bo'lgan joyda, bitta port va kuchliroq autentifikatsiya tufayli NFSv4 tavsiya etiladi. Versiyani mount paytida aniq ko'rsatish mumkin:
autofs: u nega kerak
fstab orqali doimiy mount qilingan NFS resursining bitta kamchiligi bor: mount boot paytida darhol bajariladi va foydalanuvchi o'sha katalogga hech qachon murojaat qilmasa ham doimiy joyida qoladi. Bu bir nechta noqulaylik tug'diradi:
- server vaqtincha mavjud bo'lmasa, klientning boot’i sekinlashishi yoki (yuqorida ta’kidlanganidek,
nofailsiz) butunlay to'xtashi mumkin; - ishlatilmayotgan tarmoq ulanishi doimiy resursni (masalan, TCP sessiyasini) band qilib turadi;
- ko'p NFS resurslarini fstab orqali boshqarish katta, statik ro'yxatni talab qiladi.
autofs buni talab bo'yicha mount qilish bilan hal qiladi: katalog faqat unga birinchi marta murojaat qilinganda avtomatik mount qilinadi va bir muddat ishlatilmasa, avtomatik unmount qilinadi. Foydalanuvchi uchun bu shaffof — katalogga murojaat qilish odatiydek ko'rinadi, lekin ortida automount daemon’i mount/unmount jarayonini boshqaradi.
/etc/auto.master va map fayllari
autofs konfiguratsiyasi ikki darajadan iborat: markaziy /etc/auto.master fayli qaysi "trigger" katalogni qaysi map fayl boshqarishini belgilaydi, map fayl esa har bir quyi katalog qanday mount qilinishi kerakligini tasvirlaydi.
Bu yerda /mnt/nfs — autofs boshqaradigan yuqori darajali katalog, /etc/auto.nfs — map fayl, --timeout=600 esa ishlatilmayotgan mount 600 soniyadan (10 daqiqadan) keyin avtomatik ajratilishini bildiradi.
Namunaviy map fayl:
shared -rw,soft,intr 192.168.1.10:/srv/nfs/shared
backup -ro,soft,intr 192.168.1.10:/srv/nfs/backup
Har bir qator quyidagilarni o'z ichiga oladi:
- birinchi ustun —
/mnt/nfsostida kirish mumkin bo'lgan nom (masalan,/mnt/nfs/shared); - ikkinchi ustun — mount parametrlari (fstab’ga o'xshash,
-prefiksi bilan); - uchinchi ustun — manba, ya’ni
server:/path.
Konfiguratsiya o'zgartirilgandan keyin autofs xizmatini qayta ishga tushiring:
Endi /mnt/nfs/shared ga birinchi marta murojaat qilinganda (masalan, cd yoki ls bilan) autofs uni avtomatik mount qiladi:
Agar u sozlangan timeout davomida ishlatilmasa, mount avtomatik ajratiladi va mount chiqishida endi ko'rinmaydi.
Info
Direct map (/- bilan belgilanadi) indirect map’dan (yuqoridagi misol kabi, nisbiy nom bilan murojaat qilinadigan) farq qiladi. Production’da indirect map’lar ko'proq ishlatiladi, ayniqsa NIS/LDAP orqali boshqariladigan markazlashgan home kataloglari uchun, chunki ular bitta trigger katalog orqali ko'p kichik mount’larni boshqarish imkonini beradi.
Xavfsizlik bo'yicha eslatmalar
NFS tarmoq orqali ishlagani uchun uning konfiguratsiyasi quyidagi jihatlarga alohida e’tibor berishni talab qiladi.
root_squash har doim yoqilgan bo'lishi kerak, agar buning aniq va asosli sababi bo'lmasa. no_root_squash klientning root foydalanuvchisiga serverdagi eksport qilingan katalogda ham to'liq root huquqlarini beradi — klient mashinasi buzib olinsa, bu serverni butunlay ochib qo'yadi.
Tarmoq ishonchi (AUTH_SYS) cheklovlari. NFSv3 va standart NFSv4 konfiguratsiyasida klient autentifikatsiyasi ko'pincha faqat klientning o'zi taqdim etgan UID/GID ma’lumotlariga asoslanadi — ishonchsiz tarmoqda buni soxtalashtirish mumkin. Shu sababli NFS odatda ochiq internet orqali emas, faqat ishonchli, izolyatsiyalangan ichki tarmoqda (masalan, xususiy VLAN’da) tavsiya etiladi. Agar kuchliroq autentifikatsiya kerak bo'lsa, NFSv4 + Kerberos (sec=krb5) ni ko'rib chiqishga arziydi.
Firewall portlari. NFSv4 uchun odatda bitta TCP port — 2049 ni ochish yetarli. NFSv3 esa turli portlarda bir nechta xizmatdan (rpcbind — 111, mountd, nfsd, nlockmgr, statd) foydalanadi; agar ular /etc/nfs.conf yoki mos konfiguratsiya fayli orqali qat’iy portlarga bog'lanmagan bo'lsa, ko'pincha tasodifiy portlar oralig'idan tanlanadi. Bu NFSv3 ni firewall ortida sozlashni ancha murakkablashtiradi — amalda odatda NFSv4 afzal ko'rilishining yana bir sababi.
Danger
Eksport ro'yxatida <client> sifatida cheklanmagan * yoki haddan tashqari keng tarmoq oralig'ini (masalan, 0.0.0.0/0) yozish, ayniqsa rw va no_root_squash bilan birga, NFS serverni butun tarmoqqa ochiq zaif nuqtaga aylantiradi. Eksportlar har doim aniq klient IP’si yoki kerakli minimal tarmoq oralig'i bilan cheklanishi kerak.
Amaliy vaziyat: NFS resursini autofs orqali talab bo'yicha mount qilish
Muammo. Bir nechta klient umumiy /srv/nfs/shared katalogiga kerak bo'lganda avtomatik kirishi kerak, lekin doimiy fstab yozuvi orqali emas — chunki resurs kamdan-kam ishlatiladi va server vaqti-vaqti bilan texnik xizmat uchun o'chiriladi.
Tekshiruv (server tomonida eksport mavjudligini tasdiqlash).
Amal (klientda autofs’ni sozlash).
Natija. Katalogga birinchi murojaatda avtomatik mount ishlaydi:
Agar u 5 daqiqa (300 soniya) ishlatilmasa, resurs avtomatik unmount qilinadi — kutib, mount | grep shared ni qayta ishga tushirish buni tasdiqlaydi (natija bo'sh bo'lishi kerak).
Xulosa. autofs statik fstab yozuvini talab bo'yicha mount qilish bilan almashtiradi — serverning vaqtincha mavjud bo'lmasligi klient boot’iga umuman ta’sir qilmaydi, chunki mount faqat haqiqiy foydalanishda sodir bo'ladi.
Keng tarqalgan xatolar
root_squash ni o'chirish yoki e’tiborsiz qoldirish
no_root_squash faqat muayyan, cheklangan, ishonchli vaziyatlarda ishlatilishi kerak (masalan, bitta ma’lum klientga ishonadigan zaxira server). Sukut bo'yicha root_squash yoqilgan qolishi kerak.
fstab’dagi NFS mount uchun nofail/_netdev ni tushirib qoldirish
Bu boot muammosiga olib keladigan eng keng tarqalgan xato — fstab maqolasida ko'rilgan umumiy qoidaning tarmoq fayl tizimlariga xos holati.
NFSv3 uchun firewall sozlashda faqat 2049-portni ochish
NFSv3 bir nechta portdan (rpcbind, mountd, statd) foydalanadi; faqat 2049-portni ochish mount’ning muvaffaqiyatsiz bo'lishiga sabab bo'ladi. Yo NFSv4 ga o'ting, yo NFSv3 portlarini /etc/nfs.conf orqali qat’iylashtirib, ularning hammasini oching.
autofs timeout’ini juda qisqa qo'yish
Juda qisqa timeout (masalan, 10 soniya) tez-tez ishlatiladigan resursning doimiy mount va unmount qilinishiga sabab bo'lib, ortiqcha tarmoq va CPU yuklamasini yaratadi. Timeout resurs aslida qanchalik tez-tez ishlatilishiga mos kelishi kerak (odatda bir necha daqiqa).
Mashqlar
- O'chirib tashlasa bo'ladigan ikkita VM tayyorlang: biri NFS server (
nfs-kernel-server), ikkinchisi klient. Serverda bitta katalognirw,sync,no_subtree_checkbilan eksport qiling. - Klientda eksportni
showmount -ebilan tekshiring, so'ngmount -t nfsbilan qo'lda ulaning, faylga yozing va u server tomonida paydo bo'lganini tasdiqlang. - Xuddi shu resursni fstab o'rniga autofs orqali qisqa
--timeout(masalan, 60 soniya) bilan sozlang va uning avtomatik unmount qilinishini kuzating. - Eksportni navbat bilan
root_squashvano_root_squashbilan sinab ko'ring va klientningrootfoydalanuvchisi yaratgan fayl serverda qaysi egaga (nobodyyokiroot) tegishli bo'lishini solishtiring.
Mashqni bajardim deyish uchun: NFS eksport konfiguratsiyasi berilganda root_squash yoqilganmi-yo'qmi, aniqlay olishingiz va yoqilmagan bo'lsa, xavfsizlik oqibatini tushuntira olishingiz kerak.
Xulosa
NFS server tomonida kataloglarni /etc/exports va exportfs orqali tarmoqqa ochadi, klient tomonida esa oddiy mount -t nfs yoki fstab yozuvi (_netdev, nofail bilan) orqali ulanadi. Bitta port va kuchliroq autentifikatsiya tufayli NFSv4 NFSv3 dan afzal ko'riladi. autofs statik, doimiy mount’ni talab bo'yicha mount qilish va avtomatik unmount qilish bilan almashtiradi, bu esa kamdan-kam ishlatiladigan yoki vaqti-vaqti bilan mavjud bo'ladigan tarmoq resurslari bilan ishlashni ancha barqarorroq qiladi. root_squash, qattiq tarmoq cheklovlari va to'g'ri firewall sozlamalari — NFS xavfsizligi uchun minimal talablar. Mount qilingan fayl tizimlari qancha joy egallashi va bu har bir foydalanuvchi uchun qanday cheklanishi Disk kvotalari maqolasida davom etadi.