บันทึกการย้ายระบบ Core Storage จาก Disk แบบ Dedicated มาใช้ ZFS

อาทิตย์ที่แล้วผมเจอปัญหา Disk ระบบ Backup Server ที่บ้านเสียหายหนัก จนต้องเปลี่ยน Disk ลูกใหม่ไป เรื่องนี้ที่จริงไม่ยากครับ ก็แค่หา Disk ลูกใหม่มาแทน Disk ลูกเก่าแล้วก็เสียบเข้าไปก็ใช้งานได้ปกติละ ประเด็นมันอยู่ที่ว่า แล้วถ้าหลังจากนี้ Disk มันเสียตอนที่เราอยากได้ข้อมูลส่วนนั้นมา จะทำยังไงละ?

จนกระทั่งก็ได้เวลาจัดการระบบ Core Storage ใหม่ เพื่อให้ตอบโจทย์ด้านบนครับ โดย Requirement ที่ผมอยากได้หลักๆคือ

  • Hardware ที่ใช้ต้องใช้ของเดิม
  • ความเร็วในการอ่าน/เขียน ต้องไม่ตกลงมาก
  • รองรับการใช้ Disk เก็บข้อมูล Time Machine ได้

ส่วน Hardware ที่ผมใช้ก็ประมาณนี้ครับ

  • CPU AMD Ryzen 5 2400G 3.6 GHz.
  • RAM TeamGroup 32 GB (Bus 3200 Dual Channel)
  • Mainboard MSI B350 Pro-VDH
  • SSD Boot Main System (Hikvision 120GB SATA)
  • SSD Development System (PLEXTOR 256GB SATA)
  • SSD VM Lab System (SANDISK 256Gb SATA)
  • (x2) HDD Seagate Barracuda 2TB
  • (x1) HDD Seagate SV35 2TB
  • (x1) HDD WD Purple 2 TB
  • (x3) Network Gigabit Ethernet

ส่วนตัว NAS Software จะเลือกใช้เป็น XigmaNAS เพราะมี Component ที่จำเป็นต้องใช้ครบและไม่กินทรัพยากรเครื่องมากเกินความจำเป็น โดยทำงานเป็นระบบ VM

ในตอนแรก ผมเลือกใช้ Windows Server 2019 เป็น Main System แล้วใช้ Hyper-V เป็น Hypervision เพราะสามารถต่อ Physical Drive เข้าไปใน VM ได้เลย แจ่มมาก (ตอนแรกลอง Proxmox แล้วไม่ตอบโจทย์ ลอง VMware ESXi ก็มองไม่เห็นการ์ดแลนสักใบ T^T)

แต่ก็ต้องมาเจอปัญหาที่ว่า ไอ Mainboard MSI อันนี้เนี่ย ไม่มี Driver สำหรับ Windows Server เลย แต่ก็สามารถฝืนลง Driver ของ Windows 10 ลงไปได้อยู่

ทำไมต้อง ZFS

ตอนแรกก็ทำ Research เพื่อเลือกระบบจัดการ Storage อยู่พักนึง โดยตัว Mainboard เนี่ย รองรับการทำ RAID ระดับ Hardware นะ แต่พอลองใช้แล้ว ไม่ค่อยถูกใจเท่าไหร่ เหมือนเราจะต้องลง Tools เพื่อ Monitor Disk พวกนี้ด้วย ส่วนตัวอยากให้มันทำได้ในระดับ OS ได้เลยแบบ ไม่ต้องลง Tools

ต่อไปเลยไปมองดูระบบ RAID ระบบ Software โดยพบว่า ตัว XigmaNAS สามารถทำ RAID ระดับ Software ได้และรองรับการทำระบบไฟล์แบบ ZFS ได้ในตัวเลย (เพราะตัวมันพัฒนาต่อมาจาก FreeBSD เลยรองรับ ZFS มาเป็น Default โดยปริยาย) ลอง Research ไปเรื่อยๆ เลยตกลงปลงใจกับ ZFS เพราะ

  • เป็นระบบไฟล์บน FreeBSD ทำให้ระบบ รู้จักระบบไฟล์นี้ทันทีที่ทำการ Format แล้วทำการตั้งค่าเรียบร้อยแล้ว
  • สามารถตั้ง Disk Caching ได้ (ซึ่งในที่นี้ผมใช้ SSD ในการ Cache การเขียนข้อมูล ซึ่งดีงามมาก เขียนข้อมูลได้เร็วในระดับนึงเลย)
  • มีหน้า Monitor ในระบบเลย สามารถดูสถานะผ่านหน้า Admin ได้
  • สามารถขยายตัว Partition (ใน ZFS เราใช้ Dataset) ได้ง่าย ใช้เวลาไม่นาน โดยไม่มี Downtime (หากไม่ต้องติดตั้ง Hardware ใหม่นะ)
  • รองรับการขยายพื้นที่เพิ่มได้แบบง่ายๆ
  • Lock รหัสผ่านระดับ Pool ได้

