การทำ NAS Storage แบบบ้านๆ กินไฟน้อย

จากบทความก่อนหน้านี้ผมเองได้เคยเขียนบทความเกี่ยวกับการทำ Storage อย่างง่ายโดยใช้ Router ของ 3BB แต่จากการใช้งานผมเองก็ต้องพบกับอุปสรรคมากมายหลายๆ ประการ จนคิดว่าไม่น่าที่จะนำไปใช้งานได้จริงๆ เลย แต่จากอุปสรรคตรงนั้น ทำให้ผมหาวิธีการที่จะหาอุปกรณ์ที่จะมาทำ Storage บน Linux Server ซึ่งไม่ได้เป็นอุปกรณ์ขนาดใหญ่กินไฟมาก แต่เป็นอุปกรณ์เล็กๆ ที่ใช้งานในระดับบ้านๆ โดยที่ผมได้คำแนะนำจากวิศวะกรไฟฟ้าอีเล็คทรอนิคส์ท่านหนึ่ง ได้แนะนำให้ผมใช้อุปกรณ์ขนาดเล็ก จำพวก Raspberry PI เนื่องจากเป็นอุปกรณ์ที่ไม่ได้ใช้งานยากจนเกินไป และไม่ได้ใช้เวลาเรียนรู้มากเกินไปสำหรับผม เหมาะสำหรับคนที่ใช้งานลีนุกซ์ในชีวิตประจำวันอย่างผมมาก และ Raspberry PI ใช้ระบบปฎิบัติการที่ชื่อว่า Raspbian ซึ่งต่อยอดมาจาก Debian ที่เป็นต้นกำเนิดของ Ubuntu จึงทำให้ผมตัดสินใจที่จะนำอุปกรณ์เหล่านี้เข้ามาทดแทน Storage ขนาดใหญ่ที่ใช้ในสำนักงาน ใช้อุปกรณ์เล็กๆ ที่ตอบโจทย์แบบเล็กๆ ก็พอ ซึ่งเมื่อคุณได้ดูในรูปที่ 1 คุณจะเห็นว่าอุปกรณ์มีขนาดเล็กกว่ากล่องไม้จิ้มฟัน

รูปที่ 1

เมื่อคุณคิดจะเข้าไปดาวน์โหลดชุดโปรแกรม ให้เข้าไปที่เว็บ  https://www.raspberrypi.org/downloads/raspbian/ โดยที่ผมเองได้เลือกระบบปฎิบัติที่อยู่ในชุด lite เข้ามาใช้งาน ไม่เลือกชุดที่มีกราฟฟิคโหมด เพราะว่าการเลือกระบบปฎิบัติการที่มีกราฟฟิคโหมด จะทำให้การทำงานช้าลง เพราะว่า CPU จำเป็นที่จะต้องไปประมวลผลในส่วนของกราฟฟิค ทำให้เครื่องเล็กๆ ที่ทำงานช้า จำพวกบอร์ดเล็กๆ ที่มีความเร็วไม่สูง ต้องเสียเวลาไปประมวลผลในส่วนที่ไม่จำเป็น
    https://en.wikipedia.org/wiki/Raspberry_Pi <== ข้อมูลจากทางด้าน wiki
    ปัจจุบัน Raspberry PI ได้รับความนิยมมากมาย ท่านสามารถค้นหาบทความภาษาไทยอ่านและศึกษาได้อย่างมากมาย แต่หลายๆ บทความมักจะเป็นการใช้งานที่เกี่ยวกับวินโดส์ แต่ถ้าหากท่านจะต้องใช้  Raspberry ทำเป็น Storage บน Ubuntu หรือว่าบนลีนุกซ์จะต้องทำอย่างไร บทความนี้จะสอนและอธิบายเกี่ยวกับการทำ Raspberry Pi สำหรับการสร้าง Storage บน Linux ซึ่ออาจจะแตกต่างจากคนที่ใช้วินโดวส์ แต่ความชำนาญของแต่ละคนก็จะมีความแตกต่างกัน

รูปที่ 2

