Tutorial

การสร้าง SSD Storage Pool บน Synology DSM

By Arnon Puitrakul - 17 พฤษภาคม 2024

การสร้าง SSD Storage Pool บน Synology DSM

สำหรับคนที่ใช้ Synology NAS บางรุ่นจะมีช่อง M.2 สำหรับเสียบ NVMe SSD โดยพื้นฐาน Synology บอกว่ามันสำหรับการทำ Cache แต่ถ้าเราต้องการเอามันมาทำเป็น Storage ละ มันจะทำได้มั้ย วันนี้เราจะมาเล่าวิธีการทำกัน

คำเตือน : แนะนำว่า เราควรมีความรู้พื้นฐานเกี่ยวกับการใช้ Linux Command Line ด้วยจะดีมาก

DSM อนุญาติให้ทำ Storage Pool จาก SSD แล้ว

ก่อนหน้านี้ การใส่ SSD เข้าไปในระบบ ทาง Synology อนุญาติให้ทำเป็นแค่ Cache Device เท่านั้น แต่ในบาง System บางการใช้งาน การใช้ Cache นั้นอาจจะไม่ได้ผลกับการใช้งานเท่าไหร่ ทำให้เหมือนเราเสียช่องเสียบไปฟรี ๆ

แต่หลัง ๆ มา จำไม่ได้ว่า DSM Version อะไร น่าจะ 7.0 ที่อนุญาติให้ผู้ใช้สามารถสร้าง Storage Pool จาก SSD ได้ ทำให้เราสามารถนำมันมาใช้เป็น Volume ในการเก็บข้อมูล หรือเอามารันพวก VM ต่าง ๆ ได้นั่นเอง

ปัญหาอยู่ที่ว่า การที่เราจะนำ SSD มาสร้างเป็น Storage Pool ได้นั้น SSD ที่เราใช้จะต้องเป็น SSD ที่ได้รับรองจาก Synology เท่านั้น หรือตัวที่อยู่ในรายการของ Hardware ที่เข้ากันได้เท่านั้น ถึงจะทำได้ ซึ่งถ้าเป็น Synology SSD เอง ขนาดสูงสุดมีแค่ 400 GB เท่านั้นกับราคาแพงแสนแพง แต่ถ้าเราไปดูสเปกมันดี ๆ เราจะเห็นว่ามันไม่ได้แพงขนาดนั้นหรอก แค่ว่า มันอาจจะไม่จำเป็นกับการใช้งานตามบ้านก็แค่นั้น

แต่ ๆๆๆๆ แน่นอนว่า Synology Community จะหยุดแค่นั้นเหรอ ตอนนี้เราสามารถที่จะบังคับทำให้ เราสามารถใช้ SSD อะไรก็ได้ มาทำเป็น Storage Volume แล้ว เรามาดูขั้นตอนกัน

Step 1: Enabling SSH Service

ในการจะทำ เราไม่สามารถทำผ่านหน้า Web GUI ของ DSM ได้ เราจำเป็นต้องทำงานผ่าน Command Line เท่านั้น ดังนั้น เราจำเป็นต้องเข้าไปเปิด SSH Service เพื่อให้เราสามารถ Remote เข้ามาตั้งค่าได้

โดยการให้เราเข้าไปที่ Control Panel > Terminal & SMNP ติ๊กเลือก Enable SSH Service และกด Apply

ข้อควรระวัง หลังจากการตั้งค่านี้แล้ว เราควรกลับมาปิด SSH Service ด้วย เพื่อลด Attack Surface ที่อาจจะเกิดขึ้นได้ เมื่อจะใช้ค่อยเปิด ไม่ใช้ก็ปิดไป

Step 2: Partitioning & Create Storage Pool

หลังจากนั้นให้เรา SSH เข้าสู่ Synology NAS ของเราด้วย Username และ Password เดียวกันกับที่เราใช้เข้าหน้า Admin ของ DSM

ls /dev/nvme*

จากนั้นให้เรามาเช็คก่อนว่า NVMe SSD หรือ SSD ที่เราเสียบเข้ามา มันเข้า มันติดจริง ๆ มั้ย หากรันออกมาแล้ว มี NVMe Drive แสดงออกมาครบ แปลว่า NVMe SSD ที่เราเสียบเข้าไปมันทำงานได้ตามปกติ หรือถ้าพบว่า มันขึ้นมาแค่บางลูก หรือไม่ขึ้นเลย แนะนำให้ลอง Restart หรือตรวจสอบการเชื่อมต่อ NVMe SSD กับตัวเครื่องว่าเสียบแน่น หรือ ลืมล๊อคอะไรหรือไม่

sudo -i

