Trong Part 13 của loạt bài LFCS (Linux Foundation Certified Sysadmin) này, chúng tôi đã giải thích cách sử dụng GRUB để sửa đổi hành vi của hệ thống bằng cách chuyển các tùy chọn tới hạt nhân cho quá trình khởi động đang diễn ra.

Tương tự, bạn có thể sử dụng dòng lệnh trong hệ thống Linux đang chạy để thay đổi các tham số nhân thời gian chạy nhất định dưới dạng sửa đổi một lần hoặc vĩnh viễn bằng cách chỉnh sửa tệp cấu hình.

Do đó, bạn được phép bật hoặc tắt các tham số hạt nhân một cách nhanh chóng mà không gặp nhiều khó khăn khi cần thiết do sự thay đổi bắt buộc trong cách hệ thống dự kiến ​​hoạt động.

Giới thiệu Hệ thống tập tin / proc

Đặc điểm kỹ thuật mới nhất của Tiêu chuẩn phân cấp hệ thống tệp chỉ ra rằng /proc đại diện cho phương thức mặc định để xử lý thông tin quy trình và hệ thống cũng như thông tin nhân và bộ nhớ khác. Cụ thể, /proc/sys là nơi bạn có thể tìm thấy tất cả thông tin về thiết bị, trình điều khiển và một số tính năng của hạt nhân.

Cấu trúc bên trong thực tế của /proc/sys phụ thuộc nhiều vào hạt nhân đang được sử dụng, nhưng bạn có thể tìm thấy các thư mục sau bên trong. Đổi lại, mỗi người trong số họ sẽ chứa các thư mục con khác, nơi các giá trị cho từng loại tham số được duy trì:

  1. dev: thông số cho các thiết bị cụ thể kết nối với máy.
  2. fs: cấu hình hệ thống tệp (ví dụ: hạn ngạch và inodes).
  3. kernel: cấu hình dành riêng cho kernel.
  4. net: cấu hình mạng.
  5. vm: sử dụng bộ nhớ ảo của hạt nhân.

Để sửa đổi các tham số thời gian chạy hạt nhân, chúng tôi sẽ sử dụng sysctl. Có thể xem số lượng thông số chính xác có thể được sửa đổi với:

# sysctl -a | wc -l

Nếu bạn muốn xem danh sách đầy đủ các tham số Kernel, chỉ cần thực hiện:

# sysctl -a 

Vì đầu ra của lệnh trên sẽ bao gồm RẤT NHIỀU dòng, chúng ta có thể sử dụng một đường ống dẫn theo sau là ít hơn để kiểm tra nó cẩn thận hơn:

# sysctl -a | less

Chúng ta hãy nhìn vào một vài dòng đầu tiên. Xin lưu ý rằng các ký tự đầu tiên trong mỗi dòng khớp với tên của các thư mục bên trong /proc/sys:

Hiểu hệ thống tập tin Linux / proc

Ví dụ: dòng được đánh dấu:

dev.cdrom.info = drive name:        	sr0

chỉ ra rằng sr0 là một bí danh cho ổ đĩa quang. Nói cách khác, đó là cách hạt nhân sees ổ đĩa đó và sử dụng tên đó để tham chiếu đến nó.

Trong phần sau, chúng tôi sẽ giải thích cách thay đổi more important tham số thời gian chạy hạt nhân trong Linux.

Cách thay đổi hoặc sửa đổi các tham số thời gian chạy của nhân Linux

Dựa trên những gì chúng tôi đã giải thích cho đến nay, có thể dễ dàng thấy rằng tên của một tham số khớp với cấu trúc thư mục bên trong /proc/sys nơi nó có thể được tìm thấy.

Ví dụ:

dev.cdrom.autoclose → /proc/sys/dev/cdrom/autoclose
net.ipv4.ip_forward → /proc/sys/net/ipv4/ip_forward

Kiểm tra các thông số nhân Linux

Điều đó nói rằng, chúng ta có thể xem giá trị của một tham số hạt nhân Linux cụ thể bằng cách sử dụng sysctl theo tên của tham số hoặc đọc tệp được liên kết:

# sysctl dev.cdrom.autoclose
# cat /proc/sys/dev/cdrom/autoclose
# sysctl net.ipv4.ip_forward
# cat /proc/sys/net/ipv4/ip_forward
Kiểm tra các thông số nhân Linux
Kiểm tra các thông số nhân Linux

Đặt hoặc sửa đổi các thông số nhân Linux

Để đặt giá trị cho một tham số hạt nhân, chúng ta cũng có thể sử dụng sysctlnhưng sử dụng -w và theo sau là tên của tham số, dấu bằng và giá trị mong muốn.

Một phương pháp khác bao gồm sử dụng echo để ghi đè lên tệp được liên kết với tham số. Nói cách khác, các phương pháp sau đây tương đương với việc vô hiệu hóa chức năng chuyển tiếp gói tin trong hệ thống của chúng tôi (nhân tiện, giá trị này phải là giá trị mặc định khi một hộp không được cho là chuyển lưu lượng giữa các mạng):

