VPN ไคลเอนต์ segfault บน Pi? เก็บข้อมูลโพรเซสก่อน
เชลล์พิมพ์ segmentation fault แล้วการ์ดก็ถูกเขียนใหม่ บันทึกไฟล์ปฏิบัติการ เวอร์ชัน และบันทึกการแครชก่อนเปลี่ยนฮาร์ดแวร์ใด ๆ
คุณเริ่มไคลเอนต์ เทอร์มินัลพิมพ์ Segmentation fault (core dumped) และชั่วโมงถัดมาหมดไปกับการเขียนการ์ดใหม่ ข้อความนั้นอธิบายว่าโพรเซสหนึ่งตายในเสี้ยวขณะหนึ่งอย่างไร มันไม่ได้บอกว่าแผงวงจรเสีย และไม่ได้ปลดเปลื้องแหล่งจ่ายไฟ ที่เก็บข้อมูล หรืออิมเมจ
เริ่มจากบรรทัดที่เชลล์พิมพ์ย้อนไปยังโพรเซสที่อยู่ข้างหลัง ข้อเท็จจริงที่มีประโยชน์คือไฟล์ปฏิบัติการใดล้มเหลว ในสภาพแวดล้อมใด และในขั้นตอนใดของการเชื่อมต่อ
เริ่มจากบรรทัดที่เชลล์พิมพ์
ชื่อในคำสั่งของคุณมักเป็นตัวห่อหรือตัวเรียกที่เริ่มไบนารีอื่น ดังนั้นยืนยันว่าเคอร์เนลสิ้นสุดไฟล์ปฏิบัติการใดจริง ๆ บันทึกพาธเต็ม เวอร์ชันแพ็กเกจและแอปพลิเคชัน สถาปัตยกรรม เวอร์ชันระบบปฏิบัติการและเคอร์เนล บัญชีที่เริ่มมัน และเวลาที่แน่นอน คำสั่งเชลล์ที่ตั้งชื่อตาม VPN สามารถเริ่มโพรเซสช่วยได้ง่าย และบันทึกจะระบุชื่อผู้ช่วยนั้น การคัดลอกสตริงเวอร์ชันจากแพ็กเกจที่ติดตั้งเมื่อเดือนที่แล้วไม่บอกอะไรเกี่ยวกับสิ่งที่รันอยู่
บันทึกสิ่งที่เกิดขึ้นทันทีก่อนการแครช: การเริ่มต้น การแยกวิเคราะห์โปรไฟล์ การยืนยันตัวตน หรือเซสชันที่ส่งทราฟฟิกอยู่แล้ว สี่ขั้นตอนนั้นจำกัดการค้นหาได้มากกว่าคำว่า segfault มาก เก็บหน้าต่างบันทึกสั้น ๆ รอบเหตุการณ์นั้น และพักการคาดเดาว่าการเปลี่ยนแปลงล่าสุดใดทำให้เกิดจนกว่าบันทึกจะบอก
หาว่ามีอิมเมจหน่วยความจำหรือไม่
เอกสารอ้างอิงไฟล์ core อธิบายดัมป์ว่าเป็นอิมเมจหน่วยความจำของโพรเซสที่เขียนตอนสิ้นสุด และยังระบุเงื่อนไขที่หยุดการเขียนนั้นด้วย เงื่อนไขเหล่านั้นรวมถึงขีดจำกัดทรัพยากรเป็นศูนย์และแพตเทิร์น core ที่ส่งดัมป์ไปที่อื่นนอกไดเรกทอรีทำงาน การไม่มีไฟล์ชื่อ core จึงไม่ได้พิสูจน์อะไรเกี่ยวกับการเกิดแครช ตรวจสอบแพตเทิร์นและขีดจำกัดที่ตั้งไว้ก่อนสรุปว่าระบบไม่ได้สร้างหลักฐาน
บนระบบที่ใช้ตัวเก็บของ systemd มุมมองที่รองรับจะเชื่อมโยงบันทึกที่เก็บไว้กับไฟล์ปฏิบัติการและเวลา รายการเจอร์นัลและอิมเมจหน่วยความจำที่อ่านได้เป็นสิ่งสองอย่างที่ต่างกัน นโยบายการเก็บรักษาและสิทธิ์อาจทำให้คุณเหลืออย่างหนึ่งโดยไม่มีอีกอย่าง ถามดิสทริบิวชันหรือผู้ดูแลแอปพลิเคชันเกี่ยวกับขั้นตอนวินิจฉัยที่พวกเขารองรับ เพราะ trace ที่สร้างจากบิลด์อื่นหรือชุดไลบรารีอื่นมักทำให้เสียเวลาของพวกเขา
sysctl kernel.core_pattern
ulimit -c
coredumpctl list --since "1 hour ago" --no-pager
coredumpctl info /usr/sbin/openvpn
ทำการอ่านเหล่านั้นซ้ำบนเครื่องที่แครชจริง การทำบนการติดตั้งใหม่เป็นการตอบคำถามที่ไม่มีใครถาม
ปฏิบัติต่อดัมป์เป็นวัสดุที่เก็บความลับ
หน่วยความจำของโพรเซสอาจมีข้อมูลรับรอง คีย์เซสชัน และเนื้อหาโปรไฟล์ ซึ่งทำให้ดัมป์อ่อนไหวกว่าบันทึกข้อความข้าง ๆ การปิดบังบันทึกไม่ได้ช่วยอะไรกับอิมเมจหน่วยความจำทึบแสง และตัวติดตามปัญหาทั่วไปเก็บไฟล์แนบไว้นานกว่าที่กระทู้สนับสนุนจะอยู่มาก ย้ายไฟล์ผ่านช่องทางส่วนตัวที่ผู้ขายหรือผู้ดูแลจัดให้ การโพสต์ดัมป์ดิบในปัญหาสาธารณะจะเปิดเผยทุกสิ่งที่อยู่ในหน่วยความจำตอนโพรเซสตาย และคุณไม่สามารถรู้ได้ว่ามันคืออะไรจนกว่าจะมีคนตรวจสอบ
หากผู้ดูแลขอ trace ให้ถามว่าต้องการจากไฟล์ปฏิบัติการใดและไลบรารีใด backtrace ที่เฟรมไม่ตรงกับบิลด์ที่รายงานนั้นยากที่จะเชื่อถือและอ่านผิดได้ง่าย
ตรวจสอบที่มาก่อนจะเปลี่ยนอะไร
ตรวจสอบที่มาของแพ็กเกจและความสมบูรณ์ของไฟล์ผ่านผู้ที่เป็นเจ้าของการติดตั้ง และเก็บรักษาการกำหนดค่าและวัสดุระบุตัวตนก่อนการซ่อมที่มีการควบคุมใด ๆ อย่าเขียนทับสำเนาหลักฐานเพียงชุดเดียวเพียงเพื่อดูว่าการติดตั้งสะอาดจะบูตได้หรือไม่ อิมเมจใหม่ที่บูตได้บอกว่าอิมเมจใหม่บูตได้ ไม่ได้บอกว่าอิมเมจเก่ามีแพ็กเกจเสีย การ์ดที่ล้มเหลว หรือไบนารีที่จะเกิดข้อผิดพลาดบนสถาปัตยกรรมนี้เสมอหรือไม่
หากโปรแกรมที่ไม่เกี่ยวข้องก็ล้มเหลว หรือระบบบันทึกข้อผิดพลาดที่เก็บข้อมูล ไฟ หรือเคอร์เนล ให้เก็บข้อสังเกตเหล่านั้นไว้สำหรับการสอบสวนแพลตฟอร์ม มันขยายขอบเขต แต่ไม่ได้พิสูจน์ว่า segfault ทุกครั้งมาจาก RAM ที่เสียหรืออิมเมจที่เสียหาย
หลังการแก้ไขเฉพาะจุด ทำการเปิดตัวที่ได้รับอนุญาตและปฏิบัติการ VPN เดียวกันซ้ำบนฮาร์ดแวร์เดียวกัน บอกว่าความล้มเหลวใดหยุดลงและในเวอร์ชันใด การบูตสะอาดอย่างเดียวไม่ระบุชิ้นส่วนที่บกพร่องและไม่ทำนายความล้มเหลวของฮาร์ดแวร์ครั้งถัดไป