ข้อควรพิจารณาสำหรับ Raspberry Pi ที่ต้องทำงานระยะยาว
(dzombak.com)- หากต้องการให้ Raspberry Pi ทำงานแบบ ไม่มีการแทรกแซง ตั้งแต่หลายสัปดาห์ไปจนถึงหลายปี ควรออกแบบเส้นทางการกู้คืนอัตโนมัติไว้ล่วงหน้าเมื่อเกิดความขัดข้อง
- คู่มือนี้เป็นซีรีส์ด้านความน่าเชื่อถือที่กว้างขึ้น ซึ่งมาแทนบทความเดิมเรื่อง การลดการสึกหรอของ SD card โดยรวบรวมแนวทางรับมือตามประเภทปัญหาและเคล็ดลับการมอนิเตอร์ไว้ด้วยกัน
- ความเสี่ยงหลักแบ่งเป็น การเชื่อมต่อ WiFi ล้มเหลว, บริการหยุดทำงาน, การแครชจากความไม่เสถียรของฮาร์ดแวร์·เฟิร์มแวร์·ไดรเวอร์, และ SD card สึกหรอหรือพื้นที่เต็ม
- ปัญหา SD card สามารถบรรเทาได้ด้วยการเลือก microSD ที่เหมาะสม, ไม่ใช้ swap, ลดการเขียน, ใช้ root filesystem แบบอ่านอย่างเดียว, และรัน fsck เมื่อจำเป็น
- แม้ การปิดใช้งาน journaling จะช่วยลดการสึกหรอได้ แต่จะเพิ่มความเสี่ยงที่ filesystem เสียหายเมื่อเกิดแครชหรือไฟดับ จึงไม่สอดคล้องกับเป้าหมายความเสถียรระยะยาว
จุดล้มเหลวที่ควรดูก่อนในการใช้งานระยะยาว
- หากต้องการให้ Raspberry Pi ออนไลน์อยู่ได้เป็นเวลานาน ต้องพิจารณาว่า Pi จะกู้คืนอย่างไรในแต่ละสถานการณ์ขัดข้อง และควรเปรียบเทียบทั้งประโยชน์และความเสี่ยงของแนวทางแก้ไขด้วย
- ผู้เขียนใช้ Raspberry Pi ภายในบ้านเป็น เครื่องส่ง FM กำลังต่ำ และตัวมอนิเตอร์พลังงานของ UPS เป็นต้น
- ซีรีส์ Raspberry Pi Reliability รวบรวมประเภทปัญหาที่พบด้วยตนเองและวิธีแก้ไข โดยรวมถึงเคล็ดลับการมอนิเตอร์ที่ใช้ Uptime Kuma เป็นหลัก
- ซีรีส์นี้มีเป้าหมายเป็นคู่มือที่ครอบคลุมกว่า บทความการลดการสึกหรอของ SD card เดิม และบทความที่ลิงก์ไว้ทำหน้าที่เป็นเนื้อหาทดแทนที่อัปเดตแล้ว
แนวทางรับมือแยกตามประเภทปัญหาและทางเลือกที่ควรหลีกเลี่ยง
- การเชื่อมต่อ WiFi ล้มเหลว เป็นประเภทความขัดข้องที่ควรพิจารณาก่อนในการใช้งานระยะยาว
- บริการซอฟต์แวร์หยุดทำงาน เป็นส่วนที่ต้องมีกลยุทธ์การกู้คืนแยกต่างหาก
- ความไม่เสถียรของฮาร์ดแวร์·เฟิร์มแวร์·ไดรเวอร์ อาจนำไปสู่การแครชได้
- SD card อาจ สึกหรอ หรือเต็มจนหมด ซึ่งส่งผลต่อรูปแบบการใช้งาน
- เริ่มจาก การเลือก microSD card ที่เหมาะสม
- ไม่ใช้ SD card เป็น swap
- สามารถพิจารณา การลดการเขียนลง SD card โดยเฉพาะการลดการเขียน log และ การทำให้ root filesystem เป็นแบบอ่านอย่างเดียว
- หากไม่ได้ใช้ root filesystem แบบอ่านอย่างเดียว ควร ตรวจสอบ filesystem บ่อย ๆ
- การปิดใช้งานบริการที่ไม่จำเป็น ช่วยได้ทั้งด้านความเสถียรของซอฟต์แวร์และการบรรเทาการสึกหรอของ SD card
- ก่อนใช้การแทรกแซงที่กระทบระบบมาก ควรเปรียบเทียบ ความเสี่ยงและประโยชน์ ก่อน
- เมื่อเกิดความขัดข้องจริง remote logging มีประโยชน์ต่อการหาสาเหตุ
- บทความหนึ่งใน Stack Exchange เสนอให้ ปิดใช้งาน journaling ของ filesystem บน Pi แต่ควรหลีกเลี่ยง เพราะจะเพิ่มโอกาสที่ filesystem เสียหายเมื่อเกิดแครชหรือไฟดับ
1 ความคิดเห็น
ความคิดเห็นบน Hacker News
ผมหันไปซื้อ Lenovo mini PC แทน ขนาด 18 ซม. x 18 ซม. x 3 ซม. ก็ยังเล็กมากอยู่ดี
เดี๋ยวนี้หาซื้อได้ถูกมาก และมีเคสกับระบบระบายความร้อนที่เหมาะสมด้วย: https://psref.lenovo.com/syspool/Sys/PDF/ThinkCentre/ThinkCe...
ผมวางเครื่องหนึ่งไว้ข้างตัว ใช้ i5-8500T, RAM 32GB, SSD 2 ตัว และเมื่อเปิด auto tuning ของ
powertopตอน idle ตอนนี้กินไฟ 5W: https://wiki.archlinux.org/title/powertopจะเพิ่มการเชื่อมต่อแบบ serial ไปยังไมโครคอนโทรลเลอร์ก็ได้ แต่ทำแบบนั้นแล้วโซลูชันจะไม่เรียบร้อยเท่าไร
ช่วงหลังยังย้าย NAS (N5105) กับเครื่องสำหรับรันบริการต่าง ๆ (3215U) ไปใช้ mini PC มือสองกับ Chromebook ที่ปลดล็อกแล้ว ซึ่งหามาจาก eBay หรือตลาดนัดของมือสองด้วย ราคาถูก กินไฟต่ำ แต่สมรรถนะการประมวลผลคนละระดับกับ Pi เลย
ในออสเตรเลียมีของที่หมดสัญญาเช่าหลุดออกมาทีละหลายพันเครื่อง ชิป 8500T หรือ 8700T นั้นยอดเยี่ยม รัน Windows 11 ได้อย่างเป็นทางการ และมี hardware transcoding ในตัว จึงเหมาะเป็น Plex server
เครื่องหนึ่งของผมอัปเกรดเป็น SSD 2TB สองตัวกับ RAM 64GB และรัน 24/7 ได้ไม่มีปัญหา
SD card น่าจะเป็นสาเหตุปัญหาใหญ่ที่สุด และถ้ารวมค่าใช้จ่ายในการต่อของอย่าง SSD เข้ากับ RPi แล้ว มันก็ไม่คุ้มราคาอีกต่อไป
คำแนะนำแรกไม่ควรเป็นการเปิดโหมด journaling ของ filesystem
คำแนะนำแรกควรเป็นการ mount filesystem เป็นแบบ อ่านอย่างเดียว แล้ว mount
/varไว้ในหน่วยความจำ และส่ง log ทั้งหมดไปยัง node ที่มี UPS กับ NUT ที่เหมาะสม ไม่ใช่เก็บไว้บน RPi ถ้า filesystem เป็นแบบอ่านอย่างเดียวหรือเป็นพื้นที่ชั่วคราว ไฟดับก็แทบไม่สร้างความเสียหายถ้ามี RPi แค่เครื่องเดียวอาจดูเกินจำเป็น แต่ผู้เขียนบอกว่าใช้หลายเครื่องทั่วบ้าน
นอกจากนี้ การมี system partition แบบ A/B แล้วอัปเกรดด้วยการเขียนทั้ง partition ใหม่ก่อนสลับ partition ที่ active ก็เป็นแนวทางที่ดีเช่นกัน แบบนั้นต่อให้เวอร์ชันใหม่มีบั๊กร้ายแรง ก็ยังมี system partition ที่ใช้งานได้เหลืออยู่เสมอ และกู้คืนได้ง่าย
ผมใช้วิธีแบบนี้กับ PC ขนาดเล็ก/บอร์ดเดี่ยวหลายเครื่องในหลายบทบาทมาเกิน 20 ปีแล้ว และใช้งานได้ดี
https://www.dzombak.com/blog/2021/11/Reducing-SD-Card-Wear-o...
/varแต่ควรใช้ tmpfs กับที่อย่าง/tmpด้วย แบบนั้นอายุการใช้งานของ SD card จะเพิ่มขึ้นมากสร้าง disk image ใหม่อย่างไร แล้วต้องล็อกอินเข้าไปอัปเกรดทีละเครื่องหรือมีระบบอัตโนมัติหรือไม่
/varไว้ในหน่วยความจำ อาจใช้หน่วยความจำของอุปกรณ์เกินได้อาจต้องย้าย
/var/lib/dockerไปไว้ใน storage เสริมในปี 2011 ผมเคยทำผลิตภัณฑ์เชิงพาณิชย์ที่รันบน plug computer รุ่นแรก ๆ ของ Global Scale Technologies
ขายไปแค่ 20 กว่าเครื่อง แต่ถูกส่งคืนทั้งหมดเพราะปัญหา SD card เสียหาย และต้องรีบเปลี่ยน root filesystem ให้เป็นแบบอ่านอย่างเดียว หลังจากนั้นผมก็ชอบแนวทางนี้มาตลอด
ผลิตภัณฑ์เชิงพาณิชย์ยุคแรกนั้นเป็นผลิตภัณฑ์รักษาความปลอดภัยในบ้านที่มีฟังก์ชัน home automation เล็กน้อย และในปี 2021 ได้เปิดซอร์สภายใต้ชื่อใหม่ ตอนนี้ทำงานบนคอมพิวเตอร์บอร์ดเดี่ยวตระกูล Jetson: https://github.com/hcfman/sbts-install
ตอนนี้มีโมเดล YOLO ระดับสูงเป็น trigger ด้วย เพราะตั้งใจให้เป็นผลิตภัณฑ์แบบ standalone จึงรองรับ HTTPS และมี GUI ที่ครอบงานเกี่ยวกับ certificate ทั้งหมดไว้ ฟีเจอร์นี้ยังคงอยู่ในเวอร์ชันโอเพนซอร์ส ทำให้ใช้ self-signed certificate สำหรับการเรียก REST ระหว่างอุปกรณ์ได้ง่าย
นอกจากนี้ยังรักษาและขยายแนวทาง overlayFS แบบหน่วยความจำหลาย partition และในขั้นตอนติดตั้งจะให้ติดตั้งระบบ
sbts-baseก่อน เพื่อให้คนอื่นนำไปใช้เป็นระบบฐานของตัวเองได้พอเวลาผ่านไป ระบบเริ่มค้าง 1–2 วินาทีทุกครั้งที่มีการเขียนดิสก์ ซึ่งทรมานพอสมควร
สำหรับคนที่คิดจะทำอะไรแบบนี้ ผมอยากแนะนำให้ลองดูก่อนว่า บอร์ดขนาดเล็กอย่าง ESP32 จัดการงานที่ต้องการได้หรือไม่
ใช้พลังงานน้อยกว่ามาก ราคาก็แค่ไม่กี่ดอลลาร์ และเพียงพอสำหรับการใช้งานหลายอย่าง ถ้าชอบฝั่ง Python บอร์ดจำนวนมากรองรับทั้ง MicroPython และ CircuitPython
ลดได้ทั้งค่าใช้จ่ายตอนซื้อครั้งแรกและค่าไฟที่ต้องจ่ายต่อเนื่อง จึงคุ้มค่าที่จะลองพิจารณา
โปรเจกต์ที่ทำด้วยไมโครคอนโทรลเลอร์มีความเสถียรกว่าโปรเจกต์ที่ใช้ Pi ในระดับหลายสิบปี และยังไม่ต้องกังวลมากนักว่าจะลืมเปลี่ยนค่า SSH พื้นฐานจนกลายเป็นส่วนหนึ่งของบอตเน็ต ค่าเริ่มต้นน่าจะเป็น
pi:raspberryใช่ไหมนอกจาก MicroPython แล้ว การรองรับ no_std Rust สำหรับ ESP32C3 ก็ดีขึ้นทุกเดือน สำหรับคนที่ทำโปรเจกต์ home automation เล็ก ๆ สนุก ๆ ข้อจำกัดที่เพิ่มขึ้นอาจทำให้สนุกและคุ้มค่ามากขึ้นด้วยซ้ำ
อย่างไรก็ตาม สำหรับคนที่คุ้นกับ Linux อยู่แล้ว Pi มักง่ายกว่ามาก และจากประสบการณ์ของผม ค่าใช้จ่ายแพงกว่าอย่างน้อยราว 10 เท่า ควรเอาการตั้งค่าเพิ่มเติมเพื่อให้ได้ความเสถียรระดับเดียวกัน เช่น การบูตจาก SSD, การบูตผ่านเครือข่าย, root filesystem แบบอ่านอย่างเดียว, การตั้งค่า watchdog รวมถึงการใช้พลังงานที่สูงกว่า โดยเฉพาะไฟของ Pi 5 มารวมในการตัดสินใจด้วย
บน ESP32 รันเซิร์ฟเวอร์ password manager ได้ไหม? ไม่ได้ Pi-hole ล่ะ? ไม่ได้ Unifi controller? ไม่ได้
คำแนะนำแบบนี้เหมือนจินตนาการว่าคนเอา Pi ไปใช้กับอะไรอย่างตัวควบคุมประตูโรงรถ แต่การเสนอ ESP32 เป็นตัวแทน Pi แบบอัตโนมัติไม่ได้ช่วยอะไรมากนัก
เวลาอะไรบางอย่างไม่ทำงาน คุณไม่สามารถเสียบ HDMI กับคีย์บอร์ด แล้วดีบักสด ๆ ในสภาพแวดล้อม Linux mainline ที่มี utility ทั่วไปครบถ้วนได้
เพิ่งลองใช้ MicroPython แทน Arduino เป็นครั้งแรกแล้วชอบมาก และน่าประหลาดใจที่มันเสถียรมาก เมื่อก่อนโปรเจกต์มักพังในระยะยาวเพราะสถานะพลังงานของ Wi‑Fi แต่จนถึงตอนนี้ในโครงสร้างแบบ MicroPython ยังไม่มีปัญหา
ประโยคที่ว่า “สุดท้ายส่วนใหญ่ก็มักกลายเป็นสคริปต์ที่คอยตรวจเป็นระยะว่า Wi‑Fi ยังเชื่อมต่อดีอยู่ไหม ถ้าไม่ดีก็รีสตาร์ตอินเทอร์เฟซ Wi‑Fi หรือทั้ง Pi” นั้นไม่ใช่การแฮ็ก แต่เป็น แนวปฏิบัติที่ดี
เช่นเดียวกับที่เซิร์ฟเวอร์สำคัญในดาต้าเซ็นเตอร์ควรมีช่องทาง out-of-band อย่าง IPMI หรือปลั๊ก RPDU ที่ควบคุมระยะไกลได้ เซิร์ฟเวอร์สำคัญในจุดห่างไกลที่เข้าถึงยากก็ควรมีสคริปต์ watchdog
แน่นอนว่าต้องปรับให้เหมาะกับการใช้งาน โดยคำนึงถึงผลกระทบของการรีบูตและช่วง downtime ก่อนรีบูต และอย่างน้อยก็ควรบันทึกเหตุการณ์ผิดปกติไว้เพื่อให้ตรวจสอบภายหลังได้
ตอนที่ผม deploy RPi ระยะไกล สิ่งแรกที่ทำคือสคริปต์ watchdog แบบ Bash ง่าย ๆ ไม่ใช่แค่สำหรับปัญหา Wi‑Fi แต่สำหรับสถานการณ์อีกเป็นสิบ ๆ แบบที่อาจพังและแก้ได้ด้วยการรีบูต
ถ้าเราเชื่อใจ init ให้จัดการ service ไม่ได้ ก็สงสัยเหมือนกันว่าความมั่นใจว่าระบบจะให้บริการได้มาจากไหน
จะสร้างใหม่ด้วยสคริปต์ก็ได้ แต่เราผ่านจุดนั้นมาแล้ว ผมพูดถึง systemd เยอะ แต่ไม่ได้จะลำเอียงเข้าข้างมัน และยังมีทางเลือกอื่นด้วย
service ส่วนใหญ่ไม่ได้ใช้ประโยชน์จากสภาพแวดล้อมที่มันอยู่ให้ถูกต้อง ดูเหมือนจะคาดหวังการปรับแต่งเฉพาะไซต์ เช่น ประกาศว่าเว็บเซิร์ฟเวอร์ต้องการ mount บางตัว
directive ที่มักถูกมองข้ามคือ
PartOf=ซึ่งสามารถผูกการรีสตาร์ตของ service หรือ resource หนึ่งเข้ากับอีกอย่างได้ถ้าให้ง่ายกว่านั้น NetworkManager ก็น่าจะมีวิธีให้ปรับแต่งการตรวจ Wi‑Fi/portal ได้ อาจไม่จำเป็นต้องไปสุดโต่งขนาดนั้น
สำหรับเราเตอร์ มันจะพยายามเชื่อมต่อกับ SSID ที่เหมาะสมแล้ว ping ไปที่เราเตอร์ ถ้าอย่างใดอย่างหนึ่งล้มเหลว ก็สลับไปใช้อีกเราเตอร์หนึ่ง ผมมีเราเตอร์รุ่นเดียวกันสองตัวที่ตั้งค่าเหมือนกัน และต่อไฟเข้ากับหน้าสัมผัส NO/NC ของรีเลย์ SPDT ถ้าตัวหนึ่งล้มเหลว ก็แค่เปลี่ยนสถานะรีเลย์เพื่อสลับไปอีกฝั่ง
ถ้าเราเตอร์ยังมีชีวิตอยู่ watchdog จะโหลดหน้าสถานะของเคเบิลโมเด็ม และ ping ไปยัง IP ใดก็ได้จากสาม IP ในเครือข่าย ISP ที่ดูเหมือนเป็น CMTS หรืออุปกรณ์ใกล้เคียง เพื่อยืนยันว่าโครงข่าย HFC ยังทำงานอยู่ เพราะถ้าเป็นความขัดข้องที่แก้ด้วยการรีบูตไม่ได้ ก็ไม่อยากรีบูตโดยเปล่าประโยชน์
น่าเสียดายที่ผมหาวิธีมีเคเบิลโมเด็มสองตัวที่ใช้ MAC เดียวกันแล้วสลับกันไม่ได้ และ ISP ก็ไม่อนุญาตให้มีโมเด็มสองตัวในบัญชีเดียวกัน ดังนั้นถ้าเคเบิลโมเด็มล้มเหลว ก็ทำได้แค่รีบูตแล้วหวังว่าจะกลับมาดี
ผมยังต่อ rack แบตเตอรี่ที่ทำให้เราเตอร์และโมเด็มทำงานต่อได้เกิน 30 ชั่วโมงแม้ไฟดับ และตั้งแต่ทำขึ้นในเดือนพฤษภาคม 2020 มันก็ออนไลน์แทบตลอด โค้ดแย่มาก แต่ในการใช้งานจริงมันทำงานได้แข็งแรงมาก
มีสิ่งที่เกิดขึ้นได้แม้โค้ดและการออกแบบจะสมบูรณ์แบบ เช่น บิตพลิกจากเหตุการณ์ในอวกาศ หรือแรงดันตกชั่วขณะ และ watchdog timer จะตัด infinite loop แล้วรีเซ็ตให้ ใน Raspberry Pi ยังต้องกังวลเรื่อง SD card เสียหายด้วย
เท่าที่รู้ Raspberry Pi มี hardware watchdog timer ในตัว ส่วน Arduino มีแน่นอน
ตลอดเกือบ 10 ปีที่ผ่านมา ได้ใช้งาน Pi หลายพันเครื่อง ในสภาพแวดล้อมจริง และตอนนี้เริ่มย้ายไป x86 แล้ว
ความคุ้มค่าด้านราคาต่อประสิทธิภาพของ Pi ไม่เหมือนเดิมแล้ว เมื่อไม่นานมานี้ได้พูดถึงประสบการณ์นี้ที่ State of Open Con: https://youtu.be/vX-qK9mxKZI
บริการของเรายังไม่ได้ใช้ แต่ตามเอกสารแล้วดูค่อนข้างแข็งแรง และสามารถปกป้องข้อมูลบนดิสก์/SD ได้
เรายังค่อนข้างพอใจกับ Pi และการย้ายไปใช้ API ที่เปิดกว่ามากอย่าง Mesa/DRM/KMS/FFmpeg ซึ่งเพิ่งเริ่มอยู่ในสภาพที่ใช้งานได้จริง ก็ดูมีอนาคตมาก
เนื่องจากกรณีใช้งานหลักยังเป็นดิจิทัลไซเนจ พลังประมวลผลดิบจึงไม่ได้สำคัญมากนัก ส่วนที่มีต้นทุนสูงอย่างการถอดรหัสวิดีโอก็แน่นอนว่ามีการเร่งความเร็วด้วยฮาร์ดแวร์ และความเข้ากันได้ย้อนหลังที่ Pi ทำได้นั้นยอดเยี่ยม ยังมีลูกค้าที่ใช้ Pi1B+ ต่อเนื่องมาเกือบ 10 ปี และยังรัน OS รุ่นล่าสุดที่เราให้บริการอยู่
ต้องดูเรื่องอายุการใช้งานด้วย ซึ่งตรงนั้น ARM ก็น่าจะอยู่ได้นานกว่า x86 เช่นกัน ในแง่โมดูลาร์ ARM ก็ดีกว่า x86 เพราะการวางอุปกรณ์เล็ก ๆ หลายตัวมีต้นทุนถูกกว่า
แต่ด้านความสามารถในการขยาย หรือความคุ้มค่าทางธุรกิจในเศรษฐกิจปัจจุบัน x86 ดีกว่า ARM
อีกอย่าง กราฟทั้งหมดควรเทียบตามวัตต์ การบอกว่าจากรุ่น 2 ไป 4 แล้วประสิทธิภาพดีขึ้นไม่ใช่ข่าวใหม่ สิ่งสำคัญคือประสิทธิภาพต่อวัตต์ดีขึ้นหรือไม่
ถ้าดูแบบนั้นจะเห็นว่า Raspberry Pi 5 ไม่ได้มีประสิทธิภาพต่อวัตต์ดีขึ้นมากเท่าที่คาด ดูเหมือนเราจะมาถึงจุดสูงสุดถาวรในประวัติศาสตร์มนุษย์แล้ว
สุดท้าย ณ ตอนนี้ ความหวังเดียวของความก้าวหน้าใด ๆ ไม่ใช่ด้านประสิทธิภาพ แต่เป็นด้านความเปิดกว้าง คือ JH7110 ทว่า การรองรับ 3D ยังตามหลังอยู่
แม้ไม่ได้ทำอะไรพวกนั้นเลย Pi บางตัวก็ทำงานได้หลายปีโดยไม่มีปัญหาจนกระทั่งถูกแทนที่ด้วยรุ่นใหม่
เกตเวย์ HomeKit/Zigbee และ data logger ตอนนี้เป็น Pi 4 สุดท้ายแล้วดูเหมือนหัวใจสำคัญคือ SD card ที่ดีและแหล่งจ่ายไฟที่เสถียร
คิดว่า pibenchmark เป็นแหล่งข้อมูลที่ดี: https://pibenchmarks.com/
ก่อนซื้อควรเปรียบเทียบ SD card ให้ดี
ถ้าดูแลอุปกรณ์จำนวนมากพอ อะไรที่อาจผิดพลาดได้ก็จะผิดพลาดทั้งหมด และยังจะมีรูปแบบความเสียหายใหม่ ๆ ที่ไม่เคยนึกฝันมาก่อนโผล่มาด้วย
เหตุผลที่หลังจากนั้นมีรายงานการ์ดเสียหายจำนวนมากอาจเป็นเพราะเรื่องนี้
นอกจากติดตั้ง Raspbian ลงใน micro SD card, ตั้งค่า Cups และต่อ USB เข้ากับพรินเตอร์แล้ว ก็ไม่ได้ทำอะไรอีก อีกตัวหนึ่งดูแลพรินเตอร์เครือข่าย หลังจากนั้นก็ปล่อยไว้อย่างนั้น
ตอนนี้ส่วนใหญ่เปลี่ยนไปใช้ SSD แล้ว ไม่อย่างนั้นมันเหมือนเสี่ยงดวงเกินไป
แปลกใจที่เรื่อง SD card ไม่ได้เป็นข้อแรก และยิ่งแปลกใจกว่าที่บทความไม่ได้แนะนำ การบูตผ่าน USB
ผมเปิด Pi ตัวหนึ่งแทบจะ 24/7 มาหลายปีแล้ว และคิดว่าสาเหตุที่ไม่มีปัญหาคือ 1) ตั้งค่า Alpine ให้แทบไม่แตะดิสก์เลย 2) ไม่มี SD card ให้เสียหาย ส่วนทำไม USB ถึงเสถียรกว่านั้นไม่รู้ แต่จากประสบการณ์ก็เป็นแบบนั้น
เหตุผลเดียวที่มันล้มเหลวคือไฟดับ ถ้ามีแบตเตอรี่ที่อยู่ได้สัก 10 นาที ก็น่าจะเพียงพออย่างสมบูรณ์
เช่น หมายถึงแบบ https://wiki.alpinelinux.org/wiki/Installation#Diskless_Mode หรือเปล่า
เลยถอดการ์ดออก แล้วเปลี่ยนทั้งการ์ดนั้นกับ Pi ตัวถัดไปไปใช้ USB SSD แทน ค่อนข้างน่ากลัว แต่ก็อย่างที่บอกไป Pi ที่ใช้ micro SD เป็นเซิร์ฟเวอร์ Cups มาหลายปีก็ไม่มีปัญหา
RPi สองตัวของผมบูตและรันจาก USB ทั้งคู่ และทำงานได้ดีมาหลายปีแล้ว
ตั้งแต่ปี 2017 ผมรัน Pi สองเครื่องด้วย SD card ใบเดิมแทบจะตลอดเวลา มีไฟดับประมาณ 2–3 ครั้ง
เครื่องหนึ่งเป็น DNS/print server อีกเครื่องเป็น Kodi โดยสื่ออยู่บน NFS ภายนอก สิ่งเดียวที่ผมทำคือปิด log ทั้งหมด และไม่เคยมีปัญหาเลย
ทั้งคู่ใช้ การ์ด SanDisk 2GB อยู่ ผมจำได้ลาง ๆ ว่าตอนนั้นคิดแบบซื่อ ๆ ว่า “พื้นที่น้อย → ความหนาแน่นของบิตต่ำ → ความน่าเชื่อถือดี”
log2ram(github/azlux/log2ram) มาตลอด และพอใจกับผลลัพธ์มัน mount RAM disk ไว้ที่
/varแล้วค่อย ๆ คัดลอก log จาก RAM disk ไปยัง SD card เป็นครั้งคราว ทำให้ยังดู log ทั้งหมดได้โดยไม่ต้องเขียนกระหน่ำใส่ SD cardส่วนใหญ่เปิดอยู่ตลอด แต่บางครั้งเผลอปิดแหล่งจ่ายไฟ USB ที่ต่ออยู่ เป็นแหล่งจ่ายไฟเล็ก ๆ แบบ 5 พอร์ต ซึ่งก็อายุไล่เลี่ยกัน และในชุดของผมปุ่มเปิด/ปิดกดโดนได้ง่ายเกินไป
โดยพื้นฐานแล้ว mount log ทั้งหมดและเว็บเพจไว้บน tmpfs ส่วน DB อยู่บน SD card และถูกเขียนทุก 5 นาที
ผ่านการติดตั้งมาหลายแบบ แต่ตอนนี้เป็น DNS server สำรอง ดูจาก filesystem แล้วใช้เป็น Pi-hole มาตั้งแต่ปี 2018 และนอกจากการ reboot ไม่กี่ครั้งกับตอนย้ายบ้าน ก็เรียกได้ว่ารัน 24/7 จริง ๆ
ไม่เขียนอะไรลง SD เลย ส่งทุกอย่างไปไว้ใน RAM ที่
/dev/shmถ้า Pi-hole ล่มนาน ๆ ครั้ง ก็แค่ให้มันดึงรายการใหม่ และอย่างไรก็ดาวน์โหลดทุกวันอยู่แล้วภายหลังเริ่มใช้เป็น DNS ภายในและ node ของ Tailscale ด้วย เคยไม่ reboot อยู่หลายเดือน และ uptime สูงสุดประมาณ 11 เดือน ทนทานมาก การต่อเข้ากับ UPS ช่วยได้อย่างชัดเจน
มีคนบอกว่า “การทำให้ Raspberry Pi ออนไลน์อยู่ได้โดยไม่ต้องแตะเป็นเวลาหลายสัปดาห์ หลายเดือน หรือหลายปีนั้นเป็นศิลปะอย่างหนึ่ง” แต่ผม boot เคอร์เนล NetBSD ที่มี filesystem ฝังอยู่ในตัว
เช่น ใช้เคอร์เนล INSTALL หรือเคอร์เนลที่ปรับแต่งเอง หลัง boot แล้วจะถอด SD card ออกก็ได้ และเลือก
chrootไปยัง storage ที่ต่ออยู่ได้ทำแบบนี้แล้วมันรันได้เป็นสัปดาห์ เป็นเดือน เป็นปี ไม่เคยเจอปัญหาที่ผู้เขียนบล็อกยกมา
ปัญหาเดียวที่ผมพบคือฝั่งขั้วต่อไฟเมื่อใช้เคส เช่น ถ้าใช้สายทดแทน การเชื่อมต่ออาจหลวมได้ ใน Pi รุ่นใหม่ ๆ อาจดีขึ้นแล้วก็ได้
แต่ก็คงพูดได้ว่าคอมพิวเตอร์ส่วนใหญ่ก็คล้ายกัน สายและขั้วต่อมักเป็นชิ้นส่วนที่อ่อนแอและราคาถูก ถ้าไฟหลุดเพราะการขยับ Pi ก็จะ reboot เอง