ต้องรีบูตเมื่อใด


27

นอกเหนือจากการอัพเกรดเคอร์เนลมีการเปลี่ยนแปลงใด ๆ ในระบบ Linux ที่ต้องรีบูตหรือไม่? ฉันรู้ว่ามีสถานการณ์ที่การรีบูตทำให้ง่ายขึ้น แต่มีสิ่งใดบ้างที่ไม่สามารถทำได้ยกเว้นการรีบูตหรือไม่

ในการชี้แจง: ฉันกำลังคิดถึงระบบเดสก์ท็อปหรือเซิร์ฟเวอร์ทั่วไปที่ไม่ได้รับความผิดปกติจากฮาร์ดแวร์


3
ทุกสิ่งสามารถทำได้โดยไม่ต้องรีบูตเครื่อง แม้การเปลี่ยนเคอร์เนลสามารถทำได้โดยใช้kspliceเพื่อให้คุณสามารถสลับเคอร์เนล สิ่งเดียวที่คุณต้องคำนึงถึงคือการทำทุกสิ่งโดยไม่ต้องรีบูตเครื่องมีความซับซ้อนมาก
กีวี

4
คำถามของคุณกว้างมากเพราะ "ระบบ Linux" อาจมีความหมายแตกต่างกันมาก
Zrin

นอกจากนี้ "การเปลี่ยนแปลงใด ๆ " อาจหมายถึงสถานการณ์ที่แตกต่างกันมาก การกู้คืนจากฮาร์ดไดรฟ์ที่ล้มเหลวซึ่งเป็นส่วนหนึ่งของ MD mirror นั้นมีการเปลี่ยนแปลงหรือไม่? ถ้าเป็นเช่นนั้น - โชคไม่ดี - บางครั้งจะต้องมีการรีบูตเพราะตัวอย่างเช่นความล้มเหลวของ HDD บางตัว (สำหรับตัวควบคุม HDD บางตัว) สามารถทำให้ระบบไม่ตอบสนองได้ แต่คุณอาจไม่ถามเกี่ยวกับ "การเปลี่ยนแปลง" เช่นนั้น ...
Zrin

3
@Kiwy เทคนิค ksplice ไม่เปลี่ยนเคอร์เนล Ksplice อนุญาตให้เคอร์เนลที่กำลังทำงานได้รับการแก้ไขในขณะที่กำลังทำงาน คุณอาจนึกถึงkexecซึ่งทำให้สามารถโหลดอิมเมจเคอร์เนลใหม่ได้ "เกิน" เคอร์เนลที่กำลังทำงานอยู่ในหน่วยความจำ
โทมัส Nyman

สิ่งนี้ทำให้ฉันนึกถึง windows XP (ฉันไม่เคยไปไกลกว่านี้) ไม่เคยปิดเรื่องการรีสตาร์ทแม้ว่าจะเพิ่งอัพเดท IE8 (หรือหมายเลขใด ๆ ) ที่ยังไม่ได้เปิดเป็นเวลา 4 ปีตั้งแต่การติดตั้ง Windows และจำเป็นต้องดาวน์โหลด เบราว์เซอร์
Shahbaz

คำตอบ:


44

