Mount Points และ fstab Configuration บน Linux

ทุกครั้งที่ Linux Boot ระบบจะ Mount Filesystem ต่าง ๆ โดยอัตโนมัติตามที่กำหนดไว้ใน /etc/fstab ซึ่งเป็นไฟล์ Config สำคัญที่ระบุว่า Partition หรือ Storage ใดจะถูก Mount ที่ Directory ใด ด้วย Filesystem Type อะไร และด้วย Options อะไร การตั้งค่า fstab ที่ผิดพลาดอาจทำให้ระบบ Boot ไม่ขึ้นได้

บทความนี้อธิบายโครงสร้างของ fstab ทุก Field, Options ที่ใช้บ่อย, การใช้ UUID แทน Device Name, การ Mount Network Filesystem (NFS), Bind Mount และเทคนิค Troubleshoot เมื่อระบบ Boot ไม่ขึ้นเพราะ fstab ผิด

โครงสร้าง /etc/fstab

# รูปแบบของ fstab (6 Field แต่ละ Field คั่นด้วย Whitespace)
# <device>  <mountpoint>  <fstype>  <options>  <dump>  <pass>

# ตัวอย่าง fstab จริง
UUID=a1b2c3d4-e5f6-7890-abcd-ef1234567890  /          ext4  defaults             0  1
UUID=b2c3d4e5-f6a7-8901-bcde-f01234567891  /boot      ext4  defaults             0  2
UUID=c3d4e5f6-a7b8-9012-cdef-012345678902  /home      ext4  defaults,noatime     0  2
UUID=d4e5f6a7-b8c9-0123-def0-123456789013  swap       swap  sw                   0  0
/dev/data_vg/lv_data                       /data      xfs   defaults             0  2
tmpfs                                       /tmp       tmpfs defaults,size=2G     0  0

# คำอธิบาย 6 Field:
# 1. device    — UUID, Device Path, Label, หรือ NFS Address
# 2. mountpoint — Directory ที่จะ Mount (swap ใช้ "none" หรือ "swap")
# 3. fstype    — ext4, xfs, btrfs, nfs, tmpfs, swap, vfat, ...
# 4. options   — Mount options (ดูรายละเอียดด้านล่าง)
# 5. dump      — 0 = ไม่ Backup ด้วย dump, 1 = Backup (ปัจจุบันไม่ค่อยใช้)
# 6. pass      — fsck order: 0=ไม่ตรวจ, 1=ตรวจก่อน (root), 2=ตรวจหลัง

ทำไมต้องใช้ UUID แทน Device Name

# Device Name (/dev/sda, /dev/sdb) อาจเปลี่ยนได้เมื่อ:
# - เพิ่มหรือลบ Disk
# - เปลี่ยน SATA Port
# - Kernel ตรวจพบ Device ในลำดับต่างกัน

# UUID ไม่เปลี่ยนแปลง เพราะ Filesystem แต่ละตัวมี UUID เป็นเอกลักษณ์

# ดู UUID ของทุก Partition
sudo blkid

# ตัวอย่าง Output
# /dev/sda1: UUID="a1b2c3d4-..." TYPE="ext4" PARTUUID="..."
# /dev/sdb1: UUID="b2c3d4e5-..." TYPE="xfs"
# /dev/sdb2: UUID="c3d4e5f6-..." TYPE="swap"

# ดู UUID เฉพาะ Partition
sudo blkid /dev/sdb1
sudo blkid -s UUID -o value /dev/sdb1    # แสดงแค่ UUID

# ดูด้วย lsblk
lsblk -o NAME,UUID,FSTYPE,MOUNTPOINT

# Label — ทางเลือกอื่นแทน UUID (ต้องตั้งชื่อ Label ก่อน)
# ใน fstab: LABEL=data-disk  /data  ext4  defaults  0  2

Mount Options ที่ใช้บ่อย

# Options ทั่วไป
defaults    # rw,suid,dev,exec,auto,nouser,async (ชุดค่าเริ่มต้น)
auto        # Mount อัตโนมัติตอน Boot
noauto      # ไม่ Mount อัตโนมัติ (ต้อง mount ด้วยมือ)
user        # อนุญาตให้ User ทั่วไป Mount/Unmount ได้
nouser      # เฉพาะ root เท่านั้นที่ Mount ได้ (ค่าเริ่มต้น)

# Performance Options
noatime     # ไม่อัพเดต Access Time เมื่ออ่านไฟล์ (เพิ่มประสิทธิภาพ)
relatime    # อัพเดต Access Time เฉพาะเมื่อ mtime เปลี่ยน (ค่าเริ่มต้นใหม่)
nodiratime  # ไม่อัพเดต Directory Access Time

