เป็นไปได้ไหมที่จะรีบูทระบบปฏิบัติการ Linux โดยไม่ต้องบู๊ตฮาร์ดแวร์ใหม่?


89

มีวิธีการรีบูตระบบ Linux (โดยเฉพาะ Debian) โดยไม่ต้องบูตเครื่องใหม่หรือไม่?

ฉันมีตัวควบคุม RAID ที่ใช้เวลาเล็กน้อยในการทำให้ตัวเองทำงานก่อนที่ระบบปฏิบัติการจะเริ่มต้นขึ้นและฉันต้องการถ้ามีวิธีรีบูตระบบปฏิบัติการ Linux ได้อย่างรวดเร็วโดยไม่ต้องผ่านกระบวนการรีบูตทั้งหมดของการรีสตาร์ทตัวควบคุม RAID เป็นต้น


6
ระบบที่ใช้ UEFI ทั้งหมดสามารถเปลี่ยน OS โดยไม่ต้องบูตระบบใหม่ คุณมีkexec()สิ่งที่ชอบexec()แต่สำหรับเมล็ด Unix
user2284570

คำตอบ:


98

ฉันใช้kexec-rebootในเกือบทุกระบบการผลิตของฉัน

มันใช้งานได้ดีอย่างเหลือเชื่อทำให้ฉันสามารถเลี่ยงเวลา POST ที่ยาวนานบนเซิร์ฟเวอร์ HP ProLiant และลดรอบการบู๊ตจาก 5 นาทีเป็น ~ 45 วินาที

ดู: https://github.com/error10/kexec-reboot

ข้อแม้เดียวคือมันดูเหมือนว่าจะไม่ทำงานบนระบบ RHEL / CentOS 6.x ซึ่งเป็นการบูท UEFI แต่การทำงานร่วมกันของ OS / ฮาร์ดแวร์ที่มีสติ


62
ฉันเขียนมัน! แต่มันก็ยังใช้งานได้ดี ...
Michael Hampton

1
มโนหร ดังนั้นกระบวนการที่แท้จริงมีลักษณะอย่างไร อ้างอิงจากบทความโดย Hariprasad Nellitheertha (เชื่อมโยงจากหน้า kexec wikipedia) "แตกต่างจากกระบวนการรีบูตปกติ kexec ไม่ทำการปิดระบบใหม่ทั้งหมดก่อนที่จะทำการรีบูตมันเหลือให้คุณฆ่าโปรแกรมทั้งหมดและ unmount ระบบไฟล์ ก่อนที่จะพยายามรีบูต kexec " ฉันสังเกตเห็นบางสิ่งที่น่าสงสัยเช่น Wim Coekaerts กล่าวว่า "sync; umount -a; kexec -e" จะทำการรีบูทอย่างรวดเร็ว แต่คุณไม่สามารถเพิ่มระบบไฟล์ที่ไม่ว่างได้ อ่านเว็บดูเหมือนว่าหลายคนเพิกเฉยต่อส่วน 'ฆ่าแอปพลิเคชันทั้งหมด'
Mike S

2
@MikeS kexecนี้ไม่ได้ มันเป็นkexec-rebootยูทิลิตี้ คำอธิบาย Github แสดงความแตกต่างและสิ่งที่ยูทิลิตี้เพิ่มให้กับกระบวนการ
ewwhite

4
@MikeS หลังจากการแสดงละคร kexec shutdown -rคุณก็ทำ สคริปต์ระบบของคุณจะสังเกตเห็นว่า kexec ได้รับการจัดเตรียมและทำสิ่งที่ถูกต้อง มันเป็นอย่างไร สั้นลงสามหรือสี่หรือสิบห้านาที ฉันมีวิดีโอคุณภาพที่น่ากลัวมากที่ฉันถอดออกจากคอนโซล iDRAC แต่คุณไม่ต้องการประสบกับเรื่องนั้นจริงๆ ... kexec-rebootสคริปต์มีจุดประสงค์เพื่อทำให้กระบวนการรับอาร์กิวเมนต์บรรทัดคำสั่งที่ถูกต้องเป็น kexec ซึ่งอาจยุ่งยาก .
Michael Hampton

1
@MichaelHampton - ยอดเยี่ยม ผมเห็นว่าบน CentOS 6.5 ใกล้สิ้น /etc/rc3d/rc6.d/S01reboot [ -n "$kexec_command" ] && $kexec_command -e -x >& /dev/nullมี: ดังนั้นหากเคอร์เนลถูกโหลดโดย kexec -l ระบบจะทำการรีบูตโดยไม่ต้องมี / sbin / reboot ... kexec ถูกอบ! ฉันไม่รู้ว่าขอบคุณ ฉันคิดว่าการแจกแจงที่ทันสมัยกว่านั้นครอบคลุมอยู่เช่นกัน BTW หาก kexec ไม่เคยทำงานด้วย -l สคริปต์รีบูตจะพูดว่า "ไม่มีอะไรโหลดเลย!" ซึ่งเป็นสาเหตุที่ผลลัพธ์ถูกส่งไปยัง / dev / null และทำไมฉันไม่เคยตระหนักถึงสิ่งอำนวยความสะดวกนี้
Mike S

17

ใช่มันเป็นไปได้ kexecจะอนุญาตให้เคอร์เนล Linux สามารถบู๊ตได้โดยตรงจาก Linux โดยไม่ต้องผ่านกระบวนการบู๊ต BIOS


นอกจากนี้ UEFI ยังอนุญาตให้เปลี่ยนระบบปฏิบัติการโดยไม่ต้องบูตเครื่องใหม่
2284570

1
@ user2284570 เท่าที่ฉันทราบ UEFI ไม่มีกลไกดังกล่าว
Jonathon Reinhart

15

ใช่. คุณต้องใช้ kexec-tools ที่จะทำให้ชีวิตง่ายขึ้นผมใช้kexec รีบูต

$sudo apt-get install kexec-tools
$wget https://raw.githubusercontent.com/vadmium/kexec-reboot/master/kexec-reboot
$chmod +x kexec-reboot
$sudo mv kexec-reboot /usr/local/sbin/kexec-reboot
$sudo /usr/local/sbin/kexec-reboot

13
เพื่อให้ไม่มีความสับสนฉันไม่ได้เขียนสิ่งนี้
Michael Hampton

นี่น่าจะเป็น Ubuntu / Debian เท่านั้นใช่ไหม
ewwhite

1
@ whitewhite มันอาจจะทำงานกับ RHEL / CentOS แต่ในการอ่านรหัสฉันพบจุดที่มีปัญหาหลายจุดที่กรณีขอบอาจทำให้มันล้มเหลว และดูเหมือนว่าแหล่งที่มาจะรับทราบด้วยความคิดเห็น:# The error checking is very basic.
Michael Hampton
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.