โดยที่ขั้นแรกนั้น ผมแนะนำให้ท่าน Format External Drive ของท่านให้เป็น ext3 เสียก่อน
http://www.lanna-oss.org/node/26 <== โดยที่ท่านสามารถศึกษาข้อมูลได้จากบทความที่ผมได้เคยเขียนไว้ก่อนหน้านี้
 
หลังจากที่ท่านได้ Format ก็ให้ท่านเอาไปเสียบกับ Raspberry PI ดังรูปที่ 3

รูปที่ 3

ในขันที่สองเราจำเป็นจะต้องเชื่อมต่อ Exteranl drive เข้ากับ Raspberry PI เพราะท่านต้องเข้าใจตรงนี้ว่า Raspbian OS ที่ผมติดตัังเป็น Lite ไม่ได้มีการ  auto mount หรือว่าเชื่อมต่อโดยอัตโนมัติ ท่านจะต้องใช้คำสั่งเชื่อมต่อด้วยตัวเอง โดยตัวอย่างที่ผมทำตอนนี้ ผมเอง ต้องใช้ ssh เพื่อสั่งไปยัง Raspberry PI ซึ่งท่านจะต่อคียบอร์ดโดยตรงก็ไม่ได้ต่างกัน แต่เหตุผลที่ผมต้องใช้ ssh เพื่อให้ง่ายต่อการจับภาพออกมาเขียนบทความ และเราจำเป็นที่จะต้องใช้ External Drive เพราะว่าความจุของ MicroSD ที่อยู่บน Raspberry PI มีความจุน้อยมาก

โดยใช้ท่านใช้คำสั่งดังด้านล่างต่อไปนี้

sudo mkdir /mnt/storage
sudo mount -t ext3 /dev/sda1 /mnt/storage
sudo chmod -R 777 /mnt/storage
sudo chown -R nobody:nogroup /mnt/storage

ซึ่งจะต้องได้ผลลัพท์ออกมาดังรูปที่ 4

รูปที่ 4

ซึ่งจากตรงนี้ ถ้าหากว่าไม่มีการแจ้ง errors ออกมาแสดงว่าระบบได้ทำการเชื่อมต่ออย่างสมบูรณ์ สำหรับ partition ที่เชื่อมต่อกับ External Drive เช่น /dev/sda1 อาจจะเปลี่ยนไปบ้างตามอุปกรณ์ที่เชื่อมต่อ ซึ่งท่านสามารถตรวจสอบได้ โดยใช้คำสั่ง fdisk -l ถ้าหากท่านไม่ได้เข้าใจ ก็ขอให้ท่านกลับไปอ่านบทความที่ผมได้เขียนไว้ก่อนหน้านี้ และผมเองก็ได้เปิดระบบ Permission ให้เป็นอิสระ ก็เพื่อให้บทความนี้สามารถศึกษาและเข้าใจได้โดยง่าย แต่ชีวิตจริงๆ อย่าได้ทำแบบนี้โดยเด็ดขาด เพราะอันตราย และไม่มีความปลอดภัย และท่านสามารถทดสอบการเชื่อมต่อได้โดยทดสอบการเขียนไฟล์ หรือสร้างไฟล์ไปยัง /mnt/storage

ในขั้นที่สามท่านจะต้องติดตั้งโปรแกรม NFS หรือที่เรียกว่า Network File System.
https://en.wikipedia.org/wiki/Network_File_System <== ท่านสามารถศึกษาได้จาก wiki.
ในส่วนของ NFS ค่อนข้างที่จะเป็นมาตรฐานกลางสำหรับทุกๆ ระบบ ท่านสามารถประยุกต์ไปใช้ได้กับระบบปฎิบัติการอื่นๆ

sudo apt-get install nfs-kernel-server
sudo systemctl start nfs-kernel-server.service
sudo service nfs-kernel-server restart

หลังจากที่ท่านได้สั่งคำสั่งเหล่านี้ออกไปแล้ว จะได้ผลลัพท์ดังรูปที่ 5 ซึ่งคำสั่งแรกที่ใช้ติดตั้ง package อาจจะต้องใช้เวลานาน เพราะต้องโหลดโปรแกรมจากอินเตอร์เน็ตมาติดตั้ง คำสั่งที่สองเป็นติดตั้ง package ที่ชื่อว่า nsf-kernel-server ให้ขึ้นทำงานในระบบตามโครงสร้างของ systemd ส่วนคำสั่งที่สามเป็นการ restart service เพื่อให้แน่ใจได้ว่าสามารถทำงานได้อย่างไม่มีปัญหา

 

