ลดความยุ่งยากในการใช้คลาวด์ พูดคุยกับเจ้าหน้าที่

Home Mount ดิสก์แบบถาวรด้วย /etc/fstab และ UUID

Mount ดิสก์แบบถาวรด้วย /etc/fstab และ UUID

เมื่อเพิ่มดิสก์ใหม่ให้เซิร์ฟเวอร์และสั่ง mount ด้วยมือ ดิสก์จะใช้งานได้จนกว่าเครื่องจะรีบูต หลังจากนั้นโฟลเดอร์จะว่างเปล่าเพราะระบบไม่รู้ว่าต้อง Mount อะไร การทำให้ Mount อัตโนมัติทุกครั้งต้องเพิ่มบรรทัดในไฟล์ /etc/fstab และควรอ้างอิงดิสก์ด้วย UUID แทนชื่ออย่าง /dev/vdb1 เพราะชื่ออุปกรณ์อาจสลับกันได้เมื่อเพิ่มหรือถอดดิสก์ ขณะที่ UUID เป็นค่าประจำ Filesystem ที่ไม่เปลี่ยน

บทความนี้เริ่มจากดิสก์ที่มีพาร์ติชันแล้วหรือดิสก์ว่าง ถ้ายังไม่ได้สร้างพาร์ติชัน ดูบทความ เพิ่ม Data Disk บน Linux (fdisk) ประกอบ

สิ่งที่ต้องเตรียม

  • เซิร์ฟเวอร์ Ubuntu 22.04/24.04 หรือ AlmaLinux/Rocky Linux 8-9 และสิทธิ์ sudo
  • ดิสก์ที่เพิ่มเข้าเครื่องแล้ว (เห็นใน lsblk)
  • ช่องทางเข้าหน้าจอ Console ของเซิร์ฟเวอร์ เผื่อกรณี fstab ผิดจนบูตไม่ขึ้น ดู การ Remote เข้า Console Server ผ่าน Web UI

ขั้นตอนที่ 1: หาดิสก์และตรวจว่ามี Filesystem หรือยัง

lsblk -f
NAME   FSTYPE FSVER LABEL UUID                                 FSAVAIL FSUSE% MOUNTPOINTS
vda
└─vda1 ext4   1.0         0b6c8f5e-...                            35G    22% /
vdb
└─vdb1

ในตัวอย่าง vdb1 คือพาร์ติชันใหม่ที่ยังไม่มี Filesystem (คอลัมน์ FSTYPE และ UUID ว่าง) ถ้าเป็นดิสก์ที่มีข้อมูลเดิมอยู่แล้ว จะเห็น FSTYPE และ UUID ทันที ให้ข้ามขั้นตอนที่ 2

ขั้นตอนที่ 2: สร้าง Filesystem (เฉพาะดิสก์ใหม่)

หมายเหตุ: คำสั่ง mkfs ลบข้อมูลทั้งหมดบนพาร์ติชันที่ระบุ ห้ามรันกับพาร์ติชันที่มีข้อมูลหรือพาร์ติชันของระบบ ตรวจชื่อจาก lsblk -f ให้แน่ใจว่าเป็นพาร์ติชันใหม่ที่ว่าง

# ext4 (นิยมบน Ubuntu)
sudo mkfs.ext4 -L data /dev/vdb1
# XFS (ค่าเริ่มต้นของ AlmaLinux / Rocky)
sudo mkfs.xfs -L data /dev/vdb1

เลือกอย่างใดอย่างหนึ่ง ทั้งสองแบบใช้งานได้ดี ข้อต่างที่สำคัญคือ ext4 ลดขนาดได้ (แบบ Offline) ส่วน XFS ขยายได้อย่างเดียว

ขั้นตอนที่ 3: หา UUID

sudo blkid /dev/vdb1
/dev/vdb1: LABEL="data" UUID="3f1c2a7e-9b1d-4c55-8f0a-2d6e4b7c9a10" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="..."

ให้ใช้ค่า UUID ไม่ใช่ PARTUUID คัดลอกเก็บไว้ ค่าในบทความนี้เป็นตัวอย่าง ให้ใช้ค่าจากเครื่องของคุณ

ขั้นตอนที่ 4: สร้าง Mount Point และทดสอบ Mount ด้วยมือ

sudo mkdir -p /data
sudo mount /dev/vdb1 /data
df -h /data

ถ้า df แสดงขนาดของดิสก์ใหม่ แปลว่า Filesystem ใช้งานได้ จากนั้น Unmount ออกก่อนเพื่อทดสอบผ่าน fstab จริง

sudo umount /data

ขั้นตอนที่ 5: สำรองและแก้ไข /etc/fstab

sudo cp -a /etc/fstab /etc/fstab.bak-$(date +%F)
sudo nano /etc/fstab

เพิ่มบรรทัดใหม่ท้ายไฟล์ ตามชนิดของ Filesystem

# ext4
UUID=3f1c2a7e-9b1d-4c55-8f0a-2d6e4b7c9a10  /data  ext4  defaults,nofail  0  2
# XFS
UUID=3f1c2a7e-9b1d-4c55-8f0a-2d6e4b7c9a10  /data  xfs   defaults,nofail  0  0

แต่ละบรรทัดมี 6 ช่อง คั่นด้วยช่องว่างหรือ Tab