# Security Options
ro          # Read-only (ป้องกันการเขียน)
rw          # Read-write (ค่าเริ่มต้น)
noexec      # ห้ามรัน Executable บน Filesystem นี้
nosuid      # ไม่ยอมให้ setuid/setgid bit ทำงาน
nodev       # ไม่ยอมให้ Device Files ทำงาน

# ตัวอย่างการใช้งาน
# /tmp — ป้องกันไม่ให้รัน Script จาก /tmp
tmpfs  /tmp  tmpfs  defaults,noexec,nosuid,nodev,size=2G  0  0

# /home — เพิ่มประสิทธิภาพ
UUID=...  /home  ext4  defaults,noatime  0  2

# USB Drive ที่แชร์ให้ทุก User Mount ได้
UUID=...  /mnt/usb  vfat  defaults,user,noauto  0  0

เพิ่ม Mount Point ใหม่ใน fstab

# ขั้นตอนสมบูรณ์: เพิ่ม Partition ใหม่ใน fstab

# 1. ดู UUID ของ Partition ที่ต้องการ
sudo blkid /dev/sdb1
# /dev/sdb1: UUID="a1b2c3d4-e5f6-7890-abcd-ef1234567890" TYPE="ext4"

# 2. สร้าง Mount Point
sudo mkdir -p /data

# 3. Mount ชั่วคราวทดสอบก่อน
sudo mount /dev/sdb1 /data
df -h /data
sudo umount /data

# 4. แก้ไข fstab
sudo nano /etc/fstab
# เพิ่ม:
# UUID=a1b2c3d4-e5f6-7890-abcd-ef1234567890  /data  ext4  defaults,noatime  0  2

# 5. ทดสอบ fstab ด้วย mount -a (mount ทุก entry ใน fstab)
sudo mount -a

# ถ้าไม่มี Error แสดงว่า fstab ถูกต้อง
# 6. ตรวจสอบ
df -h /data

tmpfs — Filesystem ใน RAM

# tmpfs เก็บข้อมูลใน RAM ไม่มีการเขียนลง Disk
# เหมาะสำหรับ /tmp, /run, /dev/shm

# /tmp ใน RAM (ขนาดสูงสุด 2GB)
tmpfs  /tmp  tmpfs  defaults,noexec,nosuid,nodev,size=2G  0  0

# /run/shm สำหรับ Shared Memory
tmpfs  /dev/shm  tmpfs  defaults,size=512m  0  0

# Mount tmpfs ด้วยมือชั่วคราว
sudo mount -t tmpfs -o size=1G tmpfs /mnt/ramdisk

# ดู tmpfs ที่ Mount อยู่
df -h -t tmpfs

NFS — Mount Network Filesystem

# ติดตั้ง NFS Client
sudo apt install nfs-common    # Ubuntu/Debian
sudo dnf install nfs-utils     # RHEL/Rocky

# Mount NFS แบบชั่วคราว
sudo mount -t nfs 192.168.1.10:/exports/data /mnt/nfs

# Mount NFS แบบถาวรใน fstab
# 192.168.1.10:/exports/data  /mnt/nfs  nfs  defaults,_netdev  0  0
# _netdev = รอ Network พร้อมก่อน Mount (สำคัญมากสำหรับ NFS)

# NFS Options ที่ใช้บ่อย
# rw           — Read-write
# ro           — Read-only
# hard         — retry ไปเรื่อย ๆ ถ้า Server ไม่ตอบ (ค่าเริ่มต้น)
# soft         — Return error ถ้า Server ไม่ตอบ
# timeo=30     — Timeout 30 วินาที
# retrans=3    — Retry 3 ครั้ง
# nfsvers=4    — ใช้ NFS v4

# ตัวอย่าง NFS fstab ที่เหมาะสมสำหรับ Production
192.168.1.10:/exports/data  /data  nfs4  rw,soft,timeo=30,_netdev  0  0

Bind Mount — Mount Directory ซ้อน

# Bind Mount ทำให้ Directory เดียวเข้าถึงได้จาก 2 Path
# เหมาะสำหรับ chroot, container, หรือจัดการโครงสร้าง Directory

# Mount ชั่วคราว
sudo mount --bind /var/www/uploads /data/uploads

# Mount ถาวรใน fstab
# /var/www/uploads  /data/uploads  none  bind  0  0