รูปที่ 5

จากนั้นให้แก้ใขไฟล์ /etc/exports โดยใส่ข้อความจากด้านล่างนี้ต่อท้าย

/mnt/storage         *(rw,sync,no_subtree_check)

รูปที่ 6

รูปที่ 7

รูปที่ 8

รูปที่ 9

จากรูปแบบการกำหนดแบบนี้ ค่อนข้างจะเปิดกว้าง ไม่สนใจเรื่องความปลอดภัย แต่บทความนี้เพื่อศึกษาเท่านั้น ถ้าหากว่าท่านชำนาญแล้ว ท่านต้องไปปรับแต่งในเรื่องของความปลอดภัยเพิ่มเติม

จากนั้นให้ Restart Service โดยใช้คำสั่ง
sudo service nfs-kernel-server restart

จากนั้นให้เราตรวจสอบว่าระบบไฟล์ของเราสามารถเปิดแชร์ไฟล์ได้หรือยัง โดยใช้คำสั่ง
sudo exportfs

ก็จะแสดง path ของระบบ NFS ที่เราสามารถอ่านเขียนและเข้าถึงได้ ดังรูปที่ 10

รูปที่ 10

ในขั้นตอนที่ 4 ถ้าหากว่าเราต้องการที่จะให้ระบบของเรานั้นเปิดใช้งานโดยอัตโนมัติทุกๆ ครั้งที่เปิดใช้งานอุปกรณ์แล้ว ให้เราทำตามขั้นตอนดังนี้

ขั้นแรกให้เราใช้คำสั่ง blkid เพื่อที่จะตรวจสอบค่า UID ในระบบของเรา
sudo blkid

pi@PiStorage:~ $ sudo blkid
/dev/mmcblk0p1: LABEL="boot" UUID="B60A-B262" TYPE="vfat" PARTUUID="8418f79f-01"
/dev/mmcblk0p2: UUID="9a7608bd-5bff-4dfc-ac1d-63a956744162" TYPE="ext4" PARTUUID="8418f79f-02"
/dev/sda1: UUID="e710de3d-8f06-4d06-a48c-936a3c892ea1" TYPE="ext3" PARTLABEL="Storage" PARTUUID="71e8afb6-7817-41b0-aad4-5b431fdc841d"
/dev/mmcblk0: PTUUID="8418f79f" PTTYPE="dos"

pi@PiStorage:~ $

รูปที่ 11

โดยเราจะนำค่า UUID ของ /dev/sda1 ซึ่งก็คือ External drive ของเรา เราจะได้ค่า UUID="e710de3d-8f06-4d06-a48c-936a3c892ea1" เอาไปปรับแต่งโปรแกรม fstab
โดยใช้คำสั่งดังด้านล่างนี้แก้ใขไฟล์ fstab
sudo vi /etc/fstab

โดยเพิ่ม เข้าไปที่ท้ายไฟล์ fstab
UUID=e710de3d-8f06-4d06-a48c-936a3c892ea1 /mnt/storage ext3 defaults,noatime,auto 0 0

รูปที่ 12

รูปที่ 13

รูปที่ 14

รูปที่ 15

จากนั้นให้เราทำการทดสอบ โดย Restart เครื่อง แล้วตรวจสอบอีกครั้ง

ในขั้นตอนที่ 5 ในขั้นตอนนี้เรา จะทำการเชื่อมต่อระหว่าง Linux ที่เราใช้งาน กับระบบไฟล์ที่เราแชร์ไว้ใน Raspberry PI
โดยใช้คำสั่งเหล่านี้บน Terminal ของ Ubuntu Desktop

sudo apt-get install nfs-common
mkdir ~/StorageShare
sudo mount 192.168.1.36:/mnt/storage ~/StorageShare

รูปที่ 16

