Tarkibga o'tish

fstab

mount va umount maqolasida ko'rsatilganidek, qo'lda ishga tushirilgan mount buyrug'i vaqtinchalik — tizim qayta yuklanganda qo'lda mount qilingan har bir fayl tizimi yo'qoladi. Amalda disklar, tarmoq ulashmalari va boshqa qurilmalar tizim har safar boot qilganda kelishilgan parametrlar bilan avtomatik mount qilinishi kerak. Linux aynan shu maqsad uchun /etc/fstab (file system table) dan foydalanadi: bu boot paytida mount -a orqali o'qiladigan va har bir fayl tizimi qanday va qaysi parametrlar bilan mount qilinishini belgilaydigan markaziy konfiguratsiya fayli. Keyingi maqolalardan biri — Disk kvotalari da ko'riladigan foydalanuvchi darajasidagi cheklovlar ham ko'pincha aynan shu yerda belgilangan mount parametrlariga bog'liq.

Nimalarni o'rganasiz

Bu maqola oxirida siz quyidagilarni qila olasiz:

  • /etc/fstab ning olti ustunli formatini o'qish va yozish;
  • nega UUID yoki label qurilma yo'lidan (/dev/sdX) ishonchliroq ekanini tushuntirish;
  • eng ko'p ishlatiladigan mount parametrlarini bilish: defaults, noatime, nofail, ro;
  • dump va fsck ustunlarining vazifasini tushuntirish;
  • yangi fstab yozuvini qayta yuklashdan oldin mount -a va findmnt --verify bilan xavfsiz sinash;
  • noto'g'ri fstab yozuvi tizimni boot qila olmaydigan holatda qoldirishi mumkinligini va bunday vaziyatni qanday tuzatishni bilish.

fstab formati: olti ustun

/etc/fstab dagi har bir qator (bo'sh qatorlar va # bilan boshlanadigan izohlardan tashqari) bitta fayl tizimini tasvirlaydi va bo'sh joy yoki tab bilan ajratilgan oltita ustundan iborat:

<device>  <mount point>  <fs type>  <options>  <dump>  <fsck order>

Misol:

/etc/fstab
# <device>                                 <mount point>  <fs type>  <options>       <dump>  <fsck>
UUID=1b4e28ba-2fa1-11d2-883f-0016d3cca427  /              xfs        defaults        0       1
UUID=9c8e6f3a-1234-4a3b-9abc-0011223344ee  /home          ext4       defaults,noatime 0      2
LABEL=data                                 /mnt/data      ext4       defaults,nofail 0       2
/dev/sda2                                  swap           swap       defaults        0       0

Ustunlar tartib bo'yicha:

  1. device — qurilma yo'li, label (LABEL=...) yoki UUID (UUID=...);
  2. mount point — qurilma mount qilinishi kerak bo'lgan katalog (swap uchun swap so'zi ishlatiladi);
  3. fs type — fayl tizimi turi (ext4, xfs, swap, nfs va hokazo); u mkfs bilan yaratilgandagi turga mos kelishi kerak;
  4. options — mount parametrlari, vergul bilan ajratilgan, bo'sh joysiz (defaults,noatime to'g'ri, defaults, noatime noto'g'ri);
  5. dump — dump zaxira vositasi uchun flag (0 — e’tiborsiz qoldirish, 1 — zaxira nusxa olish);
  6. fsck order — boot paytida fsck qaysi tartibda ishlashi (0 — tekshirilmaydi, 1 — birinchi tekshiriladi, odatda / uchun, 2 — keyin tekshiriladi, qolgan fayl tizimlari uchun).

Info