ผมตัดสินใจนำ Harddisk ของ Seagate ทั้ง 3 ลูก โดยเหลือลูก WD Purple เอาไว้เป็น Dedicated ต่างหาก เนื่องจากความเร็วของ WD Purple นั้นช้ามากๆ มันไม่ได้ออกแบบมาให้ใช้เก็บข้อมูลปกติ ถ้านำมาทำ RAID จะทำให้ความเร็วโดยรวมลดลงอย่างมาก

เราเลือกใช้ RAID-Z1 ซึ่งทำหน้าที่เหมือน RAID-5 ครับ โดยเนื้อที่ที่เราสามารถใช้งานได้ ให้เอา Harddisk ทั้งหมดรวมกัน แล้วหารด้วย 2 ก็จะได้พื้นที่จริงๆที่ใช้งานได้ครับ โดยคุณสมบัติของ RAID-Z1 คือ เราจะสามารถเสีย Disk ได้ 1 ลูกครับ โดยที่ข้อมูลจะยังอยู่ 100% หลังจากนั้นเราสามารถนำ Harddisk ลูกใหม่เชื่อมต่อ ระบบจะ Sync ข้อมูลลงใน Harddisk ลูกใหม่ให้เองครับ

ผมใช้ SSD อีก 1 Virtual Disk เพื่อทำ Caching เล็กๆ ทำให้สามารถเขียนข้อมูลได้เร็วขึ้น เพราะ Harddisk เรามีหลายลูก ทำให้เวลาเขียนข้อมูลลงใน Harddisk นั้นต้องใช้เวลาพอสมควร เราเลยให้ไปเขียนไว้ใน SSD ก่อน แล้วค่อยให้ระบบนำสิ่งที่เขียนใน SSD ไปทยอยเขียนลงใน Harddisk แทน

Service ที่ใช้ ZFS Pool

เราไม่ได้ใช้งานทุก Service นะครับใน ZFS เราจะใช้งานเฉพาะส่วนที่สำคัญ และจะต้องมีการประกันระดับนึงว่า เมื่ออุปกรณ์เสียหาย เราจะไม่เสียข้อมูลส่วนนั้นไปครับ

  • Development Server Backup
  • Bitwarden Credential Database
  • Private Data
  • Time Machine Backup

เริ่มทำงานจริง มันไม่ได้อย่างที่คิด

หลังจาก Setup ทุกอย่างให้ทำงานได้ปกติ ก็ราบรื่นดีครับ ฟังดูเหมือนจะดีครับ แต่เดี่ยวก่อน!!! ชีวิตมันจะราบรื่นอะไรขนาดนั้นเชียว

พลังของ AMD Ryzen เริ่มแผลงฤทธิ์ เมื่อระบบทำงานไปได้ประมาณ​ 24 ชม. ตื่นเช้ามาระบบล่ม อืด Remote ไม่ได้ เข้าใช้งานระบบไม่ได้ ต้องทำการ Restart ระบบใหม่เท่านั้น หาสาเหตุอยู่นานมาก ก็ไปเจอ Log ของ Windows Server บันทึกความผิดพลาดบางอย่างที่ทำให้ระบบทำงานผิดปกติ (ช่วงนั้นกว่าจะเจอต้นเหตุ ใช้เวลาไปประมาณ 3-4 วัน ระบบล่มตอนตี 2 ทุกวัน!!!) จนผมต้องกลับไปลง Windows 10 Pro แทน ปัญหานี้ก็หมดไป

ปัญหาต่อมาคือ ZFS เป็นระบบ Storage Pool ที่เน้นความเร็วมากกกก การที่มันจะทำความเร็วได้เยอะ คือการเอา Data ของเราที่ใช้บ่อยๆ ไปเก็บไว้ในส่วนหน่วยความจำชั่วคราวที่เร็วที่สุด นั้นก็คือ "RAM" โดยมันจะใช้แบบมีเท่าไหร่ กรูจะใช้ให้หมด!!! ใส่ 4GB ใช้ 4GB ใส่ 8GB ใช้ 8GB จนระบบร่วงไปหลายรอบ จนไปเจอว่าต้องทำการเปิด Flag vfs.zfs.arc_max เพื่อให้ระบบจำกัดการใช้ Memory สูงสุดที่ ZFS ที่ใช้ Cache ได้ ระบบเลยกลับมาปกติสุด

ตอนนี้ระบบทำงานได้ปกติแล้วครับ เลยออกมาเล่าให้ฟัง + จดโน๊ตเอาไว้สักหน่อยนึง