หลังจากนี้ เราต้องทำงานกับคำสั่งที่อาศัย Permission ดังนั้น เราขอ Superuser ทิ้งไว้เลยจะทำให้เราเขียนคำสั่งได้สะดวกมากขึ้น

synopartition --part /dev/nvme0n1 12
synopartition --part /dev/nvme1n1 12

จากนั้น เราจะทำการสร้าง Synology Partition สำหรับ NVMe SSD ทั้งสองลูก หากเรามีลูกเดียว ให้เราเช็คจาก ls รอบแรกว่า NVMe SSD เราอยู่ที่ไหนแล้วปรับคำสั่งไปตามที่เรามีเด้อ

cat /proc/mdstat

ขั้นตอนต่อไปของเราคือการสร้าง RAID ที่เป็น Logical Volume แต่ก่อนที่เราจะสร้าง เราจำเป็นต้องเข้ามาเช็คก่อน เผื่อในบาง System เราตั้งค่าไว้มีหลาย Storage Pool คำสั่งด้านบนมันจะแสดงว่า เรามี Logical Volume ชื่ออะไร เท่าไหร่กี่อัน รายละเอียดเป็นอย่างไร ให้เราดูที่ชื่อของมันไว้ เช่น /dev/md2 เพราะชื่อที่เราจะต้องใช้สร้างอันใหม่นี้จะต้องไม่ซ้ำกับของเดิม แนะนำว่า อันเดิมเลขรันถึงเท่าไหร่ ก็รันต่อไปอีกเลข จบ

mdadm --create /dev/md3 --level=1 --raid-devices=2 --force /dev/nvme0n1p3 /dev/nvme1n1p3

ถึงเวลาสร้าง Storage Pool จริง ๆ ละ โดยการใช้คำสั่งด้านบน ตรง Level เราสามารถเลือก RAID Mode ได้ เช่นในตัวอย่างด้านบน เรามี SSD 2 ลูก เราเลือกเป็น RAID 1 เลยเลือก level=1 ไป แต่ถ้าเราต้องการ RAID 0 เราก็เลือกเป็น level=0 ได้

mdadm --create /dev/md3 --level=0 --raid-devices=1 --force /dev/nvme0n1p3 

แต่หากเรามี SSD ลูกเดียว เรามีตัวเลือกเดียว คือรันของใครของมัน เราก็แค่เปลี่ยนเป็น level=0 และ raid-devices=1 เท่านั้น หรือเคสนอกจากนั้น มีมากกว่า 2 ลูกตัวเลือกเราจะเพิ่มขึ้นมาละ เช่น RAID 5 หรือมากกว่า แล้วแต่เราจะตั้งค่าเลย

cat /proc/mdstat

เมื่อเรา mdstat ขึ้นมาอีกครั้ง เราจะต้องพบกับ Storage Pool ที่เราสร้างขึ้นมา ถ้าไม่เจอ แปลว่าคำสั่งที่เรารันก่อนหน้านี้น่าจะผิดพลาดบางอย่างแน่นอน ต้องกลับไปเช็คในขั้นตอนก่อนหน้า

Step 3 Creating Volume

หลังจากเราได้ Storage Pool มาแล้ว เราจะมาสร้าง Volume สำหรับการเก็บข้อมูลกัน

echo 0 > /sys/block/md3/queue/rotational

ก่อนอื่น ด้วยความที่ Storage Pool นี้ไม่ได้ใช้ Storage Media ที่เป็น Rotational หรือพวกที่เป็นจานอย่าง HDD เราจำเป็นต้องบอกเครื่องก่อนนะว่า อันนี้ไม่ใช่ HDD นะ โดยคำสั่งด้านบน

mkfs.btrfs -f /dev/md3

จากนั้นให้เราสร้าง BTRFS Volume โดยการใช้คำสั่งด้านบน เท่านี้ เราก็จะได้ Storage Pool ที่มี Volume เรียบร้อย แต่ตอนนี้ Synology DSM จะยังไม่เห็นอะไร เพราะมันไม่เช็คแบบ Real-time เราจำเป็นต้องสั่ง Restart เครื่องอีกที

Step 4: Assemble Storage Pool

เมื่อเรา Restart กลับมา เปิด Storage Manager เราจะพบว่า มันมีขึ้น Available Pool ที่เราได้สร้างไว้ เราสามารถ Import มันเข้ามาใน DSM ได้โดยการกดที่ จุด 3 จุดเลือก Online Assemble

จากนั้นมันจะแสดงหน้าข้อมูล Pool ของเรา เช่น RAID Type ในที่นี้เราเข็ดกับการย้ายข้อมูลละ เลยเลือกเป็น RAID 1 มา มันก็แสดงได้ถูกต้อง หากไม่มีอะไรผิดพลาด เราก็แค่กด Apply เท่านั้น