dump bugun amalda kamdan-kam ishlatiladi (uning o'rnini boshqa vositalar — rsync, tar, bulut zaxira xizmatlari egallagan), shuning uchun ko'p tizimlarda bu ustun har doim 0. fsck ustuni esa hali ham muhim, ayniqsa uni talab qiladigan ext4 kabi fayl tizimlari uchun.

Nega /dev/sdX o'rniga UUID yoki label

/dev/sda, /dev/sdb kabi nomlar disklarning aniqlanish tartibiga bog'liq — bu tartib bir xil qolishi kafolatlanmagan. Yangi disk qo'shish, USB qurilma ulash yoki hatto oddiy qayta yuklash disklarni nomlash tartibini o'zgartirishi mumkin. Natijada agar fstab da /dev/sdb1 kabi qattiq yozilgan yo'l bo'lsa, keyingi boot’da bu nom butunlay boshqa diskka ishora qilishi yoki umuman mavjud bo'lmasligi mumkin.

UUID (universally unique identifier) va label diskning o'ziga bog'langan, fayl tizimi yaratilganda metama’lumot sifatida yoziladi — disk qaysi portga ulanganidan yoki qaysi tartibda aniqlanganidan qat’i nazar ular bir xil qoladi. Shu sababli production tizimlar deyarli har doim UUID yoki label’dan foydalanadi.

UUID’larni ko'rish:

lsblk -f

yoki faqat UUID kerak bo'lsa:

sudo blkid

Namunaviy chiqish:

/dev/sda1: UUID="1b4e28ba-2fa1-11d2-883f-0016d3cca427" TYPE="xfs" PARTUUID="..."
/dev/sda2: UUID="7f3c9e21-..." TYPE="swap"
/dev/sdb1: LABEL="data" UUID="9c8e6f3a-..." TYPE="ext4"

Label o'rnatish fayl tizimiga mos vosita bilan bajariladi, masalan, ext4 uchun:

sudo e2label /dev/sdb1 data

Warning

UUID yoki label’dan foydalanish /dev/sdX nomlarini butunlay unutish degani emas — troubleshooting paytida qaysi UUID qaysi fizik diskka tegishli ekanini (lsblk/blkid orqali) bilish hali ham muhim. Farq shundaki, fstab ichida fizik nom emas, doimiy identifikator ishlatiladi.

Ko'p ishlatiladigan mount parametrlari

Parametr Vazifasi
defaults standart to'plam: rw, suid, dev, exec, auto, nouser, async
noatime fayl har safar o'qilganda kirish vaqti yozuvini yangilamaslik — ayniqsa tez-tez o'qiladigan fayl tizimlarida I/O yuklamasini kamaytiradi
nofail qurilma boot paytida topilmasa ham tizim xatosiz davom etadi (tafsilotlar quyida)
ro faqat o'qish uchun mount qilish
noexec bu fayl tizimidagi fayllarni bajarishga ruxsat bermaslik (masalan, /tmp uchun xavfsizlik chorasi)
nosuid setuid/setgid bitlarini e’tiborsiz qoldirish
user / nouser oddiy foydalanuvchiga mount qilishga ruxsat berish yoki bermaslik

Bir nechta parametr vergul bilan birlashtiriladi:

UUID=9c8e6f3a-...  /mnt/data  ext4  defaults,noatime,nofail  0  2

Info

nofail ayniqsa tashqi disk, tarmoq fayl tizimi (NFS kabi) yoki har doim ham ulanmagan bo'lishi mumkin bo'lgan har qanday qurilma uchun muhim: bu parametrsiz mount muvaffaqiyatsiz bo'lsa, tizim butun boot jarayonini to'xtatib, emergency shell’ga tushishi mumkin.

mount -a: fstab’ni qo'llash va sinash

Faylni tahrirlagandan keyin tizimni qayta yuklamasdan har bir fstab yozuvini qo'llash uchun:

sudo mount -a

mount -a fstab dagi har bir qatorni o'qiydi va hali mount qilinmagan fayl tizimini mount qiladi. Agar qatorda sintaksis xatosi yoki noto'g'ri UUID bo'lsa, mount -a xato xabari bilan to'xtaydi — xatoni qayta yuklashdan oldin ushlab qoladi.

Agar fayl tizimi turi yoki mount parametri noto'g'ri yozilgan bo'lsa, odatiy xato shunday ko'rinadi:

mount: /mnt/data: wrong fs type, bad option, bad superblock on /dev/sdb1, missing codepage or helper program, or other error.

findmnt --verify: chuqurroq tekshiruv

mount -a faqat mount qilishga urinadi — u fstab formatining o'zini chuqur tekshirmaydi (masalan, ustunlar soni, takrorlangan mount nuqtasi). findmnt --verify aynan shu uchun yaratilgan:

findmnt --verify

Hammasi to'g'ri bo'lsa, namunaviy chiqish:

0 parse errors and 0 known filesystem checks

Agar xato bo'lsa, findmnt --verify aynan qaysi qatorda va nega muammo borligini ko'rsatadi — masalan, takrorlangan mount nuqtasi, mavjud bo'lmagan UUID yoki noto'g'ri parametr nomi.

Amaliy vaziyat: qayta yuklashdan oldin fstab yozuvini tekshirish

Muammo. Yangi diskni /mnt/archive ga doimiy mount qilish kerak, lekin fstab yozuvini qo'lda qo'shish xato yozib qo'yish xavfini tug'diradi — bu esa keyingi qayta yuklashda tizimni boot qila olmaydigan holatda qoldirishi mumkin.

Tekshiruv (yozuv qo'shishdan oldin UUID’ni topish).

sudo blkid /dev/sdc1
/dev/sdc1: UUID="a1b2c3d4-e5f6-4789-90ab-cdef01234567" TYPE="ext4"

Amal (fstab yozuvini qo'shish).

echo 'UUID=a1b2c3d4-e5f6-4789-90ab-cdef01234567  /mnt/archive  ext4  defaults,nofail  0  2' | sudo tee -a /etc/fstab

Tekshirish (qayta yuklashdan oldin, xavfsiz muhitda).

sudo mkdir -p /mnt/archive
findmnt --verify
sudo mount -a

findmnt --verify sintaksis xatolarini ushlaydi, mount -a esa mount haqiqatan muvaffaqiyatli bo'lishini tekshiradi. Agar ikkalasi ham xatosiz o'tsa:

mount | grep /mnt/archive
df -hT /mnt/archive

Natija. Yozuv mount nuqtasi, UUID va fayl tizimi turi bo'yicha to'g'ri ekani qayta yuklashsiz tasdiqlandi.

Xulosa. mount -a va findmnt --verify ni birga ishga tushirish yangi fstab yozuvi boot muammosiga sabab bo'lmasligini qayta yuklamasdan oldindan bilish imkonini beradi. Bu ikki tekshiruvni o'tkazib yubormaslik — production serverda fstab ga o'zgarish kiritishning asosiy qoidasi.

Danger

nofail parametrisiz qo'shilgan noto'g'ri fstab yozuvi (mavjud bo'lmagan UUID, noto'g'ri fayl tizimi turi, xato yozuv) keyingi boot’da tizimni qotirib qo'yishi va uni emergency mode yoki initramfs shell'ga tushirishi mumkin. Bunday holatda tizim boot qila olmaydi va foydalanuvchi darajasidagi hech qanday xizmat ishga tushmaydi — tuzatish uchun fizik yoki konsol orqali kirish kerak.

Noto'g'ri fstab yozuvi sababli boot qilmayotgan tizimni tuzatish

Agar server qayta yuklangandan keyin noto'g'ri fstab yozuvi sababli emergency shell’ga tushsa, odatda quyidagi qadamlar yordam beradi:

  1. Emergency/rescue shell’ga kiring. Ko'p distributivlarda buzilgan fstab avtomatik ravishda root parolini so'raydigan texnik xizmat shell’ini ochadi (systemd asosidagi tizimlarda: "Give root password for maintenance").
  2. Fayl tizimini yozish uchun oching, agar u faqat o'qish rejimida bo'lsa:

    mount -o remount,rw /
    
  3. fstab’dagi muammoli qatorni toping va uni vaqtincha izohga aylantiring (# qo'shib):

    nano /etc/fstab
    
  4. Qolgan yozuvlarni findmnt --verify bilan tekshiring, so'ng qayta yuklang:

    findmnt --verify
    reboot
    
  5. Tizim muvaffaqiyatli boot qilgach, muammoli qurilmani to'g'ri UUID va nofail parametri bilan qayta qo'shing.

Kelajakda bunday vaziyatning oldini olish uchun nofail ni standart amaliyot sifatida qo'llash tavsiya etiladi — ayniqsa har doim ulangan bo'lishi kafolatlanmagan qurilmalar (tashqi disk, tarmoq fayl tizimi) uchun, chunki u o'sha mount muvaffaqiyatsiz bo'lganda ham boot jarayoniga davom etish imkonini beradi.

Keng tarqalgan xatolar

Parametrlar orasida bo'sh joy qoldirish

defaults, noatime (vergul + bo'sh joy) fstab tahlilchisini chalkashtirib, kutilmagan xatoga sabab bo'lishi mumkin. To'g'ri format bo'sh joysiz: defaults,noatime.

Tarmoq fayl tizimlari uchun nofail ni unutish

Agar NFS kabi tarmoq fayl tizimi tarmoq hali mavjud bo'lmagan paytda boot qilsa, nofail siz butun boot jarayoni qotib qolishi mumkin. Bu NFS va autofs maqolasida chuqurroq ko'rib chiqiladi.

Yozuvni avval tekshirmasdan to'g'ridan-to'g'ri qayta yuklash

Avval mount -a va findmnt --verify bilan tekshirmasdan darhol qayta yuklash — production muhitdagi eng keng tarqalgan va eng qimmatga tushadigan xato. Ikkala tekshiruv bir necha soniya oladi, lekin buzilgan boot’ning oldini oladi.

Mashqlar

  1. O'chirib tashlasa bo'ladigan VM’da qo'shimcha bo'lim yarating, uning UUID’sini blkid bilan toping va uni nofail parametri bilan fstab’ga qo'shing.
  2. fstab’ga ataylab noto'g'ri UUID yozing va findmnt --verify hamda mount -a xato haqida qanday xabar berishini kuzating (qayta yuklamasdan!).
  3. Noto'g'ri yozuvni tuzating va muammo yo'qolganini mount -a bilan tasdiqlang.
  4. stat yordamida noatime bilan mount qilingan fayl tizimida kirish vaqti yangilanadimi-yo'qmi, uni noatime siz mount qilingani bilan solishtiring.

Mashqni bajardim deyish uchun: taklif qilingan yangi fstab yozuvi berilganda u qayta yuklashdan oldin xavfsiz ekanini tekshiradigan ikkita buyruqni va ularning har biri boshqasi tekshirmaydigan nimani tekshirishini ayta olishingiz kerak.

Xulosa

/etc/fstab mount konfiguratsiyasini olti ustunli formatda saqlaydi va uni boot paytida avtomatik qo'llaydi. UUID yoki label’dan foydalanish disklarni nomlash tartibi o'zgarishidan himoya qiladi, nofail esa har doim ham mavjud bo'lmasligi mumkin bo'lgan qurilma tufayli boot qotib qolmasligini ta’minlaydi. Har qanday o'zgarishni qayta yuklashdan oldin mount -a va findmnt --verify bilan tekshirish tizim noto'g'ri yozuv sababli boot qila olmay qolishining oldini olishning eng ishonchli usuli. Keyingi maqola — NFS va autofs xuddi shu fstab bilimini tarmoq orqali mount qilinadigan fayl tizimlariga qanday qo'llashni ko'rsatadi.

Manbalar