14 คะแนน โดย GN⁺ 2025-10-07 | 3 ความคิดเห็น | แชร์ทาง WhatsApp
  • สร้างสตอเรจ S3 ของตัวเองด้วย Framework โน้ตบุ๊กและ JBOD เพื่อให้ใช้งานความจุ 10TB ได้ในต้นทุนต่ำ และทำงานได้เสถียรแม้ปล่อยทิ้งไว้ 4 เดือนโดยไม่ต้องดูแล
  • ใช้ Framework โน้ตบุ๊กมือสองที่ไม่มีหน้าจอ ติดตั้ง ZFS และ garage S3 เพื่อทำเป็นโฮมเซิร์ฟเวอร์ และใช้เป็นพื้นที่เก็บข้อมูลขนาดใหญ่สำหรับโปรเจกต์ติดตาม SDK ของ AppGoblin
  • หลังจากไม่แตะเซิร์ฟเวอร์เลยเป็นเวลา 4 เดือน เมื่อล็อกอินเข้าไปพบว่า มีการใช้งานไปแล้ว 10TB และระบบกำลังรอการอัปเกรด และหลังรีสตาร์ตก็ยังทำงานได้ตามปกติทั้งหมด
  • กระบวนการ อัปเกรด garage S3 จาก v1 ไป v2 ก็เสร็จสิ้นได้โดยไม่มีปัญหา ทำให้มั่นใจในประสบการณ์การใช้งานที่เสถียร
  • การเชื่อมต่อโน้ตบุ๊กกับ JBOD ผ่าน USB ซึ่งเป็น การตั้งค่า ZFS ที่ไม่ค่อยเป็นมาตรฐาน เคยทำให้เกิดปัญหาในช่วงแรก แต่แก้ไขได้ด้วยการย้ายเมทาดาทาไปไว้ในเครื่องโน้ตบุ๊ก

ที่มาและแรงจูงใจของโปรเจกต์

  • ตัดสินใจโฮสต์ S3 เองเมื่อ 5 เดือนก่อน
    • กำลังทำงานติดตาม SDK ของแอป Android และ iOS ชั้นนำ 100,000 แอปของ AppGoblin
    • ต้องการพื้นที่จัดเก็บข้อมูลขนาดใหญ่ แต่ก็อยากประหยัดค่าใช้จ่าย
    • จึงเลือกแนวทาง self-hosting แทน cloud S3 แบบเดิม

ฮาร์ดแวร์ที่ใช้

  • ใช้ Framework โน้ตบุ๊ก
    • ซื้อ Framework โน้ตบุ๊กมือสองที่ไม่มีหน้าจอมาในราคาถูก
    • เป็นรุ่นเก่าจึงเหมาะกับการนำมาใช้เป็นโฮมเซิร์ฟเวอร์
    • ใช้ประโยชน์จากความพกพาสะดวกและการใช้พลังงานต่ำของโน้ตบุ๊ก
  • เพิ่ม JBOD (Just a Bunch of Disks)
    • อาร์เรย์ดิสก์ภายนอกสำหรับการจัดเก็บข้อมูลความจุสูง
    • เชื่อมต่อกับโน้ตบุ๊กผ่าน USB

ซอฟต์แวร์สแตก

  • ระบบไฟล์ ZFS
    • ให้ความสามารถด้านความสมบูรณ์ของข้อมูลและ snapshot
    • จัด JBOD เป็น ZFS pool
  • garage S3
    • โซลูชันสตอเรจแบบกระจายน้ำหนักเบาที่เข้ากันได้กับ S3
    • เป็นโปรเจกต์โอเพนซอร์สที่พัฒนาโดย Deuxfleurs
    • รองรับความเข้ากันได้กับ S3 API

การใช้งานแบบไม่ต้องดูแลตลอด 4 เดือน

  • หลังติดตั้งแล้วไม่ได้สนใจเซิร์ฟเวอร์เลยตลอด 4 เดือน
    • ระหว่างการเดินทาง งาน และชีวิตประจำวันที่ยุ่ง S3 ก็ยังถูกใช้งานอย่างต่อเนื่อง
    • แทบไม่ต้องนึกถึงเซิร์ฟเวอร์เลย
  • สิ่งที่พบหลังล็อกอินกลับเข้าไป
    • มีการใช้พื้นที่จัดเก็บไปแล้ว 10TB
    • ระบบกำลังรอการรีสตาร์ตเพื่ออัปเกรดอย่างอดทน
  • ผลลัพธ์หลังรีสตาร์ต
    • กดรีสตาร์ตด้วยความลุ้น
    • ทุกอย่างกลับมาทำงานได้ตามปกติ ทำให้โล่งใจ

