Sử dụng SysRq trên Linux

Biểu hiện

Trường hợp Hardware Node bị treo, chuỗi SysRq rất hữu dụng để thu thập thông tin debug và restart HW bằng cách sử dụng ATL + Sysrq keys.

Giải pháp

1. Kiểm tra cấu hình hình hiện tại của kernell:

  • Nhấn Alt+SysRq+H để hiện thị lệnh sẵn có:
    SysRq HELP : loglevel0-8 vsced_stAte reBoot Crashdump tErm Full debuG kIll thaw-filesystems(J) saK showMem Nice powerOff showPc unRaw Sync showTasks Unmount shoWcpus
  • Dưới đây là output:
    • Alt+SysRq+0 – Alt+SysRq+8 – set kernel log level, where 0 is the lowest and 8 is the highest verbosity of logging. It is recommended to set log level to 8 before executing other commands.
    • Alt+SysRq+A – Show Vsched.
    • Alt+SysRq+B – Reboot immediately without syncing or unmounting your disks, it may lead to file system corruption.
    • Alt+SysRq+C – Trigger a crash.
    • Alt+SysRq+E – Send the TERM signal to all running processes except init, asking them to exit.
    • Alt+SysRq+F – Manual OOM execution.
    • Alt+SysRq+G – Debug mode.
    • Alt+SysRq+H – Show help message.
    • Alt+SysRq+I – Send KILL signal to all running processes except init, asking them to exit.
    • Alt+SysRq+J – Emergency Thaw of all frozen filesystems.
    • Alt+SysRq+K – Kill all processes (including X) which are running on the currently active virtual console. This key combination is know as “secure access key” (SAK).
    • Alt+SysRq+M – Show Memory.
    • Alt+SysRq+N – Nice All RT Tasks.
    • Alt+SysRq+O – Shut the system off. Without preliminary operations it may lead to file system corruption.
    • Alt+SysRq+P – Dump the current registers and flags.
    • Alt+SysRq+Q – Quit from debugging mode.
    • Alt+SysRq+R – Turn off keyboard raw mode.
    • Alt+SysRq+S – Run an emergency sync (cache write) on all mounted filesystems. This can prevent data loss.
    • Alt+SysRq+T – Dump a list of current tasks and their information.
    • Alt+SysRq+U – Remount all mounted filesystems as read-only.
    • Alt+SysRq+W – Show CPUs.

2. Thu thập dữ liệu debug:

  • Dump thông tin CPU bằng cách nhấn Alt+SysRq+W, bạn sẽ thấy thông tin xuất hiện trên serial console:
    Mar 8 10:07:57 pvcfl46 SysRq: Show CPUs Mar 8 10:07:57 pvcfl46 requested on CPU0: Mar 8 10:07:57 pvcfl46 CPU0: Mar 8 10:07:57 pvcfl46 ffff810037d69dd0 0000000000000000 ffffffff80344648 0000000000000000 Mar 8 10:07:57 pvcfl46 ffffffff801aef3f 0000000000000000 ffffffff801aef2d ffffffff801aef97 Mar 8 10:07:57 pvcfl46 ffffffff801aef2d ffffffff8009463e ffffffff80344640 ffff81007ffabdc0 Mar 8 10:07:57 pvcfl46 Call Trace: Mar 8 10:07:57 pvcfl46 [] showacpu+0x0/0x65 Mar 8 10:07:57 pvcfl46 [] sysrq_showregs_othercpus+0x0/0x12 Mar 8 10:07:57 pvcfl46 [] showacpu+0x58/0x65 Mar 8 10:07:57 pvcfl46 [] sysrq_showregs_othercpus+0x0/0x12 Mar 8 10:07:57 pvcfl46 [] on_each_cpu+0x19/0x22 Mar 8 10:07:57 pvcfl46 [] run_workqueue+0x94/0xe5 Mar 8 10:07:57 pvcfl46 [] worker_thread+0x0/0x122 Mar 8 10:07:57 pvcfl46 [] worker_thread+0xf0/0x122 Mar 8 10:07:57 pvcfl46 [] default_wake_function+0x0/0xe Mar 8 10:07:57 pvcfl46 [] kthread+0xfe/0x132 Mar 8 10:07:57 pvcfl46 [] child_rip+0xa/0x11 Mar 8 10:07:57 pvcfl46 [] kthread+0x0/0x132 Mar 8 10:07:57 pvcfl46 [] child_rip+0x0/0x11
  • Dump thông tin bộ nhớ nhấn Alt+SysRq+M (thực hiện 2-3 lần)
  • Dump tất cả trạng thái registers bằng cách nhấn Alt+SysRq+P (thực hiện 2-3 lần)
  • Dump tất cả thông tin tác vụ bằng cách nhấn Alt+SysRq+T (thực hiện 2-3 lần)
  • Dump thông tin Vsched nhấn Alt+SysRq+A.

4. Thử reboot một cách an toàn:

  • Sync all filesystems nhấn Alt+SysRq+S. Output tương tự như:

    Mar 8 10:31:58 pvcfl46 SysRq: Emergency Sync Mar 8 10:31:58 pvcfl46 Emergency Sync complete
  • Umount filesystem bằng cách nhấn Alt+SysRq+U:
    Mar 8 10:33:30 pvcfl46 SysRq: Emergency Remount R/O Mar 8 10:33:30 pvcfl46 Emergency Remount complete
  • Kill tất cả tiến trình nhấn Alt+SysRq+I. Output tương tự như:
    Mar 8 10:36:13 pvcfl46 SysRq: Kill All Tasks Mar 8 10:36:13 pvcfl46 CT: 1: stopped
  • Gửi lệnh reboot node nhấn Alt+SysRq+B.

Sẽ rất hữu ích khi debug trong các trường hợp node bị treo bằng cách nhấn Alt+SysRq+C, tuy nhiên bạn phải cấu hình kernel crash dump.

5. Thay vì gửi lệnh qua keyboard, bạn có thể ghi kí tự tương ứng vào /proc/sysrq-trigger:

~# echo 1 > /proc/sys/kernel/sysrq ~# echo h > /proc/sysrq-trigger

BÌNH CHỌN:

Hãy bình chọn 5 sao nếu bạn tìm thấy nội dung hữu ích.

Xếp hạng: 0 / 5. Phiếu bầu: 0

Cảm ơn bạn đã bình chọn.

    YÊU CẦU TƯ VẤN DỊCH VỤ