Phím Magic SysRq SysRq là một tổ hợp phím đặc biệt của nhân Linux cho phép bạn thực thi trực tiếp các lệnh nhân ngay cả khi hệ thống bị treo hoàn toàn.

Trong hướng dẫn này, chúng ta sẽ tìm hiểu chính xác Magic SysRq là gì, khi nào nên sử dụng (và khi nào không), và cuối cùng là cách sử dụng Magic SysRq để khôi phục hệ thống Linux bị treo một cách an toàn.

Tóm tắt nhanh

Magic SysRq là một tổ hợp phím đặc biệt của nhân Linux cho phép bạn thực thi các lệnh nhân trực tiếp ngay cả khi hệ thống đang trong tình trạng hoảng loạn hoặc không phản hồi. Nó có thể lưu dữ liệu, khởi động lại một hệ thống bị treo một cách an toàn, hoặc giúp chẩn đoán các sự cố hệ thống. Nhưng nó cũng có thể gây ra rủi ro bảo mật nếu bị kích hoạt không đúng cách.

Magic SysRq Thực Sự Là Gì?

Magic SysRq là một giao diện nhân Linux. Theo tài liệu nhân Linux https://www.kernel.org/doc/html/latest/admin-guide/sysrq.html, nó được mô tả là một "phím ma thuật" mà bạn có thể nhấn để gửi các lệnh trực tiếp đến nhân, bỏ qua tất cả các tiến trình và giao diện người dùng. Chức năng này được triển khai trong nhân và được kích hoạt thông qua mã drivers/tty/sysrq.c.

Tên gọi này bắt nguồn từ phím SysRq (System Request) trên bàn phím. Trên hầu hết các bàn phím hiện đại, phím này được tích hợp với phím Print Screen.

Khi bạn nhấn tổ hợp phím này, nhân sẽ thực thi các lệnh cấp thấp trực tiếp. Không có quá trình người dùng nào can thiệp. Không có giao diện nào xử lý. Đó là mã nhân chạy trực tiếp.

Nó không phải là:

Magic SysRq không phải là một phím tắt đồ họa. Nó không phải là một chương trình bạn cài đặt và cũng không phải là một công cụ gỡ lỗi có thể gây ra sự cố. Đó là mã nhân được kích hoạt khi cần thiết.

Tại Sao Tính Năng Này Tồn Tại?

Hệ thống có thể gặp sự cố. Phần mềm có thể bị treo. Bộ nhớ có thể bị hỏng và không có gì phản hồi.

Trong những tình huống như vậy, bạn có ba lựa chọn:

  1. Giữ nút nguồn và thực hiện tắt máy cứng (có thể mất dữ liệu)
  2. Chờ hệ thống tự khôi phục (thường là vô ích)
  3. Sử dụng Magic SysRq để tắt máy nhẹ nhàng (có thể mất một số dữ liệu)

Tính năng này được thêm vào Linux để các nhà phát triển nhân và quản trị viên hệ thống có thể gỡ lỗi các sự cố nhân, giết các tiến trình không phản hồi, hoặc thực hiện một kết thúc sạch sẽ khi không còn lựa chọn nào khác.

Cách Kích Hoạt Lệnh Magic SysRq

Mẫu cơ bản rất đơn giản: giữ phím Alt và SysRq, sau đó nhấn một phím lệnh.

Trên hầu hết máy tính để bàn x86:

  • Giữ Alt + SysRq (hoặc Print Screen)
  • Trong khi giữ, nhấn một phím lệnh

Trên một số máy tính xách tay:

  • Giữ Alt + Fn + SysRq
  • Sau đó nhấn phím lệnh

Ví dụ: Để khởi động lại một cách an toàn, giữ Alt + SysRq và nhấn b.

Tài liệu nhân lưu ý rằng hầu hết các bàn phím hiện đại không thể xử lý nhiều lần nhấn phím đồng thời. Nếu điều đó xảy ra, hãy thử: nhấn Alt, nhấn SysRq, nhả SysRq, nhấn phím lệnh, sau đó nhả mọi thứ.

Lưu ý quan trọng: Các phím lệnh có phân biệt chữ hoa chữ thường. Chữ thường r và chữ hoa R là hai lệnh hoàn toàn khác nhau. Tất cả các lệnh SysRq đều chữ thường. Điều này đặc biệt quan trọng khi nhấn /proc/sysrq-trigger trực tiếp.