การอัปเกรด garage S3

  • อัปเกรดจาก v1 ไปเป็น v2
    • พบว่ามีการอัปเกรดเวอร์ชันหลักที่รออยู่
    • กระบวนการอัปเกรดดำเนินไปโดยไม่มีปัญหา
    • ประเมินว่าเป็นสุดสัปดาห์ที่ดี

ข้อควรระวังทางเทคนิคและวิธีแก้ไข

  • รับรู้ถึงการตั้งค่า ZFS ที่ไม่เป็นมาตรฐาน
    • การเชื่อมต่อโน้ตบุ๊กกับ JBOD ผ่าน USB เป็นกรณีใช้งาน ZFS ที่ค่อนข้างไม่เป็นมาตรฐาน
    • ได้รับคำเตือนเกี่ยวกับเรื่องนี้จากชุมชน Reddit
  • ปัญหาที่เกิดขึ้นในช่วงแรก
    • เกิดปัญหากับ ZFS เมื่อ garage ทำการอ่านและเขียนข้อมูลจำนวนมาก
    • ในการตั้งค่าเริ่มต้น เมทาดาทา SQLite ก็ถูกเก็บไว้บน JBOD/ZFS ด้วย
  • การแก้ปัญหา
    • ย้ายเมทาดาทาไปไว้บนสตอเรจภายในของโน้ตบุ๊ก
    • หลังจากนั้นปัญหา ZFS ก็หายไปและระบบทำงานได้เสถียร

3 ความคิดเห็น

 
shakespeares 2025-10-07

การกล้าลองทำโฮสต์เองก็ถือว่ายอดเยี่ยมมากแล้ว

 
rtyu1120 2025-10-07

