如何以持久和非持久方式更改核心運行參數

在這個 第 13 部分LFCS(Linux 基金會認證系統管理員)系列 中,我們解釋了如何使用 GRUB 通過向內核傳遞選項來修改系統的行為,以便進行正在進行的啟動過程。

同樣地,您可以在運行中的 Linux 系統中使用命令行來修改某些運行時內核參數,作為一次性修改,或通過編輯配置文件來永久修改。

因此,當系統預期的操作方式需要進行必要的更改時,您可以輕鬆地在需要時即時啟用或禁用內核參數。

介紹 /proc 檔案系統

最新的「檔案系統層次標準」規範指出,/proc 代表處理進程和系統信息以及其他內核和記憶體信息的默認方法。特別地,/proc/sys 是您可以找到有關設備、驅動程序和一些內核特性的所有信息的地方。

/proc/sys 的實際內部結構取決於正在使用的內核,但您可能會在其中找到以下目錄。依次,每個目錄都會包含其他子目錄,其中包含每個參數類別的值。

  1. dev:連接到機器的特定設備的參數。
  2. fs:文件系統配置(例如額度和inode)。
  3. kernel:特定於內核的配置。
  4. net:網絡配置。
  5. vm:使用內核的虛擬內存。

要修改內核運行時參數,我們將使用sysctl命令。可以通過以下方式查看可以修改的參數的確切數量:

# sysctl -a | wc -l

如果要查看完整的內核參數列表,只需執行:

# sysctl -a 

由於上述命令的輸出將包含大量行,我們可以使用管道後跟less來仔細檢查它:

# sysctl -a | less

讓我們看一下前幾行。請注意,每行中的第一個字符與/proc/sys內部目錄的名稱匹配:

Understand Linux /proc Filesystem

例如,突出顯示的行:

dev.cdrom.info = drive name:        	sr0

表示sr0是光驅的別名。換句話說,這就是內核“看到”該驅動器並使用該名稱來引用它的方式。

在接下來的部分中,我們將解釋如何在Linux中更改其他“更重要”的內核運行時參數。

如何更改或修改Linux內核運行時參數

根據我們迄今所解釋的,很容易看出參數的名稱與/proc/sys內部目錄結構匹配。

例如:

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

檢查Linux內核參數

我們可以使用sysctl後跟參數名稱或讀取相關檔案來查看特定Linux核心參數的值:

# sysctl dev.cdrom.autoclose
# cat /proc/sys/dev/cdrom/autoclose
# sysctl net.ipv4.ip_forward
# cat /proc/sys/net/ipv4/ip_forward
Check Linux Kernel Parameters

設置或修改Linux核心參數

要為核心參數設置值,我們也可以使用sysctl,但使用-w選項,後跟參數名稱、等號和所需值。

另一種方法是使用echo來覆蓋與參數相關的檔案。換句話說,以下方法等同於在我們的系統中禁用封包轉發功能(預設值應該是當一個盒子不應該在網路之間傳遞流量時):

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

重要的是要注意,使用sysctl設置的核心參數僅在當前會話期間生效,並在系統重新啟動時消失。

要永久設置這些值,請編輯/etc/sysctl.conf並設置所需的值。例如,要在/etc/sysctl.conf中禁用封包轉發,請確保此行出現在檔案中:

net.ipv4.ip_forward=0

然後運行以下命令以應用更改到運行配置。

# sysctl -p

其他重要的核心運行時參數示例包括:

fs.file-max指定核心可以為系統分配的檔案處理數量的最大值。根據系統的預期用途(例如網頁/資料庫/檔案伺服器等),您可能需要更改此值以滿足系統的需求。

否则,您最多會收到「開啟文件过多」的錯誤訊息,最糟的情況是可能會阻止操作系統启动。

如果您因為無心的錯誤而發現自己處在這種情況,請以單一用戶模式启动(如在第13部分 – 配置和解決Linux Grub引导加载程序中說明的那樣),並按照早先的指示編輯/etc/sysctl.conf。為了為每個用戶設定相同的限制,請參考本系列的第14部分 – 監控和設定Linux进程限制使用

kernel.sysrq用來啟用键盘上的SysRq按键(也稱為打印屏幕按键),以便在系統變得無响应時允許某些按鍵組合調用緊急操作。

(16)這個默認值表示系統將尊重Alt+SysRq+key按键組合並執行列在sysrq.c文檔中的操作,該文檔可在kernel.org找到(其中key是b-z範圍內的一個字母)。例如,Alt+SysRq+b將強制重置系統(如果您的伺服器無响应,將此作為最後手段使用)。

警告!請勿在虛擬機上嘗試按下此按鍵組合,因為這可能會強制重新啟動您的主機系統!

當設置為1時,net.ipv4.icmp_echo_ignore_all將忽略ping請求並在內核層級丟棄它們。如下圖所示-設置此內核參數後,請注意ping請求的丟失:

Block Ping Requests in Linux

A better and easier way to set individual runtime parameters is using .conf files inside /etc/sysctl.d, grouping them by categories.

例如,我們可以在/etc/sysctl.conf中創建一個名為net.conf的新文件,而不是設置net.ipv4.ip_forward=0net.ipv4.icmp_echo_ignore_all=1

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

如果您選擇使用此方法,請不要忘記從/etc/sysctl.conf中刪除相同的行。

總結

在本文中,我們解釋了如何使用sysctl/etc/sysctl.conf/etc/sysctl.d的文件修改內核運行時參數,包括持久和非持久的參數。

sysctl文檔中,您可以找到更多有關更多變量含義的信息。這些文件代表可以通過sysctl設置的參數的最完整文檔來源。

您覺得這篇文章有用嗎?我們真誠希望如此。如果您有任何問題或改進建議,請隨時告訴我們。

Source:
https://www.tecmint.com/change-modify-linux-kernel-runtime-parameters/