Các Lệnh SysRq Hữu Ích Nhất

Dưới đây là nhiều lệnh được liệt kê trong tài liệu nhân. Các lệnh thường dùng nhất được đưa ra dưới đây. Tất cả đều là chữ thường:

1. r - Chuyển chế độ bàn phím sang XLATE (unraw)

X và Wayland đặt bàn phím ở chế độ raw, loại trừ đầu vào bàn phím. Lệnh này khôi phục chế độ nhân bình thường để xử lý đầu vào.

2. e - Gửi SIGTERM đến tất cả các tiến trình (trừ init/PID 1)

Yêu cầu các tiến trình tắt một cách nhẹ nhàng.

3. i - Gửi SIGKILL đến tất cả các tiến trình (trừ init/PID 1)

Buộc các tiến trình đóng ngay lập tức.

4. s - Đồng bộ hóa tất cả các hệ thống tệp đã gắn kết

Ghi dữ liệu cache vào đĩa. Lệnh nhân lưu ý: đợi cho đến khi bạn thấy "OK" và "Done" trên màn hình điều khiển.

5. u - Ngắt kết nối hệ thống tệp và gắn lại chỉ đọc

Bảo vệ dữ liệu khỏi bị hỏng thêm trong quá trình tắt máy. Một lần nữa, đợi "OK" và "Done."

6. b - Khởi động lại ngay lập tức

Không đồng bộ hóa hay ngắt kết nối. Điều này tương đương với việc nhấn nút đặt lại.

  1. o - Tắt nguồn hệ thống (nếu phần cứng và nhân hỗ trợ)

  2. f - Gọi trình kill OOM

Giết tiến trình ngốn bộ nhớ nhất. Sẽ không làm hệ thống hoảng loạn nếu không có gì để giết.

  1. h - Hiển thị trợ giúp nhân

Liệt kê tất cả các lệnh SysRq có sẵn.

Chuỗi REISUB: Tắt Máy An Toàn Khi Mọi Thứ Đều Bị Treo

Khi hệ thống của bạn bị treo hoàn toàn, hãy sử dụng chuỗi này để tắt máy một cách an toàn. Mỗi chữ cái đại diện cho một lệnh:

  • r - Chuyển bàn phím khỏi chế độ raw (unraw) và để nhân xử lý các phím tiếp theo
  • e - Kết thúc tất cả các tiến trình một cách nhẹ nhàng (SIGTERM)
  • i - Giết bất kỳ tiến trình nào còn lại (SIGKILL)
  • s - Đồng bộ dữ liệu vào đĩa và đợi hoạt động đĩa lắng xuống
  • u - Ngắt kết nối hệ thống tệp và gắn lại chỉ đọc
  • b - Khởi động lại

Giữ Alt + SysRq trong suốt quá trình. Nhấn mỗi chữ cái một cách tuần tự với khoảng cách 1–2 giây giữa chúng. Đợi mỗi lệnh hoàn thành trước khi nhấn tiếp theo.

Hai cách ghi nhớ chuỗi REISUB:

  • "Reboot Even If System Utterly Broken"
  • "Raising Elephants Is So Utterly Boring"

Cả hai đều ánh xạ đến cùng một chuỗi chữ cái. Sử dụng cách nào bạn thấy dễ nhớ hơn.

Một lưu ý về hệ thống tệp hiện đại:

Trước khi các hệ thống tệp ghi nhật ký (ext4, XFS, btrfs) trở nên phổ biến, REISUB là cần thiết để ngăn ngừa hỏng dữ liệu. Trên các hệ thống tệp hiện đại, các bước s và u vẫn hữu ích để đảm bảo dữ liệu được ghi vào đĩa, nhưng chúng ít quan trọng hơn. Trong thực tế, chạy s và u trước b vẫn là một thói quen tốt để tắt máy an toàn hơn.

Kiểm Tra Xem SysRq Có Được Bật Không

Magic SysRq phải được biên dịch vào nhân với CONFIG_MAGIC_SYSRQ được bật, đây là trường hợp của tất cả các bản phân phối chính. Giá trị mặc định là CONFIG_MAGIC_SYSRQ_DEFAULT_ENABLE trên hầu hết các nhân.

Đây là cách kiểm tra những gì hiện đang hoạt động trên hệ thống của bạn:

cat /proc/sys/kernel/sysrq

Con số này cho bạn biết bitmask nào đang được bật. Theo tài liệu nhân:

  • 0 = Đã tắt hoàn toàn
  • 1 = Tất cả các lệnh được bật
  • >1 = Bitmask cho phép một số chức năng

Các giá trị bitmask phổ biến là:

Các cấu hình phân phối điển hình:

  • Ubuntu: 176 (16+32+128 — sync, remount, reboot) — giá trị chính xác có thể khác; kiểm tra /etc/sysctl.d/10-magic-sysrq.conf trên hệ thống của bạn
  • Debian: 438 (2+4+16+32+128+256)

Một lưu ý về hệ thống quản lý hiện đại:

Trên các bản phân phối hiện đại sử dụng systemd để quản lý giá trị này (cụ thể là systemd và các dẫn xuất), systemd đặt bitmask thành 0x10 (thập lục phân 16) theo mặc định, chỉ bật lệnh sync và vô hiệu hóa việc tắt máy và khởi động lại. Nếu bạn đang sử dụng một hệ thống quản lý systemd và REISUB không hoạt động bình thường, đây có thể là nguyên nhân.

Để bật tất cả các lệnh tạm thời:

echo 1 | sudo tee /proc/sys/kernel/sysrq

Để thay đổi này vĩnh viễn, tạo một tệp cấu hình drop-in:

# /etc/sysctl.d/99-sysrq.conf
kernel.sysrq = 1

Sau đó tải lại:

sudo sysctl --system

Đề xuất đọc thêm:


Khi Nào Thực Sự Nên Sử Dụng Tính Năng REISUB

Sử dụng Magic SysRq khi:

  • Màn hình của bạn bị treo hoàn toàn và không có gì phản hồi
  • Kết nối SSH đã chết nhưng nguồn điện vẫn hoạt động
  • Một tiến trình bị treo đã khóa toàn bộ hệ thống
  • Bạn cần tắt máy nhưng lệnh tắt máy thông thường không hoạt động
  • Bạn đang gỡ lỗi nhân bị hoảng loạn hoặc treo

Không sử dụng khi:

  • Các lệnh tắt máy thông thường vẫn hoạt động
  • Bạn chỉ bị treo một ứng dụng (hãy giết nó một cách bình thường)
  • Ứng dụng đang chạy và bạn chỉ muốn khởi động lại nhẹ nhàng
  • Bạn chưa đọc Ctrl+Alt+F2 để hiểu về bối cảnh trước
  • Vấn đề là một tiến trình đơn lẻ (giết nó bằng các phương pháp thông thường)

Hãy thử các tùy chọn nhẹ nhàng hơn trước. Sử dụng SysRq như là phương sách cuối cùng sau khi nút nguồn.

Rủi Ro Bảo Mật và Hậu Quả

Bất kỳ ai có quyền truy cập vật lý vào máy tính của bạn đều có thể sử dụng Magic SysRq SysRq. Với quyền truy cập vật lý được bật, họ có thể:

  • Tắt máy tính ngay lập tức
  • Giết tất cả các tiến trình đang chạy
  • Truy cập nội dung bộ nhớ thông qua các lệnh gỡ lỗi
  • Kích hoạt một cuộc tấn công

Tài liệu nhân Linux lưu ý rằng "không có cơ chế bảo vệ nào ngăn chặn việc sử dụng phím ma thuật SysRq một cách có hại."

Trên các hệ thống nhiều người dùng hoặc máy chủ sản xuất: Hãy cân nhắc đặt giá trị bitmask thành 176 (chỉ sync + remount + reboot). Điều này vô hiệu hóa các lệnh gỡ lỗi có thể làm lộ nội dung bộ nhớ.

Trên máy tính xách tay cá nhân: Quyền truy cập vật lý đầy đủ (giá trị 1) thường được chấp nhận. Quyền truy cập vật lý vào một máy tính xách tay cá nhân vốn đã là một rủi ro bảo mật đáng kể.

Cảnh báo: Bật tất cả các lệnh SysRq trên các hệ thống công cộng hoặc dùng chung là một rủi ro bảo mật. Kẻ tấn công có quyền truy cập vật lý có thể gây ra sự cố hệ thống, giết tiến trình, hoặc đọc nội dung bộ nhớ thông qua các lệnh gỡ lỗi. Sử dụng bitmask hạn chế trên các hệ thống sản xuất.

Một điểm kỹ thuật quan trọng: Giá trị trong /proc/sys/kernel/sysrq chỉ cho phép các lệnh do bàn phím kích hoạt. Gọi qua /proc/sysrq-trigger luôn được phép bất kể cài đặt bitmask, vì nó yêu cầu quyền root (su) để thực thi.

Giới Hạn Bạn Nên Biết

Magic SysRq rất mạnh mẽ, nhưng nó không thể sửa chữa mọi thứ. Nó chỉ hoạt động "miễn là nhân vẫn còn hoạt động."

Nó sẽ không giúp ích cho:

  • Nhân bị hoảng loạn do lỗi phần cứng mà không có cách khôi phục
  • Phần cứng bị hỏng vật lý
  • CPU bị khóa trong một vòng lặp đặt lại phần cứng
  • Bàn phím bị hỏng hoặc không được kết nối

Nó có thể không hoạt động nếu:

  • Nhân của bạn được biên dịch mà không có CONFIG_MAGIC_SYSRQ
  • Bạn đang sử dụng một máy ảo và phím SysRq không được chuyển tiếp
  • Bạn đang sử dụng môi trường đồ họa không tương thích với tổ hợp phím
  • Systemd đã đặt bitmask thành một giá trị vô hiệu hóa các lệnh bạn cần

Nó không phải là ma thuật: Dù tên gọi là gì, nó chỉ là một cơ chế nhân. Nếu nhân không thể chạy, SysRq cũng không thể chạy.

Sử Dụng SysRq Qua Mạng

Giao diện /proc/sysrq-trigger, có sẵn từ Linux 2.4.21, cho phép bạn kích hoạt các lệnh từ xa. Đây là một lợi thế lớn so với bitmask bàn phím, vì nó hoạt động bất kể cài đặt bitmask và không yêu cầu quyền truy cập vật lý.

Qua SSH (khi kết nối vẫn hoạt động):

echo s | sudo tee /proc/sysrq-trigger  # Sync filesystems
echo u | sudo tee /proc/sysrq-trigger  # Remount read-only
echo b | sudo tee /proc/sysrq-trigger  # Reboot

Chuỗi REISUB đầy đủ trong một lệnh (nhưng hãy nhớ rằng thứ tự vẫn quan trọng, mặc dù nhân có thể xử lý chúng đồng thời):

echo _reisub | sudo tee /proc/sysrq-trigger

Qua một bảng điều khiển ảo: Gửi tín hiệu BREAK, sau đó trong vòng 5 giây, nhấn phím lệnh. Phương pháp này phụ thuộc vào việc tìm đúng BREAK phụ thuộc vào chương trình đầu cuối của bạn.

Xác Minh: Kiểm Tra SysRq Hoạt Động

Trước khi bạn cần nó trong trường hợp khẩn cấp, hãy kiểm tra nó:

  1. Kiểm tra nó đã được bật chưa: cat /proc/sys/kernel/sysrq sẽ hiển thị một giá trị khác không
  2. Thử một lệnh an toàn: Alt + SysRq + h (hiển thị trợ giúp nhân)
  3. Xác nhận nó đã hoạt động: sudo dmesg | tail -20 sẽ hiển thị đầu ra SysRq

Đừng kiểm tra b trừ khi bạn đã sẵn sàng khởi động lại ngay lập tức.

Đừng kiểm tra f trừ khi bạn muốn một tiến trình ngẫu nhiên bị giết bởi trình kill OOM.

Bắt đầu với h. Nếu văn bản trợ giúp xuất hiện trên dmesg, mọi thứ đều hoạt động.

Các Lỗi Thường Gặp Cần Tránh

Lỗi 1: Bỏ qua thứ tự chuỗi REISUB

Mỗi bước đều cần thiết. Nếu bạn nhấn b trước s mà không đồng bộ hóa, bạn sẽ mất dữ liệu.

Lỗi 2: Chỉ sử dụng b để tắt máy

Lệnh b khởi động lại ngay lập tức mà không đồng bộ hóa và không ngắt kết nối. Sử dụng chuỗi REISUB đầy đủ để thay thế.

Lỗi 3: Quên phím Fn trên máy tính xách tay

Nhiều máy tính xách tay cần Fn + SysRq. Hãy thử các tổ hợp phím khác nhau nếu tổ hợp đầu tiên không hoạt động.

Lỗi 4: Kiểm tra các lệnh nguy hiểm trên hệ thống sản xuất

Các lệnh e, i, và b có thể gây ra sự cố toàn bộ hệ thống. Hãy kiểm tra trên một máy ảo hoặc hệ thống dự phòng.

Lỗi 5: Cho rằng nó hoạt động trên mọi phần cứng

Máy ảo, bàn phím không dây, và một số nhân nhất định có thể không chuyển tiếp lệnh SysRq. Hãy xác minh trước khi bạn cần nó.

Lỗi 6: Bật đầy đủ SysRq trên các hệ thống không an toàn

Bất kỳ ai có quyền truy cập vật lý đều có thể gây ra sự cố hệ thống. Sử dụng bitmask hạn chế.

Lỗi 7: Sử dụng chữ hoa trong lệnh qua /proc/sysrq-trigger

Các lệnh có phân biệt chữ hoa chữ thường. Ví dụ, echo B > /proc/sysrq-trigger sẽ không khởi động lại hệ thống của bạn. echo b mới đúng.

Bảng Tra Cứu Nhanh Phím Magic SysRq Linux

Khôi phục hệ thống Linux bị treo
## BẢNG TRA CỨU NHANH PHÍM MAGIC SYSRQ

Tham khảo lệnh khẩn cấp
Alt + SysRq + [phím]  ·  phím có phân biệt chữ hoa chữ thường  ·  luôn dùng chữ thường

CHUỖI REISUB
# khởi động lại an toàn cho hệ thống bị treo

r  chạy bàn phím raw
   tắt chế độ raw → XLATE

e  SIGTERM tất cả tiến trình
   yêu cầu chúng đóng một cách nhẹ nhàng

i  SIGKILL tất cả tiến trình
   buộc giết những gì còn lại

s  đồng bộ hệ thống tệp
   đợi hoạt động đĩa lắng xuống

u  gắn lại chỉ đọc
   bảo vệ hệ thống tệp

b  khởi động lại ngay lập tức
   không đồng bộ hóa thêm sau đó

# cách ghi nhớ
"Reboot Even If System Utterly Broken"
"Raising Elephants Is So Utterly Boring"

CÁC LỆNH KHÁC

o  tắt nguồn (nếu được hỗ trợ)
f  trình kill OOM — giết tiến trình ngốn bộ nhớ
k  SAK — giết tiến trình bảng điều khiển hiện tại
m  đổ thông tin bộ nhớ ra bảng điều khiển
t  đổ tác vụ và luồng
h  trợ giúp — kiểm tra với dmesg

# kiểm tra & bật
cat /proc/sys/kernel/sysrq

# bật tất cả (tạm thời)
echo 1 | sudo tee /proc/sys/kernel/sysrq

# REISUB từ xa qua trigger
echo _reisub | sudo tee /proc/sysrq-trigger

# tham khảo nhanh bitmask

0  vô hiệu hóa
1  tất cả lệnh được bật
176  chỉ sync + remount + reboot
438  mặc định Debian
16  mặc định systemd (chỉ sync!)

Nguồn: kernel.org/doc/html/latest/admin-guide/sysrq.html

Kết Luận

Magic SysRq là một công cụ khẩn cấp. Như đã nêu trong tài liệu, đó là phương sách cuối cùng trước khi nhấn nút nguồn.

Khi được sử dụng đúng cách và đúng thứ tự, REISUB có thể lưu dữ liệu của bạn. Nó tắt máy một cách nhẹ nhàng ngay cả khi lệnh tắt máy thông thường không thể thực hiện được.

Hãy bật REISUB trên máy tính cá nhân của bạn. Hãy hạn chế nó trên các máy chủ sản xuất. Hãy kiểm tra nó trước khi bạn cần nó. Và quan trọng nhất, hãy nhớ rằng các phím lệnh đều là chữ thường.

Magic SysRq sẽ không sửa chữa bất kỳ sự cố phần cứng cơ bản nào. Hãy coi nó như một công cụ khẩn cấp hữu ích. Sử dụng nó khi bạn cần. Bỏ qua nó khi bạn không cần.


Đề xuất đọc thêm:


Tham khảo và đọc thêm: