Tarkibga o'tish

mount va umount

Swap fayl va partition maqolasida virtual xotirani qanday tayyorlash va yoqish ko'rib chiqildi — oddiy fayl tizimi kabi u ham avval qurilmani tayyorlashni (mkswap yoki mkfs), so'ng uni tizimga "ulashni" talab qiladi. Fayl tizimlari uchun bu ulash qadami mount buyrug'i orqali bajariladi: yangi yaratilgan yoki mavjud fayl tizimining qurilmasi muayyan katalogga (mount nuqtasiga) ulanmaguncha oddiy yo'l orqali unga kirib bo'lmaydi. Bu maqola mount va umount buyruqlarini, ularning asosiy parametrlarini va keng tarqalgan muammolarni ko'rib chiqadi. Keyingi maqola — fstab shu asosda mount’larni qayta yuklashlar osha saqlanadigan qiladi.

Nimalarni o'rganasiz

Bu maqola oxirida siz quyidagilarni qila olasiz:

  • mount va umount ning asosiy sintaksisidan foydalanish;
  • bind mount nima ekanini va qachon kerakligini tushuntirish;
  • mount qilingan fayl tizimi parametrlarini uni unmount qilmasdan mount -o remount bilan o'zgartirish;
  • "device is busy" xatosini lsof/fuser bilan aniqlash va umount -l (lazy umount) qachon o'rinli ekanini bilish;
  • mount namespace tushunchasi haqida umumiy tasavvurga ega bo'lish;
  • proc, sysfs va tmpfs kabi virtual fayl tizimlarining vazifasini farqlash.

mount: asosiy sintaksis

Eng oddiy shakl:

sudo mount /dev/sdb1 /mnt/data

Bu yerda /dev/sdb1 — mount qilinayotgan qurilma (yoki bo'lim), /mnt/data esa mount nuqtasi — fayl tizimi mazmuni ostida ko'rinadigan katalog. Mount nuqtasi bo'sh katalog sifatida oldindan mavjud bo'lishi kerak:

sudo mkdir -p /mnt/data
sudo mount /dev/sdb1 /mnt/data

Argumentsiz mount hozir mount qilingan barcha fayl tizimlarini ro'yxatlaydi:

mount

Info

mount chiqishi faqat fizik disklarni emas, proc, sysfs va tmpfs kabi virtual fayl tizimlarini ham ko'rsatadi (ular quyida ko'rib chiqiladi). Faqat haqiqiy saqlash qurilmalari bilan cheklangan ko'rinish uchun df -hT qulayroq — u disk hajmi va bo'sh joyni ham ko'rsatadi.

Kerak bo'lganda fayl tizimi turini aniq ko'rsatish (mount odatda uni avtomatik aniqlaydi):

sudo mount -t ext4 /dev/sdb1 /mnt/data

Foydali umumiy mount parametrlari (-o bilan, vergul bilan ajratib birlashtiriladi):

Parametr Vazifasi
ro faqat o'qish uchun mount qilish
rw o'qish/yozish (sukut bo'yicha)
noexec bu fayl tizimidagi fayllarni bajarishga ruxsat bermaslik
nosuid setuid/setgid bitlarini e’tiborsiz qoldirish
sudo mount -o ro /dev/sdb1 /mnt/data

Bind mount: bitta katalogni ikkinchi joyda ko'rsatish

Bind mount alohida qurilmani mount qilmaydi — u fayl tizimi ichidagi mavjud katalogni boshqa joyga "ko'chiradi", aslida ikkinchi joyni birinchisiga yo'naltiradi. Yangi disk yoki bo'lim kerak emas:

sudo mkdir -p /srv/www /var/www/html
sudo mount --bind /srv/www /var/www/html

Shundan keyin /var/www/html ichidagi har qanday o'zgarish /srv/www da ham ko'rinadi — ular aslida ikki yo'l orqali ko'rinadigan bitta joy.

Bind mount odatda quyidagilar uchun ishlatiladi:

  • host tizimdagi bitta katalogni konteyner yoki chroot muhitiga ko'rsatish;
  • katalogni fizik ko'chirmasdan uni boshqa dastur kutayotgan yo'lga moslashtirish;
  • muayyan katalogni faqat o'qiladigan bind mount orqali faqat o'qish uchun ochish:
sudo mount --bind -o ro /srv/www /var/www/html

Info