# ตัวอย่างใช้กับ Apache/Nginx ที่ chroot:
# /home/user/public_html  /var/www/html/user  none  bind  0  0

# ตรวจสอบ Bind Mount
findmnt | grep bind

ตรวจสอบ Mount Points ที่ใช้งานอยู่

# แสดง Mount Points ทั้งหมด
mount
mount | grep -v "^proc\|^sysfs\|^devtmpfs\|^tmpfs"  # ซ่อน Virtual FS

# แสดงแบบ Tree (ดูโครงสร้าง)
findmnt

# แสดง Mount Points แบบ Table พร้อม Options
findmnt -t ext4,xfs
findmnt --real    # เฉพาะ Real Filesystem

# แสดง Disk Usage ทุก Mount Point
df -h

# ตรวจสอบว่า Partition Mount อยู่หรือไม่
mountpoint /data
# ถ้า Mount: /data is a mountpoint
# ถ้าไม่: /data is not a mountpoint

Troubleshoot เมื่อ fstab ผิดพลาด

fstab ที่ผิดพลาดอาจทำให้ระบบ Boot เข้าสู่ Emergency Mode หรือ Boot ช้ามาก ต่อไปนี้คือวิธีแก้ไข

# ทดสอบ fstab ก่อน Reboot เสมอ
sudo mount -a
# ถ้ามี Error → แก้ไขก่อน

# ระบบ Boot เข้า Emergency Mode (Dracut Emergency Shell)
# สาเหตุ: fstab มี Entry ที่ Mount ไม่ได้
# วิธีแก้:
# 1. เข้าสู่ Emergency Shell
# 2. Remount Root เป็น Read-write
mount -o remount,rw /
# 3. แก้ไข fstab
nano /etc/fstab
# 4. ทดสอบ
mount -a
# 5. Reboot
reboot

# ตรวจสอบ Log ที่เกี่ยวกับ Mount
sudo journalctl -b -p err | grep -i "mount\|fstab"
dmesg | grep -i "mount\|ext4\|xfs\|error"

# nofail Option — ป้องกัน Boot Failure เมื่อ Mount ไม่ได้
# UUID=...  /data  ext4  defaults,nofail  0  0
# nofail = Boot ต่อไปถึงแม้ Mount ไม่สำเร็จ (เหมาะสำหรับ Optional Drive)

Systemd Mount Units (ทางเลือกแทน fstab)

# Systemd รองรับ Mount Unit เป็นทางเลือกแทน fstab
# ชื่อไฟล์ต้องตรงกับ Mount Path (แทน / ด้วย -)
# /data → /etc/systemd/system/data.mount

# ตัวอย่าง /etc/systemd/system/data.mount
[Unit]
Description=Data Mount
After=network.target

[Mount]
What=/dev/disk/by-uuid/a1b2c3d4-e5f6-7890-abcd-ef1234567890
Where=/data
Type=ext4
Options=defaults,noatime

[Install]
WantedBy=multi-user.target

# เปิดใช้งาน
sudo systemctl daemon-reload
sudo systemctl enable --now data.mount
sudo systemctl status data.mount

สรุป

/etc/fstab ประกอบด้วย 6 Field ได้แก่ Device, Mount Point, Filesystem Type, Options, Dump และ Pass ควรใช้ UUID แทน Device Name เสมอเพื่อป้องกัน Device ที่ชื่อเปลี่ยนหลัง Reboot Options สำคัญที่ควรรู้คือ noatime สำหรับประสิทธิภาพ, noexec,nosuid สำหรับ Security, _netdev สำหรับ Network Filesystem และ nofail สำหรับ Optional Drive ที่ไม่ต้องการให้ระบบ Fail เมื่อ Mount ไม่ได้ ควรทดสอบด้วย mount -a ทุกครั้งก่อน Reboot

แนะนำบริการ DE

การตั้งค่า fstab และ Mount Points บน Server ต้องการสิทธิ์ Root และความระมัดระวังสูง Cloud VPS ของ DE ให้ Root Access เต็มรูปแบบพร้อม Console Access ฉุกเฉินผ่าน Web Panel ทำให้แม้ตั้งค่า fstab ผิดพลาดก็สามารถแก้ไขได้โดยไม่ต้องติดต่อ Support

สำหรับผู้ที่ต้องการโฮสต์เว็บไซต์โดยไม่ยุ่งกับ Storage Configuration Cloud Hosting ของ DE จัดการ Filesystem และ Mount Points อัตโนมัติทั้งหมด พร้อม Control Panel สำหรับจัดการพื้นที่ผ่านหน้าเว็บ