ซึ่งหลังจากใช้คำสั่งเหล่านี้จะปรากฎดังรูปที่ 16 ซึ่ง command line ชุดนี้จะเป็นคำสั่งในลีนุกซ์ที่เป็นตระกูล Debian ไม่ว่าจะเป็น  Ubuntu, Mint ฯลฯ จะสามารถใช้คำสั่งเดียวกัน

ซึ่งหลังจากกระบวนการทั้งหมดเสร็จสิ้นแล้ว คุณก็จะได้โฟลเดอร์ที่ชื่อว่า StorageShare ที่ทุกๆ ครั้งเมื่อคุณ copy ไฟล์อะไรลงไปที่ Folder นี้ก็ตามข้อมูลจะไปอยู่บน External Drive ที่คุณนำไปเสียบไว้กับ Raspberry Pi คุณสามารถทดสอบ โดยการนำ External Drive ไปเสียบต่อกับลีนุกซ์ ที่เครื่องของคุณ คุณก็จะเห็นว่าข้อมูลที่คุณได้ Copy ลงไปจะอยู่ครบ

รูปที่ 17

ในรูปที่ 17 นี้เป็นการทดสอบการความเร็วในการส่งข้อมูลไปเก็บไว้ที่ External Drive บนเครื่องที่ผมใช้งาน ผมทดสอบได้ 16.5 Mega Byte ต่อวินาที ซึ่งความเร็วในระดับนี้นับว่าสดวกต่อการใช้งานเป็นอย่างมาก

คำแนะนำจากประธานชมรมโอเพนซอร์สล้านนาที่คุณจำต้องศึกษาและพิจารณา
1. ไม่ควรแชร์ไฟล์ กับระบบที่มีความแตกต่างกันอย่างสิ้นเชิง เช่นใช้ระบบไฟล์ของวินโดวส์กับลีนุกซ์ เพราะสองระบบนี้แตกต่างกันอย่างมาก มีโอกาสที่ข้อมูลจะสูญหายมีมาก  เพื่อความปลอดภัยแล้วคุณควรจะใช้ระบบไฟล์ของวินโดวส์แชร์ไฟล์ให้กับวินโดวส์ ระบบไฟล์ของลีนุกซ์ใช้งานกับลีนุกซ์ คุณควรจะศึกษาด้วยว่าการแชร์ไฟล์ของคุณแชร์ไฟให้กับระบบปฎิบัติการอะไรบ้าง และระบบปฎิบัติการนั้นใช้ระบบไฟล์อะไร

2. บทความเป็นเพียงแบบเรียนให้ไว้ศึกษาเท่านั้น ยังไม่ได้เป็นบทความที่เสนอแนะเพื่อใช้งานจริง เนื้อหาบทความนี้จะไม่มีเรื่องของความปลอดภัย เพื่อลดขั้นตอนในการเรียนรู้ และให้ผู้เรียนได้รู้จักส่วนที่สำคัญให้เป็นก่อน ก่อนที่จะนำไปพัฒนาต่อยอดให้มากกว่านี้ เพราะถ้าคุณนำวิธีการในบทความนี้ ไปใช้งานจริงๆ คุณอาจจะโดนไวรัสเรียกค่าไถ่ หรือถูกขโมยข้อมูลสำคัญๆ ไปได้ ก่อนที่จะนำไปใช้งานจริง คุณควรจะศึกษาเรื่องความปลอดภัยในระบบคอมพิวเตอร์และอินเตอร์เน็ต ให้เข้าใจอย่างถ่องแท้ ก่อนที่คุณจะนำไปใช้งานจริง

อ้างอิงจาก

https://www.youtube.com/watch?v=RMW1Zi8MSas

https://www.raspberrypi.org/forums/viewtopic.php?t=14500

http://www.instructables.com/id/Turn-Raspberry-Pi-into-a-Network-File-Sy...

https://help.ubuntu.com/lts/serverguide/network-file-system.html

https://www.digitalocean.com/community/tutorials/how-to-set-up-an-nfs-mo...

https://en.wikipedia.org/wiki/Network_File_System

https://help.ubuntu.com/community/UsingUUID