# echo 0 > /proc/sys/net/ipv4/ip_forward
# sysctl -w net.ipv4.ip_forward=0

Điều quan trọng cần lưu ý là các tham số hạt nhân được đặt bằng cách sử dụng sysctl sẽ chỉ được thực thi trong phiên hiện tại và sẽ biến mất khi hệ thống được khởi động lại.

Để đặt các giá trị này vĩnh viễn, hãy chỉnh sửa /etc/sysctl.conf các giá trị mong muốn. Ví dụ: để tắt chuyển tiếp gói trong /etc/sysctl.conf đảm bảo dòng này xuất hiện trong tệp:

net.ipv4.ip_forward=0

Sau đó chạy lệnh sau để áp dụng các thay đổi cho cấu hình đang chạy.

# sysctl -p

Các ví dụ khác về các tham số thời gian chạy hạt nhân quan trọng là:

fs.file-max chỉ định số lượng tệp xử lý tối đa mà hạt nhân có thể phân bổ cho hệ thống. Tùy thuộc vào mục đích sử dụng hệ thống của bạn (web / cơ sở dữ liệu / máy chủ tệp, để đặt tên cho một số ví dụ), bạn có thể muốn thay đổi giá trị này để đáp ứng nhu cầu của hệ thống.

Nếu không, bạn sẽ nhận được một Too many open files thông báo lỗi tốt nhất và có thể ngăn hệ điều hành khởi động ở mức tồi tệ nhất.

Nếu do một sai lầm vô cớ mà bạn thấy mình trong tình huống cuối cùng này, hãy khởi động ở chế độ một người dùng (như được giải thích trong Phần 13 – Định cấu hình và khắc phục sự cố Bộ nạp khởi động Linux Grub) và chỉnh sửa /etc/sysctl.conf như đã hướng dẫn trước đó. Để đặt cùng một giới hạn trên cơ sở mỗi người dùng, hãy tham khảo Phần 14 – Giám sát và Đặt Mức sử dụng Giới hạn Quy trình Linux của loạt bài này.

kernel.sysrq được sử dụng để kích hoạt SysRq trong bàn phím của bạn (còn được gọi là phím màn hình in) để cho phép một số tổ hợp phím nhất định thực hiện các hành động khẩn cấp khi hệ thống không phản hồi.

Giá trị mặc định (16) chỉ ra rằng hệ thống sẽ tôn trọng Alt+SysRq+key và thực hiện các hành động được liệt kê trong sysrq.c tài liệu tìm thấy trong kernel.org (trong đó phím là một chữ cái trong phạm vi bz). Ví dụ, Alt+SysRq+b sẽ khởi động lại hệ thống một cách cưỡng bức (sử dụng biện pháp này như một phương sách cuối cùng nếu máy chủ của bạn không phản hồi).

Cảnh báo! Đừng cố nhấn tổ hợp phím này trên máy ảo vì nó có thể buộc hệ thống máy chủ của bạn khởi động lại!

Khi đặt thành 1, net.ipv4.icmp_echo_ignore_all sẽ bỏ qua các yêu cầu ping và thả chúng ở cấp nhân. Điều này được hiển thị trong hình ảnh bên dưới – lưu ý cách các yêu cầu ping bị mất sau khi thiết lập tham số hạt nhân này:

Chặn yêu cầu Ping trong Linux
Chặn yêu cầu Ping trong Linux

Một cách tốt hơn và dễ dàng hơn để đặt các thông số thời gian chạy riêng lẻ đang sử dụng .confs bên trong /etc/sysctl.dnhóm chúng theo danh mục.

Ví dụ: thay vì đặt net.ipv4.ip_forward=0net.ipv4.icmp_echo_ignore_all=1 Trong /etc/sysctl.confchúng tôi có thể tạo một tệp mới có tên net.conf nội bộ /etc/sysctl.d:

# echo "net.ipv4.ip_forward=0" > /etc/sysctl.d/net.conf
# echo "net.ipv4.icmp_echo_ignore_all=1" >> /etc/sysctl.d/net.conf

Nếu bạn chọn sử dụng phương pháp này, đừng quên xóa những dòng tương tự khỏi /etc/sysctl.conf.

Bản tóm tắt

Trong bài viết này, chúng tôi đã giải thích cách sửa đổi các tham số thời gian chạy hạt nhân, cả liên tục và không liên tục, bằng cách sử dụng sysctl, /etc/sysctl.confvà các tệp bên trong /etc/sysctl.d.

bên trong sysctl tài liệu bạn có thể tìm thêm thông tin về ý nghĩa của nhiều biến hơn. Các tệp đó đại diện cho nguồn tài liệu đầy đủ nhất về các tham số có thể được đặt qua sysctl.

Bạn thấy bài viết này hữu ích? Chúng tôi chắc chắn hy vọng bạn đã làm. Đừng ngần ngại cho chúng tôi biết nếu bạn có bất kỳ câu hỏi hoặc đề xuất nào để cải thiện.