ช่องตัวอย่างความหมาย
1UUID=...อุปกรณ์ที่จะ Mount
2/dataMount Point (ต้องมีโฟลเดอร์อยู่แล้ว)
3ext4 / xfsชนิด Filesystem
4defaults,nofailOption การ Mount
50dump (ปัจจุบันไม่ได้ใช้ ใส่ 0)
62 หรือ 0ลำดับการตรวจ fsck ตอนบูต: 1 สำหรับ /, 2 สำหรับดิสก์อื่นที่เป็น ext4, 0 สำหรับ XFS เพราะ XFS ไม่ใช้ fsck ตอนบูต

Option nofail สำคัญมากสำหรับดิสก์ข้อมูล ถ้าดิสก์หายหรือเสีย ระบบจะบูตต่อไปได้ แทนที่จะค้างใน Emergency Mode Option อื่นที่พบบ่อยคือ noatime (ลดการเขียนดิสก์จากการบันทึกเวลาอ่านไฟล์) และ ro (อ่านอย่างเดียว)

ขั้นตอนที่ 6: ทดสอบ fstab ก่อนรีบูต

ขั้นตอนนี้ห้ามข้าม fstab ที่ผิดอาจทำให้เครื่องบูตไม่ขึ้นและเข้า SSH ไม่ได้

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

findmnt --verify ตรวจ Syntax และตรวจว่าอุปกรณ์ที่ระบุมีอยู่จริง ถ้าถูกต้องจะจบด้วย Success, no errors or warnings detected daemon-reload ให้ systemd อ่าน fstab ใหม่ (ถ้าไม่ทำ systemd จะเตือนว่า fstab เปลี่ยนแปลง) ส่วน mount -a Mount ทุกบรรทัดที่ยังไม่ได้ Mount ถ้าคำสั่งไม่แสดงอะไรเลย แปลว่าสำเร็จ และ findmnt /data ต้องแสดง UUID หรืออุปกรณ์ของดิสก์ใหม่

ขั้นตอนที่ 7: ตั้งเจ้าของโฟลเดอร์

Filesystem ใหม่จะเป็นของ root ถ้าแอปหรือผู้ใช้อื่นต้องเขียน ให้ตั้งเจ้าของหลัง Mount แล้ว (ถ้าตั้งก่อน Mount จะเป็นการตั้งค่าที่โฟลเดอร์ว่างข้างใต้ ซึ่งถูกซ่อนเมื่อ Mount)

sudo chown deploy:deploy /data
ls -ld /data

รายละเอียดเรื่องสิทธิ์อยู่ใน ทำความเข้าใจสิทธิ์ไฟล์บน Linux ด้วย chmod และ chown

ตรวจสอบผลลัพธ์

รีบูตเครื่องในช่วงเวลาที่เหมาะสม แล้วตรวจ

sudo reboot
# หลังเข้า SSH ใหม่
df -h /data
findmnt /data
lsblk -f

/data ต้อง Mount อยู่โดยไม่ต้องสั่งเอง ทดลองสร้างไฟล์ด้วย touch /data/test.txt แล้วลบออกเพื่อยืนยันว่าเขียนได้

ปัญหาที่พบบ่อย

เครื่องบูตไม่ขึ้น ค้างที่ Emergency Mode

มักเกิดจาก UUID ผิด ชนิด Filesystem ผิด หรือไม่ได้ใส่ nofail ให้เข้าผ่าน Console ของเซิร์ฟเวอร์ ใส่รหัสผ่าน root ที่หน้า Emergency Mode แล้วแก้ไข

mount -o remount,rw /
nano /etc/fstab
systemctl daemon-reload
reboot

ถ้าไม่แน่ใจว่าบรรทัดไหนผิด ให้ใส่ # หน้าบรรทัดที่เพิ่มใหม่เพื่อปิดไว้ก่อน หรือคัดลอกไฟล์ /etc/fstab.bak-วันที่ กลับมา

mount: wrong fs type, bad option, bad superblock

ชนิด Filesystem ในช่องที่ 3 ไม่ตรงกับของจริง หรือพาร์ติชันยังไม่ได้ mkfs ตรวจด้วย lsblk -f แล้วแก้ให้ตรง

ข้อมูลเดิมในโฟลเดอร์หายไปหลัง Mount

ข้อมูลไม่ได้หาย แต่ถูกซ่อนอยู่ใต้ดิสก์ที่ Mount ทับ ถ้าต้องการย้ายข้อมูลเดิมเข้าดิสก์ใหม่ ให้ Mount ดิสก์ใหม่ที่โฟลเดอร์ชั่วคราว คัดลอกข้อมูลด้วย rsync -a แล้วจึงเปลี่ยน Mount Point

ดิสก์เต็มแต่ต้องการขยาย

ถ้าดิสก์ข้อมูลอยู่บน LVM ดู ขยาย Logical Volume (LVM) บน Linux ถ้าเป็นพาร์ติชันธรรมดา ดู การขยายพื้นที่ Partition หลังเพิ่มพื้นที่ Disk Space (Linux)

หากทำตามขั้นตอนแล้วยังติดปัญหา สามารถติดต่อทีมงาน THAI DATA CLOUD ได้ที่ https://thaidata.cloud/contact/ โดยแจ้งชื่อเซิร์ฟเวอร์ ระบบปฏิบัติการ คำสั่งที่ใช้ และข้อความ Error ที่พบ เพื่อให้ตรวจสอบได้รวดเร็วขึ้น

ผู้ให้บริการคลาวด์ไทย
เพื่อธุรกิจของคนไทย

"มุ่งมั่น" และ "มั่นคง"
พร้อมรับมือทุกการเติบโต
Trust Cloud
คลาว์ที่ปลอดภัย
คือรากฐานที่มั่นคง
cloud security