Linux-এ ডিস্ক মাউন্ট: lsblk, পার্টিশন, mkfs, mount ও fstab
Linux-এ ডিস্ক মাউন্ট মানে কোনো পার্টিশনের ফাইল সিস্টেমকে ডিরেক্টরি ট্রির একটি জায়গায় জুড়ে দেওয়া, যেমন /data-তে। নতুন ডিস্ক খোঁজা হয় lsblk দিয়ে, পার্টিশন করা হয় fdisk বা parted দিয়ে, ফরম্যাট হয় mkfs.ext4 দিয়ে, মাউন্ট হয় mount /dev/sdb1 /data দিয়ে। রিবুটের পরেও টিকিয়ে রাখতে UUID-সহ লাইন যোগ হয় /etc/fstab-এ, আর mount -a দিয়ে তা যাচাই করা হয়।
Linux-এ ডিস্কের জন্য C: বা D:-এর মতো আলাদা অক্ষর নেই: সব স্টোরেজ ডিভাইস একটিই ডিরেক্টরি ট্রিতে জোড়া লাগে, যার শুরু /-এ। ডিস্ক মাউন্ট করা মানে কোনো পার্টিশনের ফাইল সিস্টেমকে একটি খালি ডিরেক্টরিতে — মাউন্ট পয়েন্টে — ঝুলিয়ে দেওয়া। নতুন ডিস্কের পথ সবসময় একই: ডিভাইস খুঁজুন (lsblk), পার্টিশন করুন (fdisk বা parted), ফাইল সিস্টেম বানান (mkfs), মাউন্ট করুন (mount) এবং /etc/fstab-এ স্থায়ী করুন। প্রতিটি ধাপ ধরে ধরে দেখা যাক, আর সঙ্গে দেখা যাক df ও du দিয়ে জায়গা কোথায় গেল তা কীভাবে বুঝবেন।
Linux-এ ডিস্ক ও পার্টিশন কীভাবে সাজানো থাকে
কার্নেল প্রতিটি ডিস্ককে /dev-এর একটি ডিভাইস ফাইল হিসেবে দেখায়। নামটি সংযোগের ধরনের ওপর নির্ভর করে:
| নাম | এটি কী | পার্টিশন |
|---|---|---|
/dev/sda, /dev/sdb | SATA/SAS/USB ডিস্ক, অনেক ভার্চুয়াল ডিস্ক | /dev/sda1, /dev/sda2 |
/dev/vda | KVM ভার্চুয়াল মেশিনের virtio ডিস্ক | /dev/vda1 |
/dev/nvme0n1 | NVMe SSD | /dev/nvme0n1p1 |
/dev/mapper/... | LVM-এর লজিক্যাল ভলিউম, এনক্রিপ্টেড ভলিউম | — |
ডিস্ক ভাগ হয় পার্টিশনে, পার্টিশনে তৈরি হয় ফাইল সিস্টেম (ext4, xfs, btrfs), আর সেটিই মাউন্ট হয় একটি ডিরেক্টরিতে। পার্টিশন মাউন্ট না হওয়া পর্যন্ত তার ফাইল দেখা যায় না, যদিও ডিস্কটি ভৌতভাবে সংযুক্ত থাকে।
ডিস্ক দেখা: lsblk ও blkid
ডিস্ক নিয়ে কাজ শুরুর প্রথম কমান্ড lsblk। এটি ডিভাইসের গাছ, আকার ও মাউন্ট পয়েন্ট দেখায়:
$ 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 ডিস্ক, যাতে কোনো পার্টিশন বা মাউন্ট পয়েন্ট নেই। কার্যকর কিছু বিকল্প:
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-এর আউটপুটে আকার দেখে এবং মাউন্ট পয়েন্ট না থাকা দেখে বেছে নিন।
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
শতাংশে সীমা দিলে পার্টিশন সঠিকভাবে সারিবদ্ধ (alignment) হয়। নতুন পার্টিশন না দেখা গেলে 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 দিয়ে একটি লেবেল দেওয়া হয়, যা দিয়ে পরে পার্টিশনটি সহজে চেনা যায়। কোনটি বেছে নেবেন:
| ফাইল সিস্টেম | কমান্ড | কখন উপযুক্ত |
|---|---|---|
| ext4 | mkfs.ext4 | সাধারণ ডিফল্ট পছন্দ, ছোট করাও যায় |
| XFS | mkfs.xfs | বড় ফাইল ও ভলিউম, RHEL-এর মানক; শুধু বাড়ানো যায় |
| Btrfs | mkfs.btrfs | স্ন্যাপশট, কম্প্রেশন, সাব-ভলিউম |
| vfat/exFAT | mkfs.vfat, mkfs.exfat | Windows ও macOS-এর সঙ্গে ফ্ল্যাশ ড্রাইভ বিনিময়ে |
mkfs পার্টিশনে যা ছিল সব মুছে দেয়। খালি পার্টিশনে এটি নিশ্চিত করতে চায় না, তাই ডিভাইসের নাম আরেকবার যাচাই করুন।
mount দিয়ে Linux-এ ডিস্ক মাউন্ট করা
একটি ডিরেক্টরি — মাউন্ট পয়েন্ট — বানিয়ে তাতে পার্টিশন জুড়ে দিন:
$ 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-তে আগে থেকে ফাইল থাকলে মাউন্টের পরে সেগুলো মুছে যায় না, শুধু নতুন ফাইল সিস্টেমের নিচে ঢাকা পড়ে; মাউন্ট খুললে আবার দেখা যায়।
মাউন্ট অপশন
অপশন -o-এর পরে কমা দিয়ে দেওয়া হয়:
ro/rw— শুধু পড়া, নাকি পড়া ও লেখা।noatime— প্রতিবার পড়ার সময় অ্যাক্সেস-সময় না লেখা, ফলে অপ্রয়োজনীয় লেখা কমে।noexec— এই পার্টিশন থেকে প্রোগ্রাম চালানো বন্ধ (/tmpও ডাউনলোডের ডিরেক্টরির জন্য কাজের)।nosuid,nodev— SUID বিট ও ডিভাইস ফাইল উপেক্ষা।remount— মাউন্ট না খুলে অপশন বদলানো:sudo mount -o remount,ro /data।
কী কীভাবে মাউন্ট হয়ে আছে তা দেখতে findmnt সুবিধাজনক: findmnt /data বা findmnt -t ext4।
মাউন্ট করা ডিস্কের অধিকার
নতুন ext4-এর মূল ডিরেক্টরি root-এর, তাই সাধারণ ব্যবহারকারী সেখানে লিখতে পারে না। মাউন্টের পরে ডিরেক্টরিটি দরকারি ব্যবহারকারীকে দিন: sudo chown alice:alice /data। vfat ও exFAT-এ Unix অধিকার নেই; মালিক ঠিক হয় মাউন্টের সময় 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): ফাইল সিস্টেম ট্রি থেকে তৎক্ষণাৎ সরে যাবে, আর প্রসেসগুলো ফাইল বন্ধ করলে পুরোপুরি মুক্ত হবে।
রিবুটের পরে স্বয়ংক্রিয় মাউন্ট: /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 | যাচাইয়ের ক্রম: root-এর জন্য 1, বাকিদের জন্য 2, না করতে 0 |
রিবুটের আগে অবশ্যই fstab যাচাই করুন
/etc/fstab-এর একটি ভুল সার্ভারকে বুট করার সময় জরুরি মোডে আটকে দিতে পারে, আর কনসোলবিহীন ক্লাউড মেশিনে এটি খুব অপ্রীতিকর। সম্পাদনার পরেই চালান:
$ sudo findmnt --verify
$ sudo systemctl daemon-reload
$ sudo mount -a
$ findmnt /data
mount -a fstab-এর যা এখনও মাউন্ট হয়নি সব মাউন্ট করে, আর ভুল থাকলে তখনই দেখিয়ে দেয়। অপসারণযোগ্য ও নেটওয়ার্ক ডিস্কের জন্য nofail যোগ করুন: ডিভাইস না থাকলেও বুট চলবে। systemd-তে fstab-এর প্রতিটি লাইন একটি .mount ইউনিটে পরিণত হয়, যেমন data.mount; তার অবস্থা দেখা যায় systemctl status data.mount দিয়ে।
খালি জায়গা জানা: df
df মাউন্ট করা ফাইল সিস্টেমগুলো কতটা ভরা তা দেখায়:
$ 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— ইনোড দেখায়: অনেক ছোট ফাইল বানালে গিগাবাইট খালি থাকলেও ডিস্ক “শেষ” হয়ে যেতে পারে।-x tmpfs -x devtmpfs— ভার্চুয়াল ফাইল সিস্টেম লুকায়।
Size কেন Used + Avail-এর সমান নয়: ext4 root-এর জন্য প্রায় 5% জায়গা সংরক্ষিত রাখে, যাতে ডিস্ক ভরে গেলেও সিস্টেম চলতে পারে। ডেটার পার্টিশনে এই সংরক্ষণ কমানো যায়: 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। অমিলের আরেকটি কারণ — মাউন্ট পয়েন্টের নিচে লুকানো ফাইল: সেগুলো মূল পার্টিশনের জায়গা নেয়, কিন্তু ওপরে ফাইল সিস্টেম মাউন্ট থাকলে 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 that | sudo ছাড়া মাউন্ট | sudo দিয়ে চালান, অথবা fstab-এ user অপশন যোগ করুন |
target is busy | ডিরেক্টরি একটি প্রসেস ব্যবহার করছে | lsof/fuser দিয়ে দেখুন, ডিরেক্টরি ছেড়ে আসুন |
| রিবুট হয় জরুরি মোডে | fstab-এ ভুল, অথবা ডিস্ক নেই | root হিসেবে ঢুকে fstab ঠিক করুন, nofail যোগ করুন |
ধাপে ধাপে: ডেটার জন্য নতুন ডিস্ক
lsblk— নতুন ডিস্ক খুঁজুন, যেমন/dev/sdb।sudo parted -s /dev/sdb mklabel gpt mkpart primary ext4 0% 100%— পার্টিশন করুন।sudo mkfs.ext4 -L data /dev/sdb1— ফাইল সিস্টেম বানান।sudo mkdir -p /data— মাউন্ট পয়েন্ট তৈরি করুন।sudo blkid /dev/sdb1— UUID জেনে নিয়ে/etc/fstab-এ লাইন যোগ করুন।sudo mount -a && df -h /data— মাউন্ট করে যাচাই করুন।sudo chown ব্যবহারকারী: /data— অধিকার দিন।
সার্ভিস বন্ধ না করে জায়গা বাড়াতে হলে, অথবা কয়েকটি ডিস্ক জুড়ে একটি জায়গা বানাতে হলে, সাধারণ পার্টিশনের বদলে LVM ব্যবহার করা হয়: ডিস্ক হয় ফিজিক্যাল ভলিউম, তা থেকে কাটা হয় লজিক্যাল ভলিউম, যা lvextend -r দিয়ে বাড়ানো যায়।
সারসংক্ষেপ
Linux-এ ডিস্ক মাউন্ট করা একটি ধারাবাহিক পথ: 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-এ ফ্ল্যাশ ড্রাইভ কীভাবে মাউন্ট করবেন?
lsblk দিয়ে খুঁজুন (সাধারণত /dev/sdb1), একটি ডিরেক্টরি বানিয়ে sudo mount /dev/sdb1 /mnt/usb চালান। গ্রাফিক্যাল ডেস্কটপে ফ্ল্যাশ ড্রাইভ নিজে থেকেই /media/ব্যবহারকারীর_নাম বা /run/media-এ মাউন্ট হয়।
ISO ইমেজ কীভাবে মাউন্ট করবেন?
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 চালান। মাউন্ট করা অবস্থায় লেখার সময় যাচাই করা যায় না — এতে ডেটা নষ্ট হতে পারে।
“Linux: с нуля до уверенного администрирования” কোর্সে বিষয়টি অনুশীলনসহ বিস্তারিত শেখানো হয়েছে।
কোর্সে যান