DEV Community

MrChoke
MrChoke

Posted on • Originally published at dev.to on

เพิ่ม USB Drive แบบ ext4 ให้ Raspberry Pi

ถ้าใช้ Raspberry Pi ทำงานจริงจังมักจะพบปัญหา SD Card จะเต็มเร็วเพราะใช้ขนาดไม่ใหญ่มากนัก ถ้ามี USB แบบ External แบบต่างๆ ก็สามารถเอามาเสียบใช้ได้

ทำไมต้องทำเป็นแบบ ext4 ใช้แบบ vfat exFat หรือ ntfs ไม่ได้หรือ จริงๆ ก็ได้แหละ แถมอาจจะไม่ใช่ ext4 อาจจะเป็น ext2 ext3 xfs btrfs แล้วแต่ชื่นชอบ แต่ ext4 กลางๆ สุดละสำหรับ linux และที่ไม่เลือก filesystem แบบ Windows ก็เพราะ เรื่อง permission และพวก symlink และอีกหลายอย่างที่ ext4 สามารถทำงานได้ดีกว่าบน linux ส่วนข้อเสียของ ext4 คือ Windows กับ Mac อ่านไม่ได้แค่นั้น ฮาๆ

สมมติว่าผมซื้อ Flash Drive มาใหม่สดๆ ร้อนๆ สิ่งที่ต้องทำมีดังนี้

Fdisk

ก่อนอื่นเราต้องเปลี่ยนชนิดของ partition ให้เป็น linux ด้วยคำสั่ง fdisk แต่เราต้องรู้ก่อนว่า usb ที่เสียบอยู่นั้นชื่ออะไร ลองใช้คำสั่ง

lsblk

ซึ่งจะได้ผลลัพธ์คืออุปกรณ์จำพวก storage เช่น

lsblk

สำหรับมือใหม่วิธีสักเกตง่ายๆ เบื้องต้นคือ ถ้าเป็นตัว microSD ตัวระบบหลักจะเป็น /dev/mmcblk0 ส่วน usb ที่เสียบเข้ามาจะเป็น /dev/sdX โดย X จะเป็น a b c … z ถ้าเสียบอยู่อันเดียวก็จะเป็น /dev/sda

เมื่อรู้ว่า usb เชื่อมตัวอยู่ที่ /dev/sda ก็สามารถใช้คำสั่ง

sudo fdisk /dev/sda

fdisk /dev/sda

ตัวอย่างในรูปด้านบน ผมใช้คำสั่งอยู่ไม่กี่คำสั่งคือ

p ให้ print partitions ปัจจุบันจะเห็นว่ามี /dev/sda1 partition เดียวซึ่งง่ายเลยเราจะใช้อันนี้แหละไม่ต้องลบหรือแบ่งใหม่

t คือการเปลี่ยนชนิด (type) ของ partition สำหรับ linux จะเป็น 83 เป็นเลขฐาน 16 นะ

wq เป็นสองคำสั่งรวมกันคือ write และ quit คือสั่งให้เขียนที่แก้ลงไปแล้วออก

ตอนนี้เราจะไม่เห็นการเปลี่ยนแปลงต้องทำการ format เสียก่อน แต่ต้อง unmount เสียก่อน

sudo umount /dev/sda1

แล้วตามด้วย format เป็น ext4 ผมตั้งชื่อให้ partition ด้วยโดยใส่ -L ไปด้วย

sudo mkfs.ext4 -L data /dev/sda1

รอสักครู่ก็เสร็จเรียบร้อย ถ้าเราถอดแล้วเสียบใหม่ก็จะถูก mount เป็น ext4

lsblk -l -o name,type,fstype,mountpoint

แต่ผมจะบังคับว่าให้ mount มาเป็น directory ชื่อ data ใน home ของเราเลยซึ่งจะใช้เก็บงานต่างๆ ไว้ในนี้ทั้งหมดหลังจากนี้

  1. สร้าง directory data ก่อน
cd

mkdir data

ใช้คำสั่ง cd แล้ว enter คือให้กลับมายัง home นั่นเองเผื่อเข้าไปอยู่ที่อื่นมาก่อน

  1. ดูค่า UUID หรือ PARTUUID หรือ LABEL แล้วแต่สะดวกว่าจะใช้ค่าไหน โดยใช้คำสั่ง
blkid

blkid

  1. แก้ไข /etc/fstab หรือ filesystem table นั่นเอง
sudo nano -w /etc/fstab

/etc/fstab

PARTUUID=53394010-01 /home/pi/data ext4 defaults,noatime 0 1

อย่างที่ผมบอกคือค่าแรกเราสามารถจะใช้ LABEL ,UUID, PARTUUID หรือ /dev/sda1 ก็ได้แต่การใช้ UUID หรือ PARTUUID จะสะดวกกว่าเพราะสองค่านี้จะเปลี่ยนก็ต่อเมื่อเราแก้ไข partition ใหม่ ส่วน LABEL มีโอกาสชนกันได้ และ /dev/sda1 ถ้าลำดับการเสียบไม่เหมือนเดิมก็จะเปลี่ยนไปได้ เมื่อแก้ไขเสร็จก็ให้ทำการ save และออกโดยกด Ctrl-X กด y และ กด enter

  1. mount ใหม่ ถ้าขี้เกียจพิมพ์คำสั่งก็ให้ สั่ง eject แล้วเสียบใหม่ หรือถ้าอยากพิมพ์คำสั่งเล่นๆ ก็ให้พิมพ์ดังนี้
sudo umount /dev/sda1

แล้วสั่ง mount อีกครั้ง

sudo mount /dev/sda1

ตรวจสอบอีกครั้ง

lsblk -l -o name,type,fstype,mountpoint

  1. permission ครั้งแรกสำหรับ filesystem linux จะเป็นสิทธิของ root ลอง ls ดู

ls

ดังนั้นเราต้องเปลี่ยนสิทธิให้เป็นผู้ใช้ปัจจุบันก่อน

sudo chown -R $UID:$GID data

chown

ลองตรวจสอบเขียนข้อมูลดู

ตรวจสอบ

เท่านี้ก็เสร็จเรียบร้อยแล้วเมื่อเปิดเครื่องมาครั้งต่อไปก็จะ mount ให้ที่เดิมอัตโนมัติ หลังจากนี้เราสามารถนำข้อมูลมาเก็บ เช่น virtualenv ของ python java JDK พวกรูปภาพ วิดีโอ ต่างๆ ก็ไม่ต้องกลัวระบบเต็มอีก ทั้งนี้สามารถใช้ได้กับ HDD หรือจะเป็น SSD ก็ได้

Top comments (0)