--bind katalogni mount qiladi, lekin faqat yuqori darajada — u ichidagi boshqa mount nuqtalarini (masalan, /srv/www ostida alohida fayl tizimi mount qilingan bo'lsa) aks ettirmaydi. Agar ularni ham aks ettirish kerak bo'lsa, buning o'rniga --rbind ishlatiladi.

mount -o remount: unmount qilmasdan parametrlarni o'zgartirish

Allaqachon mount qilingan fayl tizimining ayrim parametrlarini (masalan, ro dan rw ga) unmount qilib, qayta mount qilmasdan o'zgartirish mumkin:

sudo mount -o remount,rw /mnt/data

Bu, masalan, tizim faqat o'qish rejimida boot qilganda (texnik xizmat uchun root fayl tizimi ro bilan mount qilingan) va uni yozish uchun ochish kerak bo'lganda foydali:

sudo mount -o remount,rw /

remount fayl tizimi band bo'lsa ham ishlaydi, chunki u mount nuqtasini almashtirmaydi — faqat mavjud mount’dagi flag'larni yangilaydi.

umount: fayl tizimini ajratish

sudo umount /mnt/data

yoki qurilma yo'li bo'yicha:

sudo umount /dev/sdb1

Ikkalasi ham bir xil natija beradi — muhimi, fayl tizimi o'sha paytda hech kim tomonidan ishlatilmayotgan bo'lishi kerak.

"device is busy" xatosi va uni aniqlash

Agar fayl tizimida ochiq fayl bo'lsa, u biror shell uchun joriy ishchi katalog (cd) bo'lsa yoki unda ishlab turgan jarayon bo'lsa, umount rad etadi:

umount: /mnt/data: target is busy.

Fayl tizimini qaysi jarayon band qilib turganini aniqlash uchun ikkita asosiy vosita bor.

lsof — mount nuqtasi ostidagi ochiq fayllarni ko'rsatadi:

sudo lsof +D /mnt/data

fuser — mount nuqtasidan foydalanayotgan jarayonlarni qisqaroq formatda ko'rsatadi:

sudo fuser -vm /mnt/data

Natija mos jarayonning PID’si va nomini ko'rsatadi. O'sha jarayonni to'g'ri to'xtatish (masalan, xizmatni systemctl stop bilan yopish) eng xavfsiz yechim. fuser jarayonlarni majburan tugatishi ham mumkin:

sudo fuser -km /mnt/data

Warning

fuser -k fayl tizimidan foydalanayotgan har bir jarayonni hech qanday ogohlantirishsiz o'ldiradi. Bu saqlanmagan ma’lumotlar yo'qolishiga sabab bo'lishi mumkin — avval ular qaysi jarayonlar ekanini lsof/fuser -v bilan aniqlang va ularni muloyimlik bilan to'xtatishga harakat qiling.

Lazy umount (umount -l)

Ba’zan jarayonni darhol aniqlab bo'lmaydi yoki uni to'xtatish xavfli, lekin fayl tizimini mount nuqtasidan tezda ajratish baribir kerak. umount -l (lazy) mount nuqtasini fayl tizimi ierarxiyasidan darhol olib tashlaydi, lekin haqiqiy ajratish faqat qurilmani ushlab turgan jarayonlar tugagandan keyin sodir bo'ladi:

sudo umount -l /mnt/data

Warning

umount -l muammoni hal qilish o'rniga uni "yashiradi": fayl tizimi fonda hali ham band bo'lishi mumkin, shuning uchun uni qayta mount qilishga urinish yoki qurilmani fizik ajratish (masalan, USB diskni sug'urib olish) xavfli. Undan doimiy yechim sifatida emas, faqat vaqtinchalik chora sifatida foydalaning.

Mount namespace haqida qisqacha

Zamonaviy Linux kernelida mount ma’lumotlari global emas — har bir jarayon o'zining mount namespace'iga ega bo'lishi mumkin. Bu shuni anglatadiki, bitta terminalda mount/umount bilan kiritilgan o'zgarish, maxsus namespace ishlatilmasa, odatda butun tizimga (yoki hech bo'lmaganda o'sha foydalanuvchi sessiyasiga) qo'llanadi, lekin konteynerlar (Docker, LXC) va unshare/chroot kabi vositalar har biri o'zining izolyatsiyalangan mount ko'rinishiga ega bo'lishi mumkin.

Amaliy oqibati: konteyner ichidagi mount/df chiqishi host tizimdagidan farq qilishi mumkin — bu xato emas, mount namespace izolyatsiyasining tabiiy natijasi. Buni chuqur o'rganish konteynerlash moduliga (masalan, Docker) tegishli; bu yerda u faqat nega mount natijalari ba’zan kutilganidan farq qilishi mumkinligini tushuntirish uchun tilga olingan.

Virtual fayl tizimlari: proc, sysfs, tmpfs

mount chiqishidagi ko'p qatorlar fizik diskka emas, kernel yaratgan virtual fayl tizimlariga tegishli. Ular disk joyini egallamaydi — buning o'rniga kernel ma’lumotlarini fayl ko'rinishida taqdim etadi:

  • proc (/proc) — ishlab turgan jarayonlar va kernel parametrlari haqidagi ma’lumotni fayllar sifatida taqdim etadi. Masalan, /proc/cpuinfo, /proc/meminfo.
  • sysfs (/sys) — qurilmalar, drayverlar va kernel quyi tizimlari haqidagi tuzilgan ma’lumot; qurilma parametrlarini ko'pincha shu yerdan o'qish va (ehtiyotkorlik bilan) yozish mumkin.
  • tmpfs — RAM’da yashaydigan vaqtinchalik fayl tizimi. /tmp yoki /run ko'pincha tmpfs sifatida mount qilinadi — ularning mazmuni qayta yuklashda yo'qoladi, lekin ular diskdan ancha tez.
df -hT | grep -E 'proc|sysfs|tmpfs'

Bu fayl tizimlarini odatda qo'lda mount/unmount qilish shart emas — ular boot paytida avtomatik tayyorlanadi. Ularni bilish muhim, chunki mount/df chiqishida ko'rinadigan har bir qator ham "disk" degani emas.

Amaliy vaziyat: diskni almashtirishdan oldin xavfsiz unmount qilish

Muammo. /mnt/backup ga mount qilingan tashqi USB disk endi kerak emas va uni fizik ajratish kerak, lekin umount "target is busy" xatosi bilan muvaffaqiyatsiz bo'lyapti.

Tekshiruv.

sudo fuser -vm /mnt/backup
                     USER        PID ACCESS COMMAND
/mnt/backup:         root       2214 ..c..  rsync

Bu fayl tizimida hali ham rsync jarayoni ishlayotganini ko'rsatadi — ehtimol fonda ishlayotgan zaxira vazifasi.

Amal. Jarayon aniqlangach, uni majburan o'ldirish o'rniga tugashini kutish yoki uni to'g'ri to'xtatish ma’qulroq:

# watch the process's state
ps -p 2214 -o pid,etime,cmd

# if stopping the process is safe (e.g. it's a script that can be re-run)
sudo kill 2214
sleep 2
sudo umount /mnt/backup

Agar jarayonni to'xtatib bo'lmasa yoki vaqt bo'lmasa, muqobil sifatida lazy umount ishlatiladi va disk keyinroq fizik ajratiladi:

sudo umount -l /mnt/backup

Natija.

mount | grep /mnt/backup

Agar buyruq hech narsa qaytarmasa, mount nuqtasi ierarxiyadan olib tashlangan.

Xulosa. "Device is busy" xatosi deyarli har doim fayl tizimidan biror jarayon foydalanayotganini bildiradi. To'g'ri aniqlash (lsof/fuser) muammoni yashirmasdan hal qiladi; umount -l faqat jarayonni haqiqatan xavfsiz to'xtatib bo'lmaydigan holatda oxirgi chora sifatida ishlatilishi kerak.

Keng tarqalgan xatolar

Bo'sh bo'lmagan katalogdan mount nuqtasi sifatida foydalanish

Agar tanlangan mount nuqtasi katalogida allaqachon fayllar bo'lsa, mount qilingach ular vaqtincha "yo'qoladi" (ular hali ham fayl tizimi ostida turibdi, lekin ustiga yangi fayl tizimi mount qilingani uchun yashirin). Bu ma’lumot yo'qotish emas, lekin chalkashlikka sabab bo'ladi — mount nuqtasi sifatida bo'sh katalogdan foydalanish kerak.

umount ga noto'g'ri yo'l berish

umount /mnt/data/subdir faqat subdir alohida mount qilingan bo'lsa ishlaydi. Butun /mnt/data fayl tizimini ajratish uchun uning haqiqiy mount nuqtasi yoki qurilma nomi berilishi kerak.

Qo'lda mount qilingan fayl tizimi qayta yuklashdan keyin yo'qolishini unutish

mount buyrug'i bilan kiritilgan o'zgarish vaqtinchalik — u qayta yuklash osha saqlanmaydi. Doimiy mount uchun /etc/fstab da yozuv kerak.

Mashqlar

  1. O'chirib tashlasa bo'ladigan VM’da bo'sh bo'lim yoki loop qurilma (dd + losetup yoki qo'shimcha virtual disk) yarating, uni mkfs.ext4 bilan formatlang va /mnt/test ga mount qiling.
  2. Ikki katalogni --bind bilan bog'lang va ulardan biriga fayl yozish ikkinchisida ham ko'rinishini tasdiqlang.
  3. Bitta terminaldan mount qilingan fayl tizimiga cd qiling va boshqasidan umount ga urining — xatoni oling, so'ng sababni fuser -vm bilan toping.
  4. Fayl tizimini mount -o remount,ro bilan faqat o'qish rejimiga o'tkazing, unga yozishga urinib xatoni ko'ring, so'ng remount,rw bilan qaytaring.

Mashqni bajardim deyish uchun: "device is busy" xatosi berilganda biror narsani majburlashga urinishdan oldin javobgar jarayonni aniqlaydigan aniq buyruqni ayta olishingiz kerak.

Xulosa

mount qurilmani (yoki --bind orqali mavjud katalogni) fayl tizimi ierarxiyasidagi muayyan nuqtaga ulaydi, umount esa uni ajratadi. -o remount band fayl tizimida ham parametrlarni xavfsiz o'zgartiradi, lsof/fuser esa "device is busy" xatosining sababini aniq ko'rsatadi. Bu buyruqlarning hammasi vaqtinchalik — qayta yuklashdan hech narsa omon qolmaydi. Keyingi maqola — fstab aynan shu muammoni hal qiladi va mount konfiguratsiyasini har bir boot’da avtomatik qo'llaydigan doimiy faylni tanishtiradi.

Manbalar