สองสิ่งที่นึกถึง:

  • กู้คืนจากความตื่นตระหนกของเคอร์เนล

    เคอร์เนล panic ตามนิยามไม่สามารถกู้คืนได้โดยไม่ต้องรีสตาร์ทเคอร์เนล

  • กู้คืนจากแฮงค์ที่ทำให้คุณไม่มีการเข้าถึงเทอร์มินัล

    หากระบบไม่ตอบสนองและคุณติดอยู่โดยไม่มีวิธีการออกคำสั่งให้กู้คืนสิ่งเดียวที่คุณอาจทำได้คือการรีบูต โดยปกติแล้วคุณต้องการหลีกเลี่ยงการปั่นไฟด้วยตนเอง สำหรับสถานการณ์ประเภทนี้เคอร์เนล Linux มีการสนับสนุนMagic SysRqซึ่งสามารถใช้รีบูตเครื่องในกรณีฉุกเฉิน

    ตราบใดที่CONFIG_MAGIC_SYSRQมีการเปิดใช้งานตัวเลือกในการกำหนดค่าเคอร์เนลและkernel.sysrq sysctlตัวเลือกถูกเปิดใช้งานคุณสามารถออกคำสั่งโดยตรงไปยังเคอร์เนลด้วยคีย์ผสม Magic SysRq

    โปรดทราบว่าAlt+ SysRqด้านล่างหมายถึงกดค้างไว้ Altจากนั้นกดค้างไว้ SysRq (โดยทั่วไปคือPrintScrnปุ่ม)

    1. Alt+ SysRq+ r: ควบคุมแป้นพิมพ์ได้อีกครั้ง
    2. Alt+ SysRq+ e: ส่งSIGTERMไปยังกระบวนการทั้งหมดยกเว้นinitให้โอกาสพวกเขาในการยุติอย่างสง่างาม
    3. Alt+ SysRq+ i: ส่งSIGKILLไปยังกระบวนการทั้งหมดยกเว้นinitบังคับให้ยุติ
    4. Alt+ SysRq+ s: พยายามซิงค์ระบบไฟล์ที่เมาท์ทั้งหมด
    5. Alt+ SysRq+ u: ติดตั้งระบบไฟล์ทั้งหมดเป็นแบบอ่านอย่างเดียว
    6. Alt+ SysRq+ b: รีบูทหรือ

      Alt+ SysRq+ o: ปิดเครื่อง

    ช่วยในการจำสำหรับการรวมกันของเวทย์มนตร์คีย์ SysRq เพื่อพยายามรีบูตอย่างสง่างามคือ:

    " R eboot E ven ฉันf S ystem U tterly B roke "

    สำหรับเซิร์ฟเวอร์ที่ไม่มีหัวนั้นยังมีเป้าหมาย iptables ที่เปิดใช้งานลำดับ SysRq ระยะไกลผ่านเครือข่าย

  • กู้คืนจากสถานะที่ไม่สามารถบูตได้

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

  • เปลี่ยนพารามิเตอร์เคอร์เนลเวลาบูต

    พารามิเตอร์เคอร์เนลบางตัว (เช่นauditเปิดใช้งาน / ปิดใช้งานการตรวจสอบเคอร์เนล) สามารถตั้งค่าได้เมื่อโหลดเคอร์เนลตอนบูตเท่านั้น


3
"รีบูตแม้ว่าระบบจะสมบูรณ์" ฉันชอบคำถามนี้ในกรณี แต่ฉันไม่คิดว่าจะลืมไปเลย
embedded.kyle

1
เป็นไปได้ว่าคุณควรออกจากความตื่นตระหนกโดยใช้ kexec และหลีกเลี่ยงการบูตใหม่ทั้งหมด สิ่งนี้ยังใช้กับการออกจากจุดที่ไม่สามารถบูตได้ (สิ่งเหล่านี้ไม่เหมือนกันไม่ว่าด้วยวิธีใดก็ตามอย่างน้อยในระบบ x86) อย่างไรก็ตาม +1 สำหรับคำตอบที่เหลือ
Vality

@Vality ขอบคุณสำหรับความคิดเห็นของคุณ หาก kexec มีการรีบูตอาจขึ้นอยู่กับขอบเขตของมุมมอง เอกสาร kdumpเช่นอธิบาย kexec บนความหวาดกลัวเป็นรีบูตที่เก็บรักษาภาพความทรงจำเคอร์เนลของระบบ สำหรับประเด็นเกี่ยวกับสถานะที่ไม่สามารถบูทได้ฉันก็พิจารณาสิ่งต่าง ๆ เช่น bootloader misconfiguration (เช่นความล้มเหลวในการโหลดเคอร์เนลในตอนแรก) ซึ่ง kexec ไม่ได้ช่วย จากลักษณะของคำถามฉันคิดว่าความคิดเห็นที่แตกต่างกันเกี่ยวกับความหมายนั้นหลีกเลี่ยงไม่ได้
Thomas Nyman

@ThomasNyman ขอขอบคุณสำหรับการตอบกลับอย่างละเอียดมองคำถามที่ถูกต้องฉันรู้สึก ฉันคิดว่าการพูดถึง kexec อาจจะทำให้สิ่งที่ซับซ้อนสำหรับกลุ่มเป้าหมายหรือคำถามนี้ไม่จำเป็น และคุณยังทำจุดที่ดีเกี่ยวกับข้อผิดพลาดบูตโหลดเดอร์
Vality

ฉันไม่เคยสังเกตเห็นว่า SysRq ตัวเล็ก ๆ ที่เขียนภายใต้หน้าจอการพิมพ์! นี่มันเจ๋งมาก. ฉันหวังว่าฉันจะรู้เรื่องนี้เมื่อฉันเรียนรู้การเขียนโปรแกรมเคอร์เนลโมดูล!
Shahbaz

2

มีสองครั้งที่ฉันสามารถนึกถึงว่าฉันต้องการรีบูทที่ใด:

  1. เมื่อฉันต้องการเพื่อให้แน่ใจว่าระบบสามารถบูตขึ้นในสถานะที่เหมาะสม

    ฉันเคยทำงานในระบบที่มีภูตที่กำหนดค่าบางอย่างในขณะที่มันกำลังทำงานอยู่ หลังจากมันวิ่งไปสองสามปีความล้มเหลวของระบบทำให้มันสามารถรีบูทได้ แต่ daemon ไม่ได้เป็นส่วนหนึ่งของกระบวนการเริ่มต้นและไม่มีใครรู้ว่ามันถูกตั้งค่าเมื่อหลายปีก่อน ระบบหยุดทำงานหลายวันในขณะที่เราหาวิธีกำหนดค่าใหม่

    การรีบู๊ตจริงเป็นวิธีเดียวที่จะทราบได้ว่าระบบของคุณจะรีสตาร์ทอย่างถูกต้องหลังจากไฟฟ้าดับ

  2. เมื่อห้องสมุดระบบได้รับการอัพเดท

    สมมติว่ามีการค้นพบข้อบกพร่องด้านความปลอดภัยที่สำคัญในไลบรารีที่แชร์กับแอพ / เซิร์ฟเวอร์จำนวนมากในระบบ คุณสามารถอัปเดตไลบรารีโดยไม่ต้องรีบูตเครื่อง แต่ยังมีอีกกี่กระบวนการที่ยังคงทำงานเมื่อโหลดไลบรารี่ที่ไม่ปลอดภัยออกมา คุณสามารถรีสตาร์ทสิ่งใด ๆ ด้วยความระมัดระวังโดยใช้ไลบรารีเก่า (ถ้าคุณสามารถหาได้) แต่นั่นเป็นข้อผิดพลาดและอาจใช้เวลานานกว่าการรีบูต

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


มีวิธีที่ดีกว่าในการค้นหาไบนารีทั้งหมดขึ้นอยู่กับไลบรารีบางอย่างถ้าคุณใช้ตัวจัดการแพคเกจที่ดี revdep-rebuilt จาก Gentoo อยู่ในใจ
Spidey

1
@Spidey: เมื่อคุณสร้างไบนารีเหล่านั้นใหม่อีกครั้งคุณจะมั่นใจได้อย่างไรว่าไม่มีกระบวนการเก่าที่ทำงานกับไลบรารี buggy
Gabe

1
คุณรู้ได้อย่างไรว่า daemons ใดที่โหลดไลบรารีที่ละเมิด
Gabe

1
@Gabe คุณสามารถตรวจสอบตัวอย่างว่ากระบวนการใดที่ไลบรารีถูกแม็พกับพื้นที่หน่วยความจำของพวกเขาโดยใช้lsofก่อนที่คุณจะอัพเกรดไลบรารี
Thomas Nyman

1
@Gabe แน่นอนและในขณะที่ผมยอมรับว่านั่นเป็นเหตุผลที่ดีที่ดีที่สุดที่จะรีบูต, OP เป็นอย่างชัดเจนไม่ได้ถามในกรณีที่มีการรีบูต conventient มากขึ้น แต่เมื่อมีการรีบูตเป็นสิ่งจำเป็นอย่างยิ่ง
โทมัส Nyman

0

หากคุณหมายถึงการเปลี่ยนแปลงที่วางแผนไว้ในการกำหนดค่าซอฟต์แวร์และถือว่าฮาร์ดแวร์ทำงานได้อย่างสมบูรณ์ (ฉันยังไม่เคยเห็นมาก่อน) และซอฟต์แวร์ที่ไม่มีข้อบกพร่อง (คุณรู้ว่า ... ) ดังนั้นมีเพียงข้อบกพร่องในเคอร์เนลหรือไดรเวอร์เท่านั้น รีบูต :)

นอกเหนือจากนั้น ... ฉันไม่แน่ใจว่ามันจะเป็นไปได้ที่จะแทนที่initโดยไม่ต้องเปลี่ยนไปใช้โหมดผู้ใช้คนเดียวและทำเวทมนต์ซึ่งแตกต่างจากรีบูตไม่มาก

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.