อนุมานสาเหตุ :
https://fedoraproject.org/wiki/QA/Sysrq#How_do_I_use_the_magic_SysRq_keyซึ่งอยู่บนพื้นฐานการทำงานเดิมโดย
เครดิต
เขียนโดย Mydraal
Updated โดยอดัม Sulmicki
Updated โดยเจเรมีเอ็ม Dolan 2001/01/28 10:15:59
เพิ่ม โดย Crutcher Dunnavant
https://askubuntu.com/a/11194/102029 mneiss ให้ลิงก์สำหรับ LaunchPad
สารบัญ
sysrq คืออะไร
เหตุใด RESIUB (O) จึงไม่ทำงาน
1 ฉันจะให้ sysrq ทำงานในแบบที่ฉันต้องการได้อย่างไร
1.1คีย์ SysRq เวทมนต์คืออะไร?
1.2ฉันจะเปิดใช้งานคีย์มายากล SysRq ได้อย่างไร
1.3ฉันจะใช้คีย์ SysRq ได้อย่างไร?
1.4คีย์ 'คำสั่ง' คืออะไร
1.5เอาล่ะฉันจะใช้อะไรได้บ้าง
1.6 แก้ไขปัญหา
1.6.1แขวนก่อน initscripts เรียกใช้
1.6.2บางครั้ง SysRq ดูเหมือนจะ 'ติด' หลังจากใช้แล้วฉันควรทำอย่างไร
1.6.3ฉันกดปุ่ม SysRq แต่ไม่มีอะไรเกิดขึ้นเกิดอะไรขึ้น
1.6.4ฉันต้องการเพิ่มเหตุการณ์สำคัญ SysRQ ไปยังโมดูลมันทำงานอย่างไร?
1.6.5ข้อสรุป
1.6.6ภาคผนวก
หมายเหตุ
คุณอาจพบว่าการใช้Ctrl+ Fเพื่อใช้สารบัญมีประโยชน์
SysRq คืออะไร
รู้จักกันดีและใช้วิธีการทั่วไปของการฟื้นการใช้งานของเครื่องหลังจากที่มันแช่แข็งหรือล็อคกับ limitising ความเสี่ยงจากความเสียหายของดิสก์ที่นำไปสู่ความเสียหายระบบแฟ้มหรือการสูญหายของข้อมูลคือการใช้
Alt+ SysRq+ rแล้วsแล้วeแล้วiแล้วuแล้วbและ / หรือถ้าจำเป็น ( o)
สิ่งนี้ไม่ได้ทำงานตามที่คาดไว้สำหรับหลาย ๆ คน (เช่นตัวฉันเองและเจมส์) ผ่านรสชาติทั้งหมดตั้งแต่> = 8.04LTS จนถึงรุ่น 13.04 ปัจจุบัน
เหตุใด RESIUB (O) จึงไม่ทำงาน
พิจารณารายละเอียดข้อผิดพลาดนี้ได้ที่LaunchPad Bug 194676 :
คำอธิบายของปัญหา:
โดยค่าเริ่มต้น SysRq ถูกเปิดใช้งานตามค่าเริ่มต้นบนระบบเดสก์ท็อป Ubuntu ซึ่งมีค่าเมื่อระบบล็อคและคุณต้องการหยุดอย่างนุ่มนวลที่สุดหรือแก้ไขปัญหา อย่างไรก็ตามหลายคนประหลาดใจที่คุณสามารถขอให้ทิ้งเนื้อหาของหน่วยความจำปัจจุบันไปยังคอนโซล (หรือ dmesg) แม้ว่าจะมาจากแป้นพิมพ์เท่านั้น
openSUSE ตั้งค่า bitmask เริ่มต้นที่ 176 บน SysRq ซึ่งตามค่าเริ่มต้นจะ จำกัด ให้คุณทำการซิงค์รีบูตและ "remount แบบอ่านอย่างเดียว" สิ่งนี้จะหยุดคนที่ใช้ sysrq โดยค่าเริ่มต้นเพื่อตรวจสอบหน่วยความจำที่ฟังดูสมเหตุสมผล
นักพัฒนา Ubuntu เห็นความจำเป็นที่จะต้องทำบางสิ่งบางอย่างเกี่ยวกับเรื่องนี้และทางออกที่ดีที่สุดในการพิจารณาความยุ่งยากที่อาจเกิดขึ้นจากการสังเกตดังกล่าวคือการใช้ bitmask 176 sysrq โดยค่าเริ่มต้นสร้างความต้องการสำหรับผู้ใช้งาน bitmask 176 เพียง แต่ช่วยให้S, U, Bซึ่งเป็นซิงค์, remount ติดตั้งพาร์ทิชันและรีบูต
การอ่านรายงานข้อผิดพลาดแบบเต็มและความคิดเห็นจะเน้นตัวเลือกบางอย่างที่อาจใช้กับระบบของคุณ
ผลกระทบสะสมของฮาร์ดแวร์, เมล็ด, คีย์บอร์ดและ bitmasks ที่แตกต่างกันหมายความว่า sysrq ทำงานแตกต่างกันไปสำหรับแต่ละคน
วิธีหนึ่งในการรับเอาต์พุต txt เกี่ยวกับวิธีที่ระบบของคุณใช้ sysrq คือการใช้คำสั่ง sysrq จาก tty (เมื่อระบบไม่ประสบปัญหาจากการล็อก / ค้าง) การทำเช่นนี้อาจบ่งบอกว่า sysrq ยังไม่ได้ปิดการใช้งานอย่างสมบูรณ์ แต่ใช้ bitmask 176
ค้นหา / proc / sys / kernel / sysrq บนเดสก์ท็อป 13.04 amd64 liveDVD และการติดตั้งเดสก์ท็อป amd64 13.04 ยืนยันว่าค่าเริ่มต้นปัจจุบันอยู่ที่ sysrq ที่ bitmask 176
หาก sysrq ทำงานให้คุณ; มันอาจจะคุ้มค่าที่จะถามว่า "ถ้าฉันไม่ได้เปลี่ยนการตั้งค่า 10-magic-sysrq
1 ฉันจะให้ sysrq ทำงานในแบบที่ฉันต้องการได้อย่างไร
สิ่งที่ตามมาคือการคัดลอกแก้ไขและวางของhttps://fedoraproject.org/wiki/QA/Sysrq
1.1 คีย์ SysRq เวทมนต์คืออะไร?
มันเป็นคำสั่งผสม 'ขลัง' ที่คุณสามารถกดได้ซึ่งเคอร์เนลจะตอบสนองโดยไม่คำนึงถึงสิ่งอื่นที่กำลังทำอยู่เว้นแต่ว่าล็อคไว้อย่างสมบูรณ์
1.2 ฉันจะเปิดใช้งานคีย์มายากล SysRq ได้อย่างไร
sysrq สร้างขึ้นในเคอร์เนล Ubuntu แต่ถูกปิดใช้งานในเวลาบูตโดยค่าเริ่มต้นโดยใช้ 10-magic-sysrq.conf
หากต้องการเปิดใช้งานอีกครั้งในเวลาบูตคุณต้องแก้ไขไฟล์ /etc/sysctl.d/10-magic-sysrq.conf คือการไม่ใส่เครื่องหมายความคิดเห็นบรรทัดนี้จะเปิดใช้งานฟังก์ชั่นทั้งหมดของ sysrq:
# 1 - enable all functions of sysrq
เมื่อรันเคอร์เนลที่มี SysRq ที่คอมไพล์แล้ว / proc / sys / kernel / sysrq จะควบคุมฟังก์ชั่นที่อนุญาตให้เรียกใช้ผ่านคีย์ SysRq นี่คือรายการของค่าที่เป็นไปได้ใน / proc / sys / kernel / sysrq:
0 - disable sysrq completely
1 - enable all functions of sysrq
>1 - bitmask of allowed sysrq functions (see below for detailed function description):
2 - enable control of console logging level
4 - enable control of keyboard (SAK, unraw)
8 - enable debugging dumps of processes etc.
16 - enable sync command
32 - enable remount read-only
64 - enable signalling of processes (term, kill, oom-kill)
128 - allow reboot/poweroff
176 - allow only sync, reboot and "remount read-only"
256 - allow nicing of all RT tasks
คุณสามารถตั้งค่าในไฟล์โดยคำสั่งดังต่อไปนี้
echo "number" >/proc/sys/kernel/sysrq
ดังนั้นเพื่อเปิดใช้งานอย่างเต็มที่มันจะเป็น
echo "1" > /proc/sys/kernel/sysrq
หรือยังสามารถเปิดใช้งานได้โดยการทำ
sysctl -w kernel.sysrq=1
บันทึก.
ค่าของ / proc / sys / kernel / sysrq มีผลเฉพาะการเรียกใช้ผ่านคีย์บอร์ด การเรียกใช้การดำเนินการใด ๆ ผ่าน / proc / sysrq-trigger จะได้รับอนุญาตเสมอ (โดยผู้ใช้ที่มีสิทธิ์ผู้ดูแลระบบดูด้านล่าง)
1.3 ฉันจะใช้คีย์ SysRq ได้อย่างไร?
Ubuntu Desktop
คุณกดคำสั่งผสมที่สำคัญAlt+ +SysRqcommand key
NB-ดูบันทึกในส่วนนี้และในส่วนการแก้ไขปัญหาสำหรับการตั้งค่าเริ่มต้นอื่น ๆ ที่เป็นไปได้สำหรับระบบอื่น ๆ และแป้นพิมพ์
เป็นไปได้ที่จะตั้งค่าตัวละครที่คุณเลือก: สถาปัตยกรรมทั้งหมด
เขียนอักขระไปยัง / proc / sysrq-trigger:
echo t > /proc/sysrq-trigger
จะตั้งค่าการTทำงานเป็นSysRq
หมายเหตุ แป้นพิมพ์บางคนอาจไม่ได้สำคัญที่ระบุว่า
ที่สำคัญยังเป็นที่รู้จักกันเป็นสำคัญ นอกจากนี้คีย์บอร์ดบางตัวไม่สามารถจัดการกับแป้นที่กดได้หลายตัวในเวลาเดียวกันดังนั้นคุณอาจจะโชคดีกับ+ - จากนั้นกดจากนั้นปล่อยทุกอย่าง ดูการเขียน QA ฉบับสมบูรณ์ซึ่งคู่มือนี้อ้างอิงจากhttps://fedoraproject.org/wiki/QA/Sysrq#How_do_I_use_the_magic_SysRq_key.3Fสำหรับข้อมูลเพิ่มเติมเกี่ยวกับเรื่องนี้SysRqSysRqPrint ScreenAltSysRqSysRqcommand key
1.4 คีย์ 'คำสั่ง' คืออะไร
'b' - Will immediately reboot the system without syncing or unmounting your disks.
'c' - Will perform a kexec reboot in order to take a crashdump.
'd' - Shows all locks that are held.
'e' - Send a SIGTERM to all processes, except for init.
'f' - Will call oom_kill to kill a memory hog process.
'g' - Used by kgdb on ppc and sh platforms.
'h' - Will display help (any key that is not listed here will bring forth help )
'i' - Send a SIGKILL to all processes, except for init.
'k' - Secure Access Key (SAK) Kills all programs on the current virtual terminal.
บันทึก.
ดูความคิดเห็นที่สำคัญด้านล่างในส่วน SAK
'l' - Shows a stack backtrace for all active CPUs.
'm' - Will dump current memory info to your console.
'n' - Used to make RT tasks nice-able
'o' - Will shut your system off (if configured and supported).
'p' - Will dump the current registers and flags to your console.
'q' - Will dump a list of all running timers.
'r' - Turns off keyboard raw mode and sets it to XLATE.
's' - Will attempt to sync all mounted filesystems.
't' - Will dump a list of current tasks and their information to your console.
'u' - Will attempt to remount all mounted filesystems read-only.
'v' - Dumps Voyager SMP processor info to your console.
'w' - Dumps tasks that are in uninterruptable (blocked) state.
'x' - Used by xmon interface on ppc/powerpc platforms.
'0'-'9' - Sets the console log level, controlling which kernel messages will be printed to your console. ('0', for example would make it so that only emergency messages like PANICs or OOPSes would make it to your console.)
1.5 เอาล่ะฉันจะใช้อะไรได้บ้าง
Un raw มีประโยชน์มากเมื่อเซิร์ฟเวอร์ X หรือโปรแกรม svgalib ขัดข้อง
Sa k(คีย์การเข้าถึงที่ปลอดภัย) มีประโยชน์เมื่อคุณต้องการให้แน่ใจว่าไม่มีโปรแกรมโทรจันที่ทำงานอยู่ที่คอนโซลซึ่งสามารถคว้ารหัสผ่านของคุณเมื่อคุณพยายามเข้าสู่ระบบ มันจะฆ่าโปรแกรมทั้งหมดบนคอนโซลที่กำหนดดังนั้นให้คุณตรวจสอบให้แน่ใจว่าการแจ้งเตือนการเข้าสู่ระบบที่คุณเห็นนั้นแท้จริงแล้วมาจาก init ไม่ใช่โปรแกรมโทรจันบางโปรแกรม คนอื่น ๆ พบว่ามีประโยชน์ในฐานะ (System Attention Key) ซึ่งมีประโยชน์เมื่อคุณต้องการออกจากโปรแกรมที่จะไม่ยอมให้คุณเปลี่ยนคอนโซล (ตัวอย่างเช่น X หรือโปรแกรม svgalib)
หมายเหตุ
ในรูปแบบที่แท้จริงมันไม่ได้เป็น SAK ที่แท้จริงเช่นเดียวกับในระบบที่เข้ากันได้กับ c2 และไม่ควรเข้าใจผิดเช่นนั้น
การรีbบูตทำได้ดีเมื่อคุณไม่สามารถปิดเครื่องได้
บันทึก.
โดยทั่วไปถือว่าเป็นวิธีปฏิบัติที่ดีในการuติดตั้งก่อน
Crashdump สามารถใช้เพื่อเรียกcrashdump ด้วยตนเองเมื่อระบบหยุดทำงาน
บันทึก.
เคอร์เนลจำเป็นต้องได้รับการสร้างขึ้นโดยเปิดใช้งาน CONFIG_KEXEC!
การซิงค์เป็นสิ่งที่ยอดเยี่ยมเมื่อระบบของคุณถูกล็อคมันช่วยให้คุณสามารถsดิสก์ ync และจะช่วยลดโอกาสในการสูญเสียข้อมูลและ fscking
คำเตือน
การซิงค์ยังไม่เกิดขึ้นจนกว่าคุณจะเห็น "OK" และ "Done" ปรากฏบนหน้าจอ (หากเคอร์เนลขัดแย้งกันจริงๆคุณอาจไม่เคยได้รับข้อความ OK หรือ Done
Uการติดตั้งนั้นมีประโยชน์ในลักษณะเดียวกับSync
loglevels 0- 9มีประโยชน์เมื่อคอนโซลของคุณเต็มไปด้วยข้อความเคอร์เนลที่คุณไม่ต้องการเห็น การเลือก0จะป้องกันทั้งหมดยกเว้นข้อความเคอร์เนลที่เร่งด่วนที่สุดถึงคอนโซลของคุณ
บันทึก.
พวกเขาจะยังคงเข้าสู่ระบบหาก syslogd / klogd ยังมีชีวิตอยู่
T erm และ k iจะมีประโยชน์หากคุณมีกระบวนการแบบไม่ต้องควบคุมบางอย่างคุณไม่สามารถฆ่าวิธีอื่นได้
บันทึก.
เมื่อพบว่าเคอร์เนลเสียให้ทำAlt+ Sysrq+ eแล้วAlt+ Sysrq+ uแล้วAlt+ Sysrq+ iและสุดท้ายAlt+ Sysrq+b
1.6 แก้ไขปัญหา
1.6.1 แขวนก่อน initscripts เรียกใช้
หากเครื่องหยุดทำงานก่อน initscripts จะเริ่มทำงานให้บูตด้วย sysrq_always_enabled=1
1.6.2 บางครั้ง SysRq ดูเหมือนจะ 'ติด' หลังจากใช้งานฉันควรทำอย่างไร
Tapping shift, altและcontrolทั้งสองด้านของแป้นพิมพ์และกดปุ่ม SysRq ลำดับที่ไม่ถูกต้องอีกครั้งจะแก้ไขปัญหาได้ (เช่นบางอย่างเช่นalt+ sysrq+ z)
การเปลี่ยนไปใช้คอนโซลเสมือนอื่น ( Ctrl+ Alt+ Fn1- Fn6) แล้วกลับมาอีกครั้งCtrl+ Alt+ Fn7ควรช่วยด้วย
1.6.3 ฉันโดนSysRqแต่ไม่มีอะไรเกิดขึ้นเกิดอะไรขึ้น
มีแป้นพิมพ์บางตัวที่ส่ง scancodes ที่แตกต่างกันSysRqกว่าที่กำหนดไว้ล่วงหน้า 0x54 ดังนั้นหากSysRqไม่ได้ผลออกมานอกกรอบสำหรับแป้นพิมพ์บางตัวให้เรียกใช้showkey -s
เพื่อหาลำดับ scancode ที่เหมาะสม จากนั้นใช้setkeycodes <sequence> 84
เพื่อกำหนดลำดับนี้ให้กับSysRqรหัสปกติ(84 คือทศนิยมสำหรับ 0x54) อาจเป็นการดีที่สุดที่จะใช้คำสั่งนี้ในสคริปต์บูต
คำเตือน
คุณออกshowkey
โดยไม่พิมพ์อะไรเลยเป็นเวลาสิบวินาที
1.6.4 ฉันต้องการเพิ่มSysRqเหตุการณ์สำคัญในโมดูลมันทำงานอย่างไร
ในการลงทะเบียนฟังก์ชั่นพื้นฐานกับตารางคุณต้องใส่ส่วนหัวก่อนinclude/linux/sysrq.h
ซึ่งจะกำหนดทุกอย่างที่คุณต้องการ ถัดไปคุณต้องสร้างโครงสร้าง sysrq_key_op และเติมด้วย ...
ฟังก์ชันตัวจัดการคีย์ที่คุณจะใช้
สตริง help_msg ที่จะพิมพ์เมื่อ SysRQ พิมพ์ความช่วยเหลือ
สตริง action_msg ที่จะพิมพ์ก่อนที่จะเรียกใช้ตัวจัดการของคุณ ตัวจัดการของคุณจะต้องสอดคล้องกับต้นแบบใน 'sysrq.h'
หลังจากสร้าง sysrq_key_op แล้วคุณสามารถเรียกใช้ฟังก์ชันเคอร์เนล register_sysrq_key (คีย์ int, struct sysrq_key_op * op_p) สิ่งนี้จะลงทะเบียนการดำเนินการที่ชี้ไปโดย 'op_p' ที่คีย์ของตาราง 'คีย์' หากสล็อตในตารางนั้นว่างเปล่า ในเวลาที่โมดูลยกเลิกการโหลดคุณต้องเรียกใช้ฟังก์ชัน unregister_sysrq_key (คีย์ int, struct sysrq_key_op * op_p) ซึ่งจะลบคีย์ op ที่ชี้โดย 'op_p' จากคีย์ 'key' หากในปัจจุบันมีการลงทะเบียนในนั้น สล็อต นี่คือในกรณีที่ช่องถูกเขียนทับตั้งแต่คุณลงทะเบียน
SysRqระบบMagic ทำงานโดยการลงทะเบียนการดำเนินงานที่สำคัญกับตารางการค้นหาคีย์ซึ่งกำหนดไว้ใน 'drivers / char / sysrq.c' ตารางคีย์นี้มีจำนวนของการดำเนินการที่ลงทะเบียนไว้ในเวลารวบรวม แต่สามารถเปลี่ยนแปลงได้และฟังก์ชั่น 2 รายการจะถูกส่งออกสำหรับอินเตอร์เฟสไปยัง register_sysrq_key และ unregister_sysrq_key แน่นอนไม่เคยออกจากตัวชี้ที่ไม่ถูกต้องในตาราง เช่น; เมื่อโมดูลของคุณที่เรียกว่า register_sysrq_key () ออกจากนั้นจะต้องเรียก unregister_sysrq_key () เพื่อล้างรายการตารางคีย์ sysrq ที่ใช้
บันทึก.
พอยน์เตอร์ Null ในตารางปลอดภัยเสมอ
ถ้าด้วยเหตุผลบางอย่างที่คุณรู้สึกว่าจำเป็นต้องเรียกใช้ฟังก์ชัน handle_sysrq จากภายในฟังก์ชันที่เรียกว่าโดย handle_sysrq คุณต้องระวังว่าคุณอยู่ในล็อก (คุณอยู่ในตัวจัดการอินเตอร์รัปต์ซึ่งหมายความว่าอย่านอน!) คุณต้องโทรหา __handle_sysrq_nolock แทน
1.6.5 สรุป
ใช้Alt+ SysRq+ SจากUนั้นBให้ซิงค์พยายามติดตั้งระบบไฟล์ที่เมาท์ใหม่อีกครั้งจากนั้นรีบูตหากจำเป็น โดยไม่ต้องเปลี่ยนสิ่งของให้เป็นไฟล์ระบบ
หากAlt+ SysRq+ Bไม่รีบูทระบบอาจจำเป็นต้องแก้ไข /etc/sysctl.d/10-magic-sysrq.conf เพื่อให้สามารถลองใช้Alt+ SysRq+ B(หรือ / และOหลังจากการแก้ไข / proc / sys / kernel / sysrq bitmask เพื่อเปิดใช้งานการรีบูตและปิดระบบโดยใช้ sysrq คุณสามารถทำได้โดยวิธีการใด ๆ ที่อธิบายไว้ข้างต้น
1.6.6 ภาคผนวก:
ดูเพิ่มเติมที่ - http://ubuntuforums.org/showthread.php?t=617349และhttps://www.kernel.org/doc/Documentation/sysrq.txt
สำหรับผู้ที่มีปัญหาเกี่ยวกับคีย์บอร์ด Apple MacBook เกี่ยวกับ sysrq โปรดดูที่: https://help.ubuntu.com/community/AppleKeyboardและhttps://bugs.launchpad.net/mactel-support/+bug/262408
ข้อมูลที่น่าสนใจสัมพัทธ์ - หลังจากดูตอนที่ 17 08 2013 ของรายการ BBC คลิก "และ" cyberwarfare "บทความได้รับความสนใจอย่างมาก โปรแกรมยังมีเว็บไซต์ของตัวเองคลิกหากคุณไม่สามารถดูโปรแกรม FAWC