เพิ่ม USB Drive แบบ ext4 ให้ Raspberry Pi
Tags: raspberrypi, mount, ext4, usbflashdrives
Published: 2019-10-25 07:29:00

---
title: เพิ่ม USB Drive แบบ ext4 ให้ Raspberry Pi
published: true
date: 2019-10-13 19:23:09 UTC
tags: raspberry-pi,mount,ext4,usb-flash-drives
canonical_url: https://dev.to/mrchoke/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 อ่านไม่ได้แค่นั้น ฮาๆ

![](https://cdn-images-1.medium.com/max/1024/1*53fjLH7PWSSYSt0wB2tpqQ@2x.jpeg)

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

**Fdisk**

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

```
lsblk
```

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

![](https://cdn-images-1.medium.com/max/459/1*u8zgGQ5N0DXHAYU8kWLLYw.png)<figcaption>lsblk</figcaption>

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

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

```
sudo fdisk /dev/sda
```

![](https://cdn-images-1.medium.com/max/735/1*VDFqHwj-mJFERrSIBY2bQQ.png)<figcaption>fdisk /dev/sda</figcaption>

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

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
```

![](https://cdn-images-1.medium.com/max/394/1*KnD6nmNGHmd3fH5n0lf15g.png)

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

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

```
cd

mkdir data
```

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

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

```
blkid
```

![](https://cdn-images-1.medium.com/max/895/1*_Km7v7Gs6aIv98CUus58Sw.png)<figcaption>blkid</figcaption>

3. แก้ไข /etc/fstab หรือ filesystem table นั่นเอง

```
sudo nano -w /etc/fstab
```

![](https://cdn-images-1.medium.com/max/621/1*ZPHzWpfxru7vGXQSF9kM8g.png)<figcaption>/etc/fstab</figcaption>

```
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

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

```
sudo umount /dev/sda1
```

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

```
sudo mount /dev/sda1
```

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

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

![](https://cdn-images-1.medium.com/max/399/1*KRWHkvbDjMB6SGt3F3Ftow.png)

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

![](https://cdn-images-1.medium.com/max/438/1*Vl5gafa6sjwlZWaT251CTw.png)<figcaption>ls</figcaption>

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

```
sudo chown -R $UID:$GID data
```

![](https://cdn-images-1.medium.com/max/394/1*L_wg_4qf2IR13i5AfnBOUQ.png)<figcaption>chown</figcaption>

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

![](https://cdn-images-1.medium.com/max/426/1*lFhJ1RWwXcU2tG5rJuEVWw.png)<figcaption>ตรวจสอบ</figcaption>

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

![](https://cdn-images-1.medium.com/max/1024/1*AzJrCCVfTqU9jCHTcXuvbA@2x.jpeg)