เท่านี้ก็เป็นอันเรียบร้อย ที่เหลือมันจะทำการ Assemble Storage Pool กับ Volume ขึ้นมา และมีการรันพวก Check อะไรนิดหน่อยอาจจะใช้เวลาไม่น่าเกิน 2-3 ชั่วโมง ก็น่าจะใช้ได้ปกติเร็วจี๊แล้ว

Maintenance: Repairing Pool

ในกรณีปกติที่หากเราใช้ RAID 1 และ 5 หรือ ประเภทที่มี Redundancy เมื่อ SSD ลูกใดลูกหนึ่งเกิดเสีย หรือมีปัญหาขึ้นมา เราสามารถถอดลูกเก่า และเสียบลูกใหม่ แล้วกด Repair ใน Storage Manager ของ DSM ได้ทันที แต่สำหรับ SSD ที่มันไม่ได้รองรับแบบ Official เราจำเป็นจะต้องมีทริกอะไรนิดหน่อย

synopartition --part /dev/nvme1n1 12
mdadm --manage /dev/md3 -a /dev/nvme0n1p3

สิ่งที่เราจะต้องทำมี 2 เรื่องด้วยกันคือสร้าง Partition เพื่อให้ DSM มันอ่านเจอ และ เพิ่มอุปกรณ์เข้าไปในใน Storage Pool จากนั้นให้เรา Restart จากนั้นให้เราเปิด Storage Manager มันจะมีตัวเลือกให้เรากด Repair

สรุป

การสร้าง Storage Pool จาก SSD ทำให้เราสามารถใช้งานพวก Application อย่าง Docker และ VM ได้รวดเร็วมากขึ้น ถือว่าเป็นอะไรที่ดีมาก ๆ แต่อยากให้ระวังตอนทำเพราะมันเป็น Command Line เราควรจะตรวจสอบทุกคำสั่งที่เรารันก่อนนะว่ามันถูกต้อง หรือไม่ถูกต้องอย่างไร เพื่อไม่ให้เรารันคำสั่งผิดพลาดไปทำให้ข้อมูลสูญหายได้

Read Next...

จัดการเรื่องแต่ละมื้อ แต่ละเดย์ด้วย Obsidian

จัดการเรื่องแต่ละมื้อ แต่ละเดย์ด้วย Obsidian

Obsidian เป็นโปรแกรมสำหรับการจด Note ที่เรียกว่า สารพัดประโยชน์มาก ๆ เราสามารถเอามาทำอะไรได้เยอะมาก ๆ หนึ่งในสิ่งที่เราเอามาทำคือ นำมาใช้เป็นระบบสำหรับการจัดการ Todo List ในแต่ละวันของเรา ทำอะไรบ้าง วันนี้เราจะมาเล่าให้อ่านกันว่า เราจัดการะบบอย่างไร...

Loop แท้ไม่มีอยู่จริง มีแต่ความจริงซึ่งคนโง่ยอมรับไม่ได้

Loop แท้ไม่มีอยู่จริง มีแต่ความจริงซึ่งคนโง่ยอมรับไม่ได้

อะ อะจ๊ะเอ๋ตัวเอง เป็นยังไงบ้างละ เมื่อหลายเดือนก่อน เราไปเล่าเรื่องกันขำ ๆ ว่า ๆ จริง ๆ แล้วพวก Loop ที่เราใช้เขียนโปรแกรมกันอยู่ มันไม่มีอยู่จริง สิ่งที่เราใช้งานกันมันพยายาม Abstract บางอย่างออกไป วันนี้เราจะมาถอดการทำงานของ Loop จริง ๆ กันว่า มันทำงานอย่างไรกันแน่ ผ่านภาษา Assembly...

Monitor การทำงาน MySQL ด้วย Prometheus และ Grafana

Monitor การทำงาน MySQL ด้วย Prometheus และ Grafana

นอกจากการทำให้ Application รันได้แล้ว อีกเรื่องที่สำคัญไม่แพ้กันคือการวางระบบ Monitoring ที่ดี วันนี้เราจะมาแนะนำวิธีการ Monitor การทำงานของ MySQL ผ่านการสร้าง Dashboard บน Grafana กัน...

เสริมความ"แข็งแกร่ง" ให้ SSH ด้วย fail2ban

เสริมความ"แข็งแกร่ง" ให้ SSH ด้วย fail2ban

จากตอนที่แล้ว เราเล่าในเรื่องของการ Harden Security ของ SSH Service ของเราด้วยการปรับการตั้งค่าบางอย่างเพื่อลด Attack Surface ที่อาจจะเกิดขึ้นได้ หากใครยังไม่ได้อ่านก็ย้อนกลับไปอ่านกันก่อนเด้อ วันนี้เรามาเล่าวิธีการที่มัน Advance มากขึ้น อย่างการใช้ fail2ban...