แม้ว่าราคาจะแตกต่างกันมาก แต่ดูเหมือนว่าเมนบอร์ดของ Framework จะกลายเป็น Raspberry Pi ยุคใหม่ไปแล้วนะ

 
GN⁺ 2025-10-07
ความคิดเห็นใน Hacker News
  • ถ้ามีแค่เมนบอร์ดโดยไม่มีหน้าจอ ก็สามารถใส่ในเคสเฉพาะอย่างของ CoolerMaster ได้เช่นกัน ลิงก์เคส Framework ของ CoolerMaster
    • ของพวกนี้เจ๋งมาก แต่สิ่งที่อยากเน้นคือแล็ปท็อปเครื่องนี้เองทำงานได้ดีมาก เงียบแทบไม่มีเสียงพัดลม แทบไม่ค่อยร้อน และตอนโหลดต่ำก็ใช้พลังงานได้ดีมาก ผมคิดว่านี่แหละคือเหตุผลที่แล็ปท็อปเหมาะกับงานแบบนี้มาก
    • มีการแชร์ลิงก์เคสไว้ใน Framework Marketplace ลิงก์เคสใน Framework Marketplace ผมเคยเอาเมนบอร์ดรุ่นเก่าใส่เคสนี้ตอนอัปเกรด แล้วติดไว้หลังจอด้วย VESA mount ใช้เป็นเดสก์ท็อปพีซีด้วย ตอนนี้ใช้เป็น HTPC (โฮมเธียเตอร์พีซี) อยู่ พอใจมาก
    • มินิแร็ก 10 นิ้วก็เป็นอีกทางเลือกที่ดี DeskPi RackMate มินิแร็ก 10 นิ้ว
  • อยากรู้รายละเอียดทางเทคนิคมากกว่า ไม่ใช่ว่าอยากทำตามทุกอย่างเป๊ะ ๆ แต่สงสัยว่าจัด ZFS pool ยังไง แล้ว Garage จัดการทุกอย่างให้เองหรือเปล่า มีการทำ mirror ไหม หรือเป็นโครงสร้างที่แค่มี pool แยกกันแล้วซิงก์ข้ามดิสก์กัน ผมอยากทำ NAS ราคาประหยัดด้วย USB ดิสก์ 2 ลูก เลยกำลังชั่งใจว่าจะทำ ZFS mirror, ทำ 2 pool แยกอิสระแล้วใช้อีกลูกเป็นแบ็กอัป หรือไปทาง SnapRAID เพื่อเอาฮาร์ดดิสก์เก่าหลายแบบมาใช้ให้คุ้มที่สุด
    • ถ้ากำลังเลือกระหว่าง ZFS mirror กับ pool แยกอิสระ การทำ mirror จะได้ทั้งการป้องกัน bit rot และการซ่อมแซมอัตโนมัติ (scrub) แถมความเร็วอ่านก็ดีขึ้นด้วย ถ้ามีฮาร์ดดิสก์ขนาดใกล้กันสองลูก ก็สามารถเพิ่ม mirror ZDEV เข้าไปใน pool เดิมด้วย ZFS หรือจะสร้าง pool ใหม่ไว้เป็นแบ็กอัปก็ได้ แค่ดิสก์สองลูกที่อยู่ใน mirror ต้องมีขนาดใกล้กัน ไม่จำเป็นต้องให้ทุกดิสก์ใน pool มีขนาดเท่ากันหมด
    • Garage ไม่ได้บังคับให้ใช้รูปแบบใดรูปแบบหนึ่ง และทำงานได้สบายแม้ไม่มี ZFS ผมติดตั้ง ZFS แยกต่างหากบน Ubuntu แล้วค่อยติดตั้ง Garage ส่วน ZFS ผมตั้งแบบง่าย ๆ เป็น RAID5/raidz1 ไม่ได้เป็นผู้เชี่ยวชาญ แต่เพราะความจุเริ่มเข้าใกล้ 33% ก็เลยกลับมาคิดเรื่องนี้อีกที แล้วก็นึกถึงคอมเมนต์เหมือนเวทมนตร์ที่เคยเห็นใน HN: “ผมคิดว่าข้อมูลสำคัญบางส่วนยอมเสียได้ไม่กี่ชั่วโมง เลยตั้งเป็น 1-disk pool อิสระ 2 ชุดแทน mirror แล้วถ่าย snapshot จากพูลหลักทุกไม่กี่ชั่วโมง ส่งไปยังพูลแบ็กอัปด้วย zfs send/recv” ดูเหมือน workflow แบบนี้จะเหมาะกับการใช้งานของผมมากกว่า เดิมที RAID5 ก็ทำไว้เผื่อดิสก์เสียหนึ่งลูก แต่ถ้าจะทำชุดเดียวกันไว้อีกสถานที่หนึ่ง ค่าใช้จ่าย (~$1,000 USD) ก็ยังค่อนข้างสูงเลยยังไม่ได้ทำ
  • เพิ่งรู้จัก Garage ครั้งแรกจากรอบนี้และรู้สึกว่าน่าสนใจมาก ผมใช้ S3 บ่อยในงาน และสำหรับแบ็กอัปโฮมแล็บส่วนตัวก็ใช้ borg กับ borgbase มาตลอด เลยสงสัยว่าถ้าใช้ garage จะสามารถผูก local node กับ AWS glacier เพื่อเก็บซ้ำไลบรารีสื่อขนาดใหญ่แบบประหยัดได้ไหม และอยากรู้ด้วยว่าทราฟฟิกการอ่านทั้งหมดจะวิ่งจาก local node หรือเปล่า ใน TFA แทบไม่มีการเล่าประสบการณ์ใช้งาน Garage จริง ๆ เลยอยากฟังความเห็นจากคนที่ใช้เพื่อ self-hosting จริง ๆ แก้ไข: ตอนนี้รู้แล้วว่าใช้กับ glacier ไม่ได้ เพราะต้องเมานต์เป็นไฟล์ซิสเต็มบน EC2 instance ที่รัน Garage binary อยู่ แบบนี้ตั้งเวลาแบ็กอัปขึ้น glacier ด้วย borg/restic ตรง ๆ น่าจะดีกว่า
    • อีกทางเลือกหนึ่งคือ ZeroFS ซึ่งสามารถเก็บข้อมูลลง S3 ได้โดยตรง ZeroFS GitHub
    • สามารถเชื่อมกับ AWS S3 แล้วตั้ง lifecycle policy แบบเชิงรุกให้ย้ายข้อมูลไป glacier อัตโนมัติหลังช่วงเวลาสั้น ๆ ได้ ที่ทำงานเก่าผมเคยตั้งแบบนี้ โดยย้ายจาก standard ไป glacier หลังผ่านไปไม่กี่วัน ถ้าเป็นกรณีของคุณก็ตั้ง X = 1 วันได้เลย
    • แทบไม่ต้องยุ่งกับ Garage โดยตรงเลย ใช้เครื่องมือที่รองรับ S3 API อย่าง awscli, s3cmd, rclone, Boto3 ก็พอแล้ว Garage ตั้งค่าง่ายมากด้วยคำสั่งไม่กี่คำสั่ง พอรันแล้วก็ปล่อยไว้ได้ 4 เดือนโดยทำงานต่อเนื่องเองสบาย ๆ ในแง่นี้ผมพอใจมาก
  • แค่อยากมาแชร์ตัวอย่าง self-hosting ที่เงียบและประสบความสำเร็จ
    • อยากรู้ว่า JBOD นี้เป็น SSD ทั้งหมดหรือเปล่า ถ้าเป็น HDD จำนวนเท่านั้นก็น่าจะเสียงดังพอสมควร
    • เมื่อก่อนผมรู้สึกแปลกดีที่การ “เป็นเจ้าของคอมพิวเตอร์แล้วเอามารันอะไรสักอย่างเอง” ต้องถูกเรียกว่า ‘self-hosting’ มันเหมือนเราอยู่ในยุคที่คอมพิวเตอร์ทั้งหมดกลายเป็นของคนอื่นไปแล้ว จนต้องพูดเป็นพิเศษว่าของนี้เราใช้งานเอง
  • ผมคิดว่าถ้าเอา Dell T30 เก่ามาใส่ Seagate Exos 10TB สองลูกแล้วทำ ZFS RAID1 (mirror) จะรู้สึกปลอดภัยกว่านี้ วิธีที่เสนอมาแม้จะมีแบ็กอัปทุกวันก็ยังรู้สึกกังวลทุกครั้ง Dell T30 เองก็ไม่ได้สบายใจสมบูรณ์แบบ แต่ก็ยังถอดดิสก์ไปต่อกับอุปกรณ์อื่นได้ง่ายกว่า และกังวลเรื่องสายหลุดน้อยกว่าอยู่ดี ถึงอย่างนั้น Garage ก็ดูน่าสนใจมาก ขอบคุณ
    • ผมก็ใช้ ZFS มานานพอสมควร และได้ข้อสรุปว่าข้อมูลจำนวนมากยอมเสียหายไปไม่กี่ชั่วโมงได้ เลยทำเป็น 1-disk pool อิสระสองชุดแทน mirror โดยให้พูลหลักทำ snapshot อัตโนมัติทุกไม่กี่ชั่วโมง ⇒ ทำสำเนาไปยังพูลแบ็กอัปด้วย zfs send/recv ข้อดีคือยืดหยุ่นในการผสมดิสก์ได้มากขึ้น (เช่น ลูกหนึ่งเป็น SSD อีกลูกเป็น HDD) แต่ก็ต้องยอมแลกเรื่องความเร็วอ่านและ uptime และยังสามารถใช้ external hard drive เป็นดิสก์แบ็กอัปแล้วค่อยเอามาต่อทุกสองสามวันก็ได้ ส่วนข้อมูลสำคัญจริง ๆ ผมก็แยกไว้ใน RAID pool แบบ mirrored อีกชุดหนึ่ง บทความเกี่ยวกับ ZFS ส่วนใหญ่มักเน้นเรื่อง RAID แต่ดูเหมือนข้อมูลเกี่ยวกับการตั้งแบบฮาร์ดแวร์น้อยที่สุดอย่างที่พูดมาข้างต้นจะยังมีไม่มาก
  • ยังไม่แน่ใจว่า Framework เพิ่มอะไรเป็นพิเศษในกรณีนี้ไหม ผมโฮสต์อะไรคล้าย ๆ กันบน RPi5 ที่ต่อดิสก์ไม่กี่ลูกอยู่ ใช้ lvm2 แทน ZFS และมันทำงานได้ดีบน RPi5 ส่วน ZFS ใช้ RAM มากเกินไปเลยไม่ค่อยเหมาะกับงานนี้
  • ชอบ Garage มาก มันทำงานของมันเองได้ดีมาก ผมรัน Garage บน Odroid HC2 เก่า ๆ หลายเครื่องเพื่อใช้เป็นแบ็กอัป Velero ของ k8s และพอตั้งค่าเสร็จก็แทบไม่ต้องแตะอะไรอีก ปล่อยทิ้งไว้ก็ยังดูแลตัวเองได้
  • ดีใจที่มีคนพูดถึง Garage ผมเองก็ตัดสินใจอยู่พักหนึ่งระหว่าง Garage กับ SeaweedFS ในฐานะทางเลือก self-hosting ที่รองรับ S3 และจากประสบการณ์ของผม SeaweedFS ต้องตั้งค่าด้วยมือน้อยกว่า Garage เลยใช้งานสะดวกกว่า
  • ผลลัพธ์เจ๋งมาก ผมก็กำลังพยายามเปลี่ยนเมนบอร์ดของ Framework แล้วเอาไปใช้เป็นเครื่องสำรองข้อมูล NAS โดยเฉพาะ อยากฟังรายละเอียดการตั้งค่า zfs เพิ่มอีกหน่อย เพราะอยากใช้เป็นพื้นที่สำหรับ snapshot อย่างเดียว แต่ก็กังวลทั้งเรื่องความเร็วของการเชื่อมต่อ USB และความเสี่ยงที่ถ้าถอดออกโดยไม่ตั้งใจแล้วข้อมูลจะหาย
  • มีการสนทนาเก่าเกี่ยวกับ Garage อยู่ด้วย การสนทนาก่อนหน้าบน Hacker News