สลับระหว่างเคอร์เนลเวอร์ชันต่าง ๆ โดยไม่ต้องรีบูต


11

ฉันต้องการสลับระหว่างเคอร์เนลเวอร์ชันต่าง ๆ ที่ติดตั้งบนระบบของฉันโดยไม่ต้องรีบูต

กล่าวคือถ้าฉันมี ' 3.0.0-16-genericเคอร์เนลทำงานอยู่ในขณะนี้และฉันมีเคอร์เนลรุ่นเก่า3.0.0-14-genericอยู่ที่นั่นด้วยฉันอาจจะสามารถสลับไปใช้3.0.0-14-generic(เคอร์เนลอื่น) โดยไม่ต้องรีบูตเครื่อง

(ฉันต้องทำการดีบักเคอร์เนลสดและทำการเปลี่ยนแปลงเพื่อที่จะทำเช่นนั้นฉันไม่สามารถรีบูตได้)

คำตอบ:


8

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

ที่อยู่ใกล้คุณจะได้รับเป็นกระบวนการถ่ายทอดสดปะใช้Ksplice มันแปลงการอัปเดตเคอร์เนลเป็น shims วิเศษที่สามารถเสียบรูในเคอร์เนลที่รันอยู่ซึ่งช่วยให้คุณสามารถเก็บคอมพิวเตอร์ไว้ได้ไม่ จำกัด โดยไม่ต้องรีบูต สำหรับวัตถุประสงค์ของคุณมันยังช่วยให้คุณย้อนกลับการเปลี่ยนแปลง

เป็นรุ่นฟรีสำหรับ Ubuntu Desktop เพื่อให้คุณสามารถเล่นกับมันได้ แต่คุณต้องจ่ายค่าสมัครใช้งานเซิร์ฟเวอร์ (ซึ่งเป็นสิ่งที่จำเป็นที่สุด)


เพิ่งเห็นการแก้ไขของคุณ Ksplice อาจจะไม่ช่วยถ้าคุณแฮ็คและสร้างเมล็ดของคุณเองเพื่อทำการดีบั๊กเนื่องจาก "บริการ" คือพวกเขาให้การอัปเดตพิเศษและพวกเขาไม่ใช่สิ่งที่คุณสามารถสร้างได้ด้วยตัวเอง

หากคุณเพียงแค่สร้างสิ่งต่าง ๆกับเคอร์เนลอย่างเป็นทางการมันอาจยังทำงานได้


อีกหนึ่งแนวคิด: การจำลองเสมือน คุณสามารถสร้างเคอร์เนลใหม่และแลกเปลี่ยนสิ่งต่าง ๆ ใน VM และรีบูตได้ มันยังคงต้องใช้เวลาในการรีบูต แต่คุณสามารถทำให้ VM มีน้ำหนักเบากว่าเครื่องพัฒนาของคุณ (ฐานบนเซิร์ฟเวอร์ Ubuntu ปล่อยเซิร์ฟเวอร์ X ถ้าคุณไม่ต้องการ ฯลฯ )


1
แต่ฉันต้องการที่จะสลับไปมาระหว่างสองเมล็ดที่แตกต่างกันในไดเรกทอรี boot / ฉัน
coder

1
ใช่คุณจะไม่สามารถสลับระหว่างสองเมล็ดได้โดยพลการ ฉันได้เพิ่มการแก้ไขอื่นด้วยแนวคิดอื่นที่อาจเป็นประโยชน์กับคุณ
Oli

2

ตามที่Oli ได้กล่าวมาสิ่งที่ดีที่สุดของคุณน่าจะเป็นระบบเสมือนจริง

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

นำมาจากหน้าArchWikikexec :

kexec -l /boot/new-kernel --initrd=/boot/new-initrd --reuse-cmdline
kexec -e

โปรดทราบว่าข้างต้นจะยังคงเริ่มบริการทั้งหมดรวมถึงระบบเริ่มต้นของคุณเซิร์ฟเวอร์การแสดงผลระบบเครือข่ายและอื่น ๆ อย่างไรก็ตามหากคุณใช้ระบบ init ที่เร็วพอเช่นsystemdคุณสามารถบูตเข้าสู่เคอร์เนลใหม่ได้ใน 2-3 วินาทีเนื่องจาก คุณกำลังข้าม BIOS / UEFI และ bootloader


คำอธิบายที่คล้ายกันสามารถพบได้บนหน้า RapidReboot อูบุนตูวิกิพีเดีย


0

ฉันคิดว่าคำตอบเหล่านี้จำเป็นต้องได้รับการปรับปรุง

ตอนนี้มีkpatchซึ่งเป็นเจ้าของภาษามากกว่าkspliceและคณะ

มันไม่สามารถเปลี่ยนโครงสร้างข้อมูลในเคอร์เนลได้ด้วยเหตุผลที่ชัดเจนดังนั้นมันจึงมีประโยชน์สำหรับฮอตแพ็ครักษาความปลอดภัยเป็นส่วนใหญ่

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

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