गाइड

Linux में disk mount: lsblk, विभाजन, mkfs, mount और fstab

अपडेट किया गया: · Skillaria.Top

Linux में disk mount करने का अर्थ है किसी विभाजन के फ़ाइल सिस्टम को डायरेक्टरी ट्री की किसी डायरेक्टरी, जैसे /data, से जोड़ना। नई डिस्क को lsblk से ढूँढा जाता है, fdisk या parted से विभाजित किया जाता है, mkfs.ext4 से फ़ाइल सिस्टम बनता है, mount /dev/sdb1 /data से जुड़ती है, और रीबूट के बाद भी जुड़ी रहे इसके लिए /etc/fstab में UUID वाली पंक्ति जोड़कर mount -a से जाँची जाती है।

Linux में ड्राइव के अक्षर (C:, D:) नहीं होते: हर स्टोरेज डिवाइस / से शुरू होने वाले एक ही डायरेक्टरी ट्री में जुड़ती है। Linux में disk mount करना वह क्रिया है जो किसी विभाजन के फ़ाइल सिस्टम को एक खाली डायरेक्टरी, यानी माउंट पॉइंट, से जोड़ देती है। नई डिस्क का रास्ता हर बार एक जैसा है: डिवाइस ढूँढें (lsblk), विभाजन बनाएँ (fdisk या parted), फ़ाइल सिस्टम बनाएँ (mkfs), mount करें (mount), और /etc/fstab में दर्ज करें। हर चरण को समझते हैं, और साथ में देखते हैं कि df और du से जगह कैसे जाँचें।

Linux में डिस्क और विभाजन कैसे काम करते हैं

कर्नल हर डिस्क को /dev में एक डिवाइस फ़ाइल के रूप में दिखाता है। नाम कनेक्शन के प्रकार पर निर्भर करता है:

नामक्या हैविभाजन
/dev/sda, /dev/sdbSATA/SAS/USB डिस्क, कई वर्चुअल डिस्क/dev/sda1, /dev/sda2
/dev/vdaKVM वर्चुअल मशीन में virtio डिस्क/dev/vda1
/dev/nvme0n1NVMe SSD/dev/nvme0n1p1
/dev/mapper/...LVM लॉजिकल वॉल्यूम, एन्क्रिप्टेड वॉल्यूम—

डिस्क विभाजनों में बँटती है, विभाजन पर फ़ाइल सिस्टम बनता है (ext4, xfs, btrfs), और उसी को किसी डायरेक्टरी में mount किया जाता है। जब तक विभाजन mount नहीं होता, उसकी फ़ाइलें नहीं दिखतीं, भले ही डिस्क भौतिक रूप से जुड़ी हो।

डिस्क कैसे देखें: lsblk और blkid

डिस्क के साथ काम की पहली कमांड है lsblk। यह डिवाइस का पेड़, आकार और mount पॉइंट दिखाती है:

$ lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda      8:0    0   40G  0 disk
├─sda1   8:1    0    1G  0 part /boot
└─sda2   8:2    0   39G  0 part /
sdb      8:16   0  100G  0 disk

यहाँ साफ़ है कि sdb 100 GB की नई डिस्क है, जिस पर कोई विभाजन या mount पॉइंट नहीं है। उपयोगी विकल्प:

  • lsblk -f — हर विभाजन का फ़ाइल सिस्टम प्रकार, लेबल और UUID।
  • lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT,MODEL — केवल ज़रूरी कॉलम।
  • sudo blkid — सभी विभाजनों का UUID और फ़ाइल सिस्टम प्रकार।
  • sudo fdisk -l — सभी डिस्क की विभाजन तालिका, सेक्टर के साथ।

अगर डिस्क वर्चुअल मशीन में चलते-चलते जोड़ी गई और lsblk उसे नहीं दिखा रहा, तो कर्नल से बस को दोबारा स्कैन करवाएँ: echo "- - -" | sudo tee /sys/class/scsi_host/host*/scan।

डिस्क का विभाजन: fdisk और parted

विभाजन बनाने से पहले एक बार फिर जाँच लें कि डिवाइस सही है: विभाजन तालिका लिखने से सिस्टम डिस्क का डेटा मिट जाएगा। lsblk के आउटपुट में आकार देखें और यह कि उस पर कोई mount पॉइंट नहीं है।

GPT या MBR

नई डिस्क के लिए GPT लें: यह 2 TB से बड़ी डिस्क और 128 विभाजन तक सपोर्ट करती है। MBR (dos) केवल पुराने BIOS-बूट सिस्टम के लिए है, जब बूट लोडर उसकी माँग करे।

fdisk से विभाजन

आधुनिक fdisk GPT और MBR दोनों बनाता है। काम इंटरैक्टिव मोड में होता है:

$ sudo fdisk /dev/sdb
Command (m for help): g        # खाली GPT तालिका बनाएँ
Command (m for help): n        # नया विभाजन
Partition number (1-128, default 1): Enter
First sector: Enter
Last sector, +/-sectors or +/-size{K,M,G,T,P}: Enter   # पूरी डिस्क
Command (m for help): w        # बदलाव लिखें और बाहर निकलें

जब तक आप w नहीं दबाते, डिस्क पर कुछ नहीं लिखा जाता, इसलिए q से बिना बदलाव बाहर निकला जा सकता है।

parted से एक पंक्ति में विभाजन

स्क्रिप्ट में parted ज़्यादा सुविधाजनक है, क्योंकि वह बिना संवाद के चलता है:

$ sudo parted -s /dev/sdb mklabel gpt
$ sudo parted -s /dev/sdb mkpart primary ext4 0% 100%
$ lsblk /dev/sdb
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sdb      8:16   0  100G  0 disk
└─sdb1   8:17   0  100G  0 part

प्रतिशत में सीमाएँ देने से विभाजन सही तरह से संरेखित होता है। अगर नया विभाजन न दिखे, तो sudo partprobe /dev/sdb चलाएँ, ताकि कर्नल तालिका दोबारा पढ़ ले।

फ़ाइल सिस्टम बनाना: mkfs

विभाजन केवल ब्लॉक की एक श्रेणी है। उसमें फ़ाइलें रखने के लिए फ़ाइल सिस्टम बनाना पड़ता है:

$ sudo mkfs.ext4 -L data /dev/sdb1
mke2fs 1.47.0 (5-Feb-2023)
Creating filesystem with 26214144 4k blocks and 6553600 inodes
...
Writing superblocks and filesystem accounting information: done

-L कुंजी लेबल देती है, जिससे बाद में विभाजन आसानी से पहचाना जाए। कौन-सा चुनें:

FSकमांडकब ठीक है
ext4mkfs.ext4आम तौर पर सबसे अच्छा विकल्प, छोटा भी किया जा सकता है
XFSmkfs.xfsबड़ी फ़ाइलें और वॉल्यूम, RHEL में मानक; केवल बढ़ाया जा सकता है
Btrfsmkfs.btrfsस्नैपशॉट, कम्प्रेशन, सबवॉल्यूम
vfat/exFATmkfs.vfat, mkfs.exfatWindows और macOS के साथ अदला-बदली वाली फ़्लैश ड्राइव

mkfs विभाजन पर जो भी था, मिटा देता है। खाली विभाजन पर यह पुष्टि भी नहीं माँगता, इसलिए डिवाइस का नाम एक बार और जाँच लें।

Linux में mount कमांड से disk mount कैसे करें

एक डायरेक्टरी बनाएँ, यानी माउंट पॉइंट, और विभाजन को उससे जोड़ें:

$ sudo mkdir -p /data
$ sudo mount /dev/sdb1 /data
$ df -h /data
Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb1        98G   24K   93G   1% /data

फ़ाइल सिस्टम का प्रकार mount ख़ुद पहचान लेता है, पर mount -t xfs से साफ़ लिखा भी जा सकता है। अगर /data में पहले से फ़ाइलें थीं, तो mount के बाद वे मिटती नहीं, बस नए फ़ाइल सिस्टम के नीचे छिप जाती हैं और डिस्क हटाने पर फिर दिखती हैं।

mount के विकल्प

विकल्प -o के बाद कॉमा से अलग करके लिखे जाते हैं:

  • ro / rw — केवल पढ़ना या पढ़ना और लिखना।
  • noatime — हर पढ़ने पर एक्सेस का समय न लिखना, इससे अनावश्यक लिखाई घटती है।
  • noexec — इस विभाजन से प्रोग्राम चलाने पर रोक (/tmp और डाउनलोड डायरेक्टरी के लिए उपयोगी)।
  • nosuid, nodev — SUID बिट और डिवाइस फ़ाइलों को अनदेखा करना।
  • remount — बिना अनमाउंट किए विकल्प बदलना: sudo mount -o remount,ro /data।

कौन-सा विभाजन किन विकल्पों के साथ mount है, यह findmnt से देखें: findmnt /data या findmnt -t ext4।

mount की गई डिस्क पर अधिकार

नए ext4 का रूट root का होता है, इसलिए सामान्य यूज़र वहाँ नहीं लिख पाएगा। mount के बाद डायरेक्टरी सही यूज़र को सौंपें: sudo chown alice:alice /data। vfat और exFAT में Unix अधिकार नहीं होते; उनका मालिक mount के समय uid=, gid= और umask= विकल्पों से तय होता है।

डिस्क को अनमाउंट कैसे करें: umount और target is busy

अलग करने के लिए umount कमांड है (n के बिना), डिवाइस या डायरेक्टरी के नाम के साथ:

$ sudo umount /data
umount: /data: target is busy.

इसका मतलब है कि कोई प्रोसेस उस फ़ाइल सिस्टम की फ़ाइलें खोले बैठी है, या उसमें अपनी मौजूदा डायरेक्टरी बनाए हुए है। अक्सर यह आपका ही टर्मिनल होता है, cd /data के बाद। दोषी ढूँढने में ये मदद करते हैं:

$ sudo lsof +f -- /data
$ sudo fuser -vm /data

प्रोसेस बंद करें या डायरेक्टरी से बाहर निकलें, फिर दोबारा कोशिश करें। आख़िरी उपाय है umount -l (lazy): फ़ाइल सिस्टम तुरंत ट्री से हट जाता है, और असल में मुक्त तब होता है जब प्रोसेस फ़ाइलें बंद कर दें।

बूट पर अपने-आप mount: /etc/fstab

mount कमांड केवल रीबूट तक असर करती है। डिस्क अपने-आप जुड़े, इसके लिए /etc/fstab में पंक्ति जोड़ें। विभाजन को UUID से लिखें, /dev/sdb1 नाम से नहीं: नई डिस्क जोड़ने पर नाम आपस में बदल सकते हैं, जबकि UUID स्थायी रहता है।

$ sudo blkid /dev/sdb1
/dev/sdb1: LABEL="data" UUID="3f1c9a2e-7b5d-4c1e-9a8f-2d6e4b0c1a77" TYPE="ext4" PARTUUID="..."

पंक्ति में छह फ़ील्ड होते हैं:

# <डिवाइस>                                   <माउंट पॉइंट>  <प्रकार>  <विकल्प>          <dump> <fsck>
UUID=3f1c9a2e-7b5d-4c1e-9a8f-2d6e4b0c1a77  /data    ext4   defaults,noatime  0      2
फ़ील्डअर्थ
डिवाइसUUID=..., LABEL=... या पाथ
माउंट पॉइंटवह डायरेक्टरी जहाँ जोड़ना है (पहले से मौजूद होनी चाहिए)
प्रकारext4, xfs, swap, nfs आदि
विकल्पdefaults के साथ ज़रूरी, जैसे noatime, nofail
dumpलगभग हमेशा 0
fsckजाँच का क्रम: रूट के लिए 1, बाक़ी के लिए 2, जाँच न करने के लिए 0

रीबूट से पहले fstab जाँचें

fstab में एक गलती सर्वर को बूट के समय आपातकालीन मोड में छोड़ सकती है, और क्लाउड मशीन पर बिना कंसोल के यह बहुत कष्टकारी होता है। बदलाव के तुरंत बाद चलाएँ:

$ sudo findmnt --verify
$ sudo systemctl daemon-reload
$ sudo mount -a
$ findmnt /data

mount -a fstab की वे सभी डिस्क mount करता है जो अभी तक जुड़ी नहीं हैं, और गलती तुरंत दिखा देता है। हटाने योग्य और नेटवर्क डिस्क के लिए nofail विकल्प जोड़ें: डिवाइस न होने पर बूट बिना उसके आगे बढ़ जाएगा। systemd में fstab की हर पंक्ति एक .mount यूनिट बन जाती है, जैसे data.mount, और उसकी स्थिति systemctl status data.mount से दिखती है।

खाली जगह कैसे जानें: df

df mount किए गए फ़ाइल सिस्टम की भराई दिखाता है:

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda2        39G   37G  1.1G  98% /
/dev/sda1       974M  180M  727M  20% /boot
/dev/sdb1        98G   24K   93G   1% /data
  • -h — आकार पढ़ने योग्य इकाइयों में।
  • -T — फ़ाइल सिस्टम प्रकार का कॉलम जोड़ता है।
  • -i — inodes दिखाता है: बहुत सारी छोटी फ़ाइलें बनने पर गीगाबाइट बचे होने के बावजूद डिस्क «ख़त्म» हो सकती है।
  • -x tmpfs -x devtmpfs — वर्चुअल फ़ाइल सिस्टम छिपाता है।

Size का मान Used + Avail के बराबर क्यों नहीं होता: ext4 लगभग 5% जगह root के लिए आरक्षित रखता है, ताकि डिस्क भरी होने पर भी सिस्टम चल सके। डेटा वाले विभाजन पर यह आरक्षण घटाया जा सकता है: sudo tune2fs -m 1 /dev/sdb1।

जगह कहाँ गई: du

df बताता है कि डिस्क भरी है, पर यह नहीं बताता कि किससे। इसके लिए du है, जो डायरेक्टरी में फ़ाइलों का आकार जोड़ता है:

$ sudo du -sh /var/log
4.2G    /var/log
$ sudo du -xh --max-depth=1 / 2>/dev/null | sort -rh | head
37G     /
21G     /var
9.8G    /home
3.1G    /usr
  • -s — डायरेक्टरी का केवल कुल योग, -a — हर फ़ाइल अलग।
  • --max-depth=1 (या -d 1) — एक स्तर; सबसे बड़ी डायरेक्टरी में और गहराई से जाएँ।
  • -x — दूसरे फ़ाइल सिस्टम में न जाना, वरना /data, /proc और नेटवर्क डिस्क भी जुड़ जाएँगे।
  • sort -rh — पढ़ने योग्य आकार से क्रम, सबसे बड़ा ऊपर।

अलग-अलग बड़ी फ़ाइलें find से ढूँढना आसान है: sudo find / -xdev -type f -size +1G -exec ls -lh {} +।

df में डिस्क भरी, पर du में नहीं

क्लासिक स्थिति: बड़ा लॉग मिटाया, पर जगह नहीं लौटी। फ़ाइल डायरेक्टरी से हट गई, पर कोई प्रोसेस (जैसे वेब सर्वर) उसे अब भी खोले बैठी है, इसलिए ब्लॉक मुक्त नहीं हुए। ऐसी फ़ाइलें ढूँढें:

$ sudo lsof +L1
COMMAND  PID USER   FD   TYPE DEVICE   SIZE/OFF NLINK  NODE NAME
nginx    812 www    5w   REG    8,2 8589934592     0 13054 /var/log/nginx/access.log (deleted)

प्रोसेस रीस्टार्ट करें, या उसे लॉग दोबारा खोलने को कहें, तो जगह लौट आएगी। आगे के लिए चालू लॉग को बिना मिटाए साफ़ करें: sudo truncate -s 0 /var/log/nginx/access.log। दूसरा कारण यह है कि कोई फ़ाइल माउंट पॉइंट के नीचे छिपी हो: वह रूट विभाजन पर जगह घेरती है, पर ऊपर से फ़ाइल सिस्टम mount होने के कारण du उसे नहीं देखता।

आम गलतियाँ और उनके हल

संदेशकारणक्या करें
mount point /data does not existडायरेक्टरी नहीं हैsudo mkdir -p /data
wrong fs type, bad option, bad superblockविभाजन पर फ़ाइल सिस्टम नहीं है, प्रकार गलत है, या ड्राइवर नहीं हैlsblk -f से जाँचें; exFAT/NTFS के लिए exfatprogs, ntfs-3g पैकेज लगाएँ
only root can do thatsudo के बिना mountsudo से चलाएँ, या fstab में user विकल्प जोड़ें
target is busyडायरेक्टरी किसी प्रोसेस के कब्ज़े मेंlsof/fuser, डायरेक्टरी से बाहर निकलें
बूट emergency mode मेंfstab में गलती, या डिस्क नहीं हैroot से लॉगिन करें, fstab ठीक करें, nofail जोड़ें

चरण-दर-चरण: डेटा के लिए नई डिस्क

  1. lsblk — नई डिस्क ढूँढें, जैसे /dev/sdb।
  2. sudo parted -s /dev/sdb mklabel gpt mkpart primary ext4 0% 100% — विभाजित करें।
  3. sudo mkfs.ext4 -L data /dev/sdb1 — फ़ाइल सिस्टम बनाएँ।
  4. sudo mkdir -p /data — माउंट पॉइंट बनाएँ।
  5. sudo blkid /dev/sdb1 — UUID लें और /etc/fstab में पंक्ति जोड़ें।
  6. sudo mount -a && df -h /data — mount करें और जाँचें।
  7. sudo chown यूज़र: /data — अधिकार दें।

अगर भविष्य में सेवा रोके बिना जगह बढ़ानी हो, या कई डिस्क को एक जगह जोड़ना हो, तो साधारण विभाजन की जगह LVM लें: डिस्क भौतिक वॉल्यूम बनती है, उससे लॉजिकल वॉल्यूम कटते हैं, और उन्हें lvextend -r से बढ़ाया जा सकता है।

निष्कर्ष

Linux में disk mount की पूरी प्रक्रिया एक श्रृंखला है: lsblk → विभाजन → mkfs → mount → /etc/fstab। विभाजनों को UUID से लिखें, रीबूट से पहले mount -a से fstab जाँचें, और वैकल्पिक डिस्क के लिए nofail रखें। जब जगह ख़त्म होने लगे, तो df -h बताएगा कि कौन-सा विभाजन भरा है, और du -xh --max-depth=1 | sort -rh व lsof +L1 बताएँगे कि उसे क्या घेर रहा है। डिस्क, विभाजन, SWAP, LVM और RAID पर हमारे Linux कोर्स में व्यवहार में काम होता है।

अक्सर पूछे जाने वाले प्रश्न

Linux में फ़्लैश ड्राइव कैसे mount करें?

lsblk से उसका नाम ढूँढें (आम तौर पर /dev/sdb1), एक डायरेक्टरी बनाएँ और sudo mount /dev/sdb1 /mnt/usb चलाएँ। ग्राफ़िकल डेस्कटॉप पर फ़्लैश ड्राइव अपने-आप /media/यूज़रनेम या /run/media में जुड़ जाती है।

ISO इमेज कैसे mount करें?

sudo mount -o loop,ro image.iso /mnt/iso से: loop विकल्प फ़ाइल को ब्लॉक डिवाइस की तरह जोड़ता है। हटाने के लिए सामान्य umount चलता है।

fstab के ज़रिए नेटवर्क फ़ोल्डर कैसे जोड़ें?

NFS के लिए पंक्ति कुछ ऐसी होती है: server:/export /mnt/nfs nfs defaults,_netdev,nofail 0 0; SMB के लिए: //server/share /mnt/smb cifs credentials=/root/.smbcred,_netdev,nofail 0 0। _netdev विकल्प नेटवर्क के चालू होने का इंतज़ार करता है।

UUID और PARTUUID में क्या फ़र्क है?

UUID फ़ाइल सिस्टम का होता है और दोबारा mkfs करने पर बदल जाता है; PARTUUID GPT तालिका में विभाजन का होता है और फ़ॉर्मेट करने पर भी वही रहता है। fstab में आम तौर पर UUID लिखा जाता है।

फ़ाइल सिस्टम में गलतियाँ कैसे जाँचें?

विभाजन अनमाउंट करें और ext4 के लिए sudo fsck -f /dev/sdb1, XFS के लिए sudo xfs_repair /dev/sdb1 चलाएँ। चालू (mounted) फ़ाइल सिस्टम पर लिखने की स्थिति में जाँच नहीं करनी चाहिए, इससे डेटा ख़राब हो सकता है।

इस विषय को वीडियो में सीखें

यह विषय “Linux: с нуля до уверенного администрирования” कोर्स में अभ्यास के साथ विस्तार से समझाया गया है।

कोर्स पर जाएँ