Phần III · Tham chiếu nhân · Chương 9Part III · Kernel Reference · Chapter 9
Nói chuyện với nhân ngay lúc nó thức dậy Dặn nhân vài câu trước khi nó chạy Talking to the kernel at the moment it wakes
Chương 9 mở Phần III, Kernel Reference — ba chương tra cứu về tùy chọn dòng lệnh, lệnh dựng và tùy chọn cấu hình 21. Ở đây sách đổi giọng: hết diễn giải, chỉ còn danh mục. Kroah-Hartman nói thẳng rằng phần lớn chương dựa trên tài liệu nằm ngay trong cây mã nguồn nhân, do chính các nhà phát triển nhân viết và phát hành theo giấy phép GPL 1.
Từ chương này trở đi, sách biến thành một quyển từ điển tra cứu. Chương 9 liệt kê những câu bạn có thể “dặn” nhân ngay lúc máy bật. Ông Greg Kroah-Hartman nói rõ: phần lớn nội dung lấy từ tài liệu do chính người viết nhân soạn 1. Nhớ nhé: đây là trang để tra, không phải trang để đọc một lèo.
Chapter 9 opens Part III, Kernel Reference — three chapters that catalogue the command-line options, the build commands and the configuration options 21. Here the book changes register: no more exposition, only a catalogue. Kroah-Hartman says plainly that the majority of the chapter is based on the in-kernel documentation for these options, written by the kernel developers and released under the GPL 1.
Việc ông dẫn nguồn ngay câu đầu không phải là khiêm tốn mà là một chỉ dẫn vận hành: danh sách chuẩn sống trong cây mã, không sống trong sách. Sách 2006 chụp lại tệp Documentation/kernel-parameters.txt của dòng nhân 2.6 1; bản kết xuất hiện hành của chính tệp đó nay nằm ở Documentation/admin-guide/kernel-parameters.txt và đọc được trực tuyến tại docs.kernel.org 17. Hai mươi năm cách nhau, nhiều tham số trong sách đã đổi tên, đổi khuôn dạng hoặc biến mất — trang này ghi rõ từng chỗ lệch.
Luận điểm chương 9. Có ba đường truyền tùy chọn vào nhân — lúc dựng, lúc khởi động, và lúc chạy qua /proc và /sys 1. Chương này chỉ bàn đường thứ hai, chia thành các nhóm lô-gic, và nói trước rằng danh sách không đầy đủ: muốn đủ thì phải đọc tệp tài liệu trong cây mã 1.
Ý chính. Có ba lúc bạn có thể chỉnh nhân: lúc dựng nó, lúc bật máy, và lúc máy đang chạy 1. Chương này nói về lúc bật máy. Nhớ nhé: sách không liệt kê hết được, danh sách đầy đủ nằm trong mã nguồn 1.
Chapter 9 thesis. There are three ways to pass options to the kernel — when building it, when starting it, and at runtime by writing to files in /proc and /sys 1. This chapter covers only the second, grouped into logical sections, and states up front that the list is not complete: for that, read the documentation file in the kernel source tree 1.
/proc và /sys khi hệ đã lên.
Chỉnh khi máy đang chạy, bằng cách ghi vào tệp.
By writing to files in the /proc and /sys directories.
Cụm khái niệm 01 · Nhóm 01Concept cluster 01 · Group 01
Ba đường truyền, và bốn luật chi phối cả chương Ba cách dặn nhân, và mấy luật cần nhớ Three routes, and the four rules that govern the whole chapter
Trước khi tra bất kỳ tham số nào, cần nắm bốn điều sách nói ở đoạn mở đầu, vì chúng chi phối toàn bộ 22 nhóm phía sau: tham số truyền lúc khởi động thường đi qua tệp cấu hình của trình khởi động như GRUB hay LILO 1; một số tùy chọn theo kiến trúc và theo trình điều khiển riêng lẻ không được liệt kê 1; không phải tùy chọn nào cũng dùng được, vì hầu hết gắn với một phân hệ và chỉ hoạt động nếu nhân được cấu hình có phân hệ đó dựng sẵn bên trong, đồng thời phần cứng tương ứng phải có mặt 1; và tất cả tham số đều phân biệt chữ hoa chữ thường 1.
Trước khi tra, nhớ bốn điều. Một: bạn gõ tham số vào tệp cấu hình của GRUB hay LILO 1. Hai: sách không liệt kê hết, nhất là tùy chọn riêng của từng loại máy 1. Ba: một tham số chỉ có tác dụng nếu nhân đã được dựng kèm phần tương ứng và máy có thiết bị đó 1. Bốn: viết hoa hay viết thường là khác nhau 1. Nhớ nhé: gõ sai một chữ hoa là nhân bỏ qua luôn.
Before looking up any parameter, hold on to the four things the book says in its opening: boot-time parameters are usually passed from a boot file such as the GRUB or LILO configuration 1; a number of architecture-specific and individual driver options are not listed 1; not all listed options are always available, since most are associated with subsystems and work only if the kernel is configured with those subsystems built in, and depend on the presence of the associated hardware 1; and all of these parameters are case-sensitive 1.
Tham số khởi động (boot parameter). Một chuỗi truyền cho nhân tại thời điểm nhân bắt đầu chạy, trước khi bất kỳ tiến trình người dùng nào tồn tại. Đây là cửa sổ duy nhất để can thiệp vào những quyết định nhân chỉ ra một lần rồi thôi — bộ nhớ dùng bao nhiêu, console nằm ở đâu, đĩa gốc là cái nào.
Tham số khởi động là gì. Là mấy chữ bạn ghi sẵn để nhân đọc ngay khi bật máy. Có những việc nhân chỉ quyết định một lần lúc đó, nên sau này không sửa được nữa. Nhớ nhé: muốn đổi thì phải dặn trước.
Boot parameter. A string handed to the kernel at the moment it starts running, before any user process exists. It is the only window onto decisions the kernel makes once and never revisits — how much memory to use, where the console lives, which disk is the root disk.
lúc dựng → tùy chọn cấu hình
lúc khởi động → GRUB / LILO ← chương 9
lúc chạy → /proc, /sys
lắp nhân → chọn trong cấu hình
bật máy → GRUB ← chương này
đang chạy → ghi vào /proc, /sys
building → configuration options
starting → GRUB / LILO ← Chapter 9
at runtime → /proc, /sys
-
three ways to pass options
Ba cửa — và vì sao chọn đúng cửa mới quan trọng Ba cái cửa, chọn đúng cửa Three doors — and why picking the right one matters
Sách liệt kê ba đường: khi dựng nhân (phần lớn cuốn sách bàn về các tùy chọn này), khi khởi động nhân, và lúc chạy bằng cách ghi vào tệp trong
/procvà/sys1. Ba cửa này không thay thế nhau: cửa thứ nhất quyết định thứ gì tồn tại trong nhân, cửa thứ hai quyết định thứ đó khởi động ra sao, cửa thứ ba chỉ chỉnh được những gì nhân cố tình để ngỏ sau khi đã lên.Ba cửa: lúc lắp nhân, lúc bật máy, và lúc máy đang chạy 1. Cửa một quyết định nhân có tính năng đó không. Cửa hai quyết định tính năng đó bắt đầu thế nào. Cửa ba chỉ vặn được vài núm mà nhân cho phép. Nhớ nhé: chọn nhầm cửa thì gõ bao nhiêu cũng không có tác dụng.
The book lists three routes: when building the kernel (most of the book discusses these options), when starting the kernel, and at runtime by writing to files in the
/procand/sysdirectories 1. They are not interchangeable: the first decides what exists in the kernel, the second decides how that thing starts, the third adjusts only what the kernel deliberately leaves open once it is up.Bạn thấy nó ở đâu. Mỗi lần bạn sửa dòng
GRUB_CMDLINE_LINUXrồi cập nhật cấu hình GRUB, bạn đang dùng cửa thứ hai — và hiệu lực chỉ có sau lần khởi động kế tiếp.Gặp ở đâu. Khi bạn sửa dòng tham số trong GRUB rồi khởi động lại, đó là cửa thứ hai. Nhớ nhé: phải khởi động lại mới ăn.
Where you see it. Every time you edit a
GRUB_CMDLINE_LINUXline and regenerate the GRUB config, you are using the second door — and it takes effect only at the next boot. -
module-specific options
Nhóm 01 · Tham số cho module dựng sẵn — cú pháp dấu chấm Nhóm 01 · Dặn riêng từng bộ phận Group 01 · Module-Specific Options — the dot syntax
Ngoài các tùy chọn liệt kê trong chương, tham số của những module đã được dựng thẳng vào nhân cũng truyền được trên dòng lệnh; module nạp động thì không, vì lúc nhân khởi động chúng chưa nằm trong bộ nhớ 2. Cú pháp là tên module, một dấu chấm, rồi tên tham số 2. Ví dụ của sách: module
usbcorenhận tham sốblinkenlightsđể nháy đèn trên mọi hub USB 2.0 được hỗ trợ — “đừng bao giờ nói các nhà phát triển nhân không có khiếu hài hước” 2.Nhân có nhiều bộ phận nhỏ gọi là module. Bộ phận nào đã gắn sẵn trong nhân thì dặn được ngay lúc bật máy, theo kiểu
tênmodule.thamsố2. Bộ phận nạp sau thì không, vì lúc đó nó chưa có trong máy 2. Sách kể một ví dụ vui:usbcore.blinkenlights=1làm đèn trên cổng USB nháy 2. Nhớ nhé: dấu chấm nối tên bộ phận với tên tham số.Beyond the options listed in the chapter, parameters for modules built into the kernel can also be passed on the command line; dynamically loaded modules cannot, since they are not in memory when the kernel boots 2. The syntax is the module name, a dot, then the parameter 2. The book's example: the
usbcoremodule acceptsblinkenlightsto display flashing lights on all supported USB 2.0 hubs — “don't ever say the kernel developers don't have a sense of humor” 2.Bạn thấy nó ở đâu.
modprobe usbcore blinkenlights=1khi nạp động, vàusbcore.blinkenlights=1trên dòng lệnh khởi động cho cùng một kết quả 2. Phần lớn tùy chọn module dựng sẵn còn đổi được lúc chạy qua tệp tương ứng dưới/sys/module— ở đây là/sys/module/usbcore/blinkenlights2.Gặp ở đâu. Hai cách cho cùng kết quả:
modprobe usbcore blinkenlights=1hoặcusbcore.blinkenlights=1lúc bật máy 2. Còn sửa nóng được qua/sys/module/usbcore/blinkenlights2. Nhớ nhé: cùng một núm, ba chỗ vặn.Where you see it.
modprobe usbcore blinkenlights=1when loading dynamically, andusbcore.blinkenlights=1on the boot line, achieve the same effect 2. Most built-in module options can also be changed at runtime through the matching file under/sys/module— here/sys/module/usbcore/blinkenlights2.Hai mươi năm sau: vẫn nguyên
Đây là một trong số ít chỗ của chương không hề dịch chuyển. Tài liệu
kernel-parametershiện hành vẫn dùng đúng ví dụusbcore.blinkenlights=1để minh họa cú pháp tiền tố tên module, và vẫn nêu cặp song hành vớimodprobe usbcore blinkenlights=117.Một bổ sung hiện đại
Tài liệu hiện hành nói thêm một điều sách 2006 không nói:
modprobecó đọc/proc/cmdlinevà nhặt tham số module khi nạp, nên dòng lệnh khởi động cũng dùng được cho cả module nạp động 17. Nói cách khác, giới hạn mà sách nêu đã được nới ra ở tầng công cụ người dùng, không phải ở tầng nhân. -
availability and case
Không phải tham số nào cũng “có thật” trên máy bạn Có tham số chỉ có trên một số máy Not every parameter is “real” on your machine
Đây là điều làm người mới hụt hẫng nhất. Một tham số gõ đúng chính tả vẫn có thể hoàn toàn vô tác dụng, vì hầu hết tham số gắn với một phân hệ và chỉ hoạt động khi nhân được cấu hình có phân hệ đó dựng vào, đồng thời phần cứng liên quan phải hiện diện 1. Nhân không báo lỗi: nó chỉ bỏ qua chuỗi nó không nhận ra.
Gõ đúng chữ mà vẫn không có gì xảy ra là chuyện bình thường. Lý do: tham số đó thuộc về một phần mà nhân của bạn không có, hoặc máy bạn không có thiết bị đó 1. Nhân im lặng bỏ qua, không kêu ca gì. Nhớ nhé: không thấy báo lỗi không có nghĩa là đã chạy.
This is what trips up newcomers most. A correctly spelled parameter can still do absolutely nothing, because most are associated with subsystems and work only if the kernel is configured with those subsystems built in, and they depend on the presence of the associated hardware 1. The kernel does not complain: it simply ignores a string it does not recognise.
Bạn thấy nó ở đâu. Đọc
/proc/cmdlineđể xem nhân thực sự nhận chuỗi nào; nhưng chuỗi có mặt ở đó không chứng minh nhân đã hiểu nó. Bằng chứng thật nằm trong nhật ký khởi động của chính phân hệ liên quan.Gặp ở đâu. Xem
/proc/cmdlineđể biết nhân nhận được gì. Nhưng phải xem nhật ký khởi động mới biết nó có hiểu không. Nhớ nhé: nhận được khác với hiểu được.Where you see it. Read
/proc/cmdlineto see which string the kernel actually received; but a string appearing there does not prove the kernel understood it. The real evidence is in the boot log of the subsystem concerned.Luật chữ hoa
Sách khép đoạn mở đầu bằng một câu ngắn: tất cả tham số này đều phân biệt chữ hoa chữ thường 1. Nó giải thích vì sao có đúng một tham số một chữ cái viết hoa trong cả chương —
S, chạy init ở chế độ một người dùng 9 — và vì saosthường không làm gì cả.Gạch nối và gạch dưới
Tài liệu hiện hành thêm một quy ước mà sách 2006 không nêu: trong tên tham số, gạch nối và gạch dưới là tương đương, nên
log_buf_len=1Mvàlog-buf-len=1Mlà một; dấu nháy kép dùng để bọc giá trị có khoảng trắng 17.
Cụm khái niệm 02 · Nhóm 02–07Concept cluster 02 · Groups 02–07
Sáu nhóm lõi: console, ngắt, bộ nhớ, ngủ, CPU, lập lịch Sáu nhóm về phần lõi của máy Six core groups: console, interrupts, memory, suspend, CPU, scheduler
Sáu nhóm đầu tiên chạm vào những gì nhân phải quyết định trước khi bất kỳ thứ gì khác chạy được: nói ra ở đâu, nhận ngắt thế nào, dùng bao nhiêu bộ nhớ, và chia thời gian CPU ra sao. Đây cũng là sáu nhóm bạn sẽ dùng nhiều nhất khi máy không khởi động được — vì chúng là những núm duy nhất còn vặn được khi chưa có gì để gõ lệnh.
Sáu nhóm đầu là những việc nhân phải quyết ngay: nói ra màn hình nào, nghe thiết bị thế nào, dùng bao nhiêu bộ nhớ, chia việc cho CPU ra sao. Đây là mấy núm bạn vặn khi máy không lên nổi. Nhớ nhé: lúc chưa gõ lệnh được thì chỉ còn mấy núm này.
The first six groups touch what the kernel must settle before anything else can run: where it speaks, how it takes interrupts, how much memory it uses, and how it divides CPU time. They are also the six you reach for when a machine will not boot — because they are the only knobs left when there is no shell to type into.
Console của nhân. Nơi thông báo gỡ lỗi và lỗi của nhân được hiển thị 3. Nếu console sai chỗ, mọi chẩn đoán khác đều mù — nên nhóm Console đứng đầu danh sách không phải ngẫu nhiên.
Console là gì. Là chỗ nhân “nói” ra: báo lỗi, báo tiến trình khởi động 3. Đặt sai chỗ thì bạn không thấy nó nói gì. Nhớ nhé: sửa máy thì việc đầu tiên là nghe được máy nói.
Kernel console. Where kernel debugging and error information are displayed 3. If the console points at the wrong place, every other diagnostic is blind — so the Console group heading the list is no accident.
02 console · 03 ngắt · 04 bộ nhớ
05 ngủ · 06 CPU · 07 lập lịch
→ “máy không lên” bắt đầu từ đây
console · ngắt · bộ nhớ
ngủ · CPU · chia việc
→ máy không lên thì xem đây
02 console · 03 interrupt · 04 memory
05 suspend · 06 CPU · 07 scheduler
→ “it will not boot” starts here
-
console options
Nhóm 02 · Console — để nhân có chỗ mà nói Nhóm 02 · Console — cho nhân chỗ nói Group 02 · Console — giving the kernel somewhere to speak
Trục chính là
console=:ttyndùng console ảo thứ n;ttySn[,options]dùng cổng nối tiếp, với tùy chọn dạngbbbbpnf— tốc độ truyền, chẵn lẻ (n,ohoặce), số bit, và điều khiển luồng (rcho RTS, hoặc bỏ trống) — mặc định9600n83. Quanh nó là bộ dụng cụ chẩn đoán:debugđặt mức nhật ký về mức gỡ lỗi 3;quietđặt mức mặc định vềKERN_WARNING(4), chặn mọi thông báo trừ loại cực kỳ nghiêm trọng 3;loglevel=đặt mức cụ thể, với thang tám bậc từ0 (KERN_EMERG)“hệ thống không dùng được” tới7 (KERN_DEBUG)3;earlyprintk=hiện những thông báo trước khi console truyền thống được khởi tạo, và nối thêm,keepđể chúng không bị tắt khi console thật tiếp quản 3;log_buf_len=n[KMG]đặt kích thước bộ đệm nhật ký, n phải là lũy thừa của 2 3;initcall_debuglần theo mọi hàm nhân gọi lúc khởi tạo, hữu ích để biết nhân chết ở đâu 3; vàtimegắn dấu thời gian vào mọi dòng nhật ký 3.Núm chính là
console=: chọn màn hình ảo (tty1) hay cổng nối tiếp (ttyS0), mặc định9600n83. Thêmdebugđể nhân nói nhiều hơn,quietđể nó im gần hết 3,loglevel=để chọn mức ồn từ 0 đến 7 3. Cònearlyprintk=cho bạn nghe cả những câu nhân nói rất sớm, lúc màn hình thường chưa sẵn sàng 3. Nhớ nhé: máy chết sớm thì dùngearlyprintk.The spine is
console=:ttynuses virtual console n;ttySn[,options]uses a serial port, with options of the formbbbbpnf— baud rate, parity (n,oore), number of bits, and flow control (rfor RTS, or omitted) — defaulting to9600n83. Around it sits the diagnostic kit:debugsets the kernel log level to debug 3;quietsets it toKERN_WARNING(4), suppressing everything but the extremely serious 3;loglevel=picks a level on the eight-step scale from0 (KERN_EMERG), “the system is unusable”, to7 (KERN_DEBUG)3;earlyprintk=shows messages that precede the initialisation of the traditional console, with,keepappended so they survive the real console taking over 3;log_buf_len=n[KMG]sizes the log buffer, n a power of 2 3;initcall_debugtraces every function called during initialisation, useful for finding where the kernel is dying 3; andtimeprefixes every log line with a timestamp 3.Bạn thấy nó ở đâu.
netconsole=gửi nhật ký nhân qua gói UDP sang máy khác — hữu ích khi máy không có cổng nối tiếp; sách ghi cổng nguồn mặc định 6665 và cổng đích mặc định 6666, nghe bằngsyslogdhoặcnetcat -u -l -p port3. Tài liệu netconsole hiện hành giữ nguyên hai cổng mặc định đó và mở rộng cú pháp: thêm tiền tố+để bật console mở rộng,rđể gắn phiên bản nhân vào thông báo, chọn giao diện bằng địa chỉ MAC, dùng IPv6, và ghi tới nhiều máy nhận cùng lúc 23.Gặp ở đâu. Máy không có cổng nối tiếp thì dùng
netconsole=: nhân gửi nhật ký qua mạng sang máy khác, cổng mặc định 6665 và 6666 3. Bên kia mởnetcat -u -l -p portđể nghe 3. Bây giờ nó còn gửi được cho nhiều máy và dùng được IPv6 23. Nhớ nhé: nghe từ xa thì xem được cả lúc máy sắp chết.Where you see it.
netconsole=sends kernel console data across the network as UDP packets — useful when there is no serial port; the book gives a default source port of 6665 and a default target port of 6666, listened to withsyslogdornetcat -u -l -p port3. Today's netconsole documentation keeps both defaults and widens the syntax: a leading+enables extended console support,rprepends the kernel release to the message, the interface may be selected by MAC address, IPv6 is supported, and several remote agents can be logged to at once 23.Còn nguyên sau hai mươi năm
Nhóm Console già đi rất chậm. Tài liệu hiện hành vẫn mô tả
console=với đúng khuôn dạngbbbbpnfvà mặc định9600n8, vẫn giữtty<n>,ttyS<n>vàttyUSB017.quiet,debug,loglevel=,log_buf_len=,initcall_debugvàearlyprintk=đều còn nguyên, chỉ được bổ sung thêm nhiều dạng đích mới 17.Hai chỗ đã lệch
Thứ nhất, tham số
timecủa sách nay mang tênprintk.time=, nhận giá trị lô-gic, và mô tả vẫn là “hiện dữ liệu thời gian gắn vào mỗi dòng thông báo printk” 17. Thứ hai,kstack=n— số từ của ngăn xếp in ra trong bản kết xuất oops 3 — không còn trong danh sách tham số hiện hành 17; hãy coi nó là tham số riêng của dòng 2.6. -
interrupt options
Nhóm 03 · Ngắt — khi phần sụn nói dối Nhóm 03 · Ngắt — khi máy báo sai Group 03 · Interrupts — when the firmware lies
Sách nói ngắt là một khía cạnh phức tạp của hành vi nhân, và các tùy chọn khởi động chủ yếu nằm ở giao diện giữa nhân và phần cứng xử lý ngắt, chẳng hạn APIC của chip Intel 4. Bộ công tắc:
apic=[quiet|verbose|debug]đổi độ chi tiết của phân hệ APIC lúc khởi động, mặc địnhquiet4;noapicchặn nhân dùng bất kỳ IOAPIC nào 4;lapicbật APIC cục bộ ngay cả khi BIOS đã tắt nó, cònnolapicbảo nhân đừng dùng 4. Hai tham số cứu hộ đáng nhớ nhất:irqfixup— khi một ngắt không được xử lý, tìm khắp các trình xử lý đã biết; vàirqpoll— làm như trên và kiểm tra mọi trình xử lý ở mỗi ngắt đồng hồ; cả hai nhằm cứu những hệ có phần sụn hỏng nặng 4.Ngắt là cách thiết bị “gọi” nhân khi có việc. Khi phần sụn của máy báo sai, ngắt lạc đường và máy treo. Nhóm này là bộ công tắc cứu hộ:
noapic,nolapicđể tắt bớt bộ điều phối ngắt 4;irqfixupvàirqpollđể nhân tự đi tìm chủ nhân của ngắt lạc 4. Nhớ nhé: máy treo ngay lúc khởi động thì thửirqpolltrước.The book calls interrupts a complex aspect of kernel behaviour, with the boot options dealing mostly with the interface between the kernel and the hardware that handles interrupts, such as the Intel chip's APIC 4. The switchboard:
apic=[quiet|verbose|debug]controls how much the APIC subsystem says while booting, defaulting toquiet4;noapicprevents the kernel using any IOAPICs present 4;lapicenables the local APIC even if the BIOS disabled it, andnolapictells the kernel not to use it 4. The two rescue parameters worth memorising:irqfixup— when an interrupt is not handled, search all known handlers for it; andirqpoll— do that and check all handlers on each timer interrupt; both are intended to get systems with badly broken firmware running 4.Bạn thấy nó ở đâu.
noirqdebugtắt lô-gic mà nhân dùng để phát hiện và vô hiệu hóa nguồn ngắt không được xử lý — lô-gic đó tồn tại vì ngắt bỏ hoang làm phần còn lại của nhân mất khả năng đáp ứng 4. Đó chính là tình huống “máy bỗng nhiên ì ạch sau khi cắm một thiết bị lạ”.Gặp ở đâu. Có loại ngắt không ai nhận, cứ dội liên tục làm máy chậm hẳn. Nhân tự phát hiện và tắt nó đi;
noirqdebuglà nút tắt cái lô-gic tự động ấy 4. Nhớ nhé: máy chậm bất thường sau khi cắm thiết bị thì nghĩ tới ngắt.Where you see it.
noirqdebugdisables the logic by which the kernel detects and disables unhandled interrupt sources — logic that exists because they can wreck the responsiveness of the rest of the kernel if left unchecked 4. That is exactly the “the machine went sluggish after I plugged that thing in” case. -
memory options
Nhóm 04 · Bộ nhớ — nói dối nhân một cách có chủ đích Nhóm 04 · Bộ nhớ — bảo nhân dùng bao nhiêu Group 04 · Memory — lying to the kernel on purpose
Nhân chia bộ nhớ thành nhiều khối và loại khác nhau cho các mục đích khác nhau; nhóm này cho bạn vặn kích thước và thiết lập của chúng 5. Đáng nhớ nhất:
mem=n[KMG]ép lượng bộ nhớ nhân dùng, và sách cảnh báo rằng dùng nó không kèmmemmap=có thể khiến thiết bị PCI bị đặt vào địa chỉ thuộc vùng RAM không dùng 5.memmap=exactmapkhai báo một bản đồ bộ nhớ chính xác;memmap=n[KMG]@start[KMG]ép dùng một vùng cụ thể 5.highmem=nép vùng highmem có đúng kích thước n, kể cả trên máy vốn không có vùng đó 5.vmalloc=n[KMG]ép vùng vmalloc — mặc định 128 MB trên x86 — lớn hoặc nhỏ hơn 5.noexec=[on|off]bật/tắt khả năng ánh xạ vùng nhớ thành không thực thi được, mặc định bật 5, vànorandmapstắt ngẫu nhiên hóa không gian địa chỉ, tương đương ghi0vào/proc/sys/kernel/randomize_va_space5.Nhóm này bảo nhân dùng bao nhiêu bộ nhớ và dùng chỗ nào.
mem=512Mbảo nhân coi như máy chỉ có ngần ấy 5.vmalloc=chỉnh một vùng nhớ riêng, mặc định 128 MB trên máy x86 5.norandmapstắt việc xáo trộn vị trí chương trình trong bộ nhớ 5. Nhớ nhé: bảo nhân dùng ít bộ nhớ hơn là cách nhanh nhất để thử xem thanh RAM nào hỏng.The kernel handles memory in many chunks and categories for different purposes; this group lets you tweak their sizes and settings 5. The ones worth remembering:
mem=n[KMG]forces the amount of memory the kernel uses, and the book warns that using it withoutmemmap=could cause PCI devices to be placed at addresses belonging to unused RAM 5.memmap=exactmapdeclares an exact memory map;memmap=n[KMG]@start[KMG]forces a specific region into use 5.highmem=nforces the highmem zone to an exact size, even on boxes that have no highmem zone by default 5.vmalloc=n[KMG]forces the vmalloc area — 128 MB on x86 — larger or smaller 5.noexec=[on|off]enables or disables the kernel's ability to map memory non-executable, enabled by default 5, andnorandmapsturns off address space randomisation, equivalent to writing0to/proc/sys/kernel/randomize_va_space5.Bạn thấy nó ở đâu.
hugepages=nđặt số trang hugetlb tối đa; sách mô tả tính năng này là cho phép Linux dùng trang 4 MB, “gấp một nghìn lần kích thước mặc định” 5. Tài liệu hiện hành giữ tên tham số nhưng định nghĩa lại theo kích thước trang khổng lồ mặc định của nền tảng, và cho phép dạng theo nút NUMA 17 — tức con số 4 MB là của x86 năm 2006, không phải một hằng số.Gặp ở đâu. Máy chủ cơ sở dữ liệu hay dùng “trang khổng lồ” để đỡ tốn công tra địa chỉ. Sách nói trang đó là 4 MB, to gấp nghìn lần trang thường 5; ngày nay kích thước tùy loại máy 17. Nhớ nhé: con số trong sách là của năm 2006.
Where you see it.
hugepages=nsets the maximum number of hugetlb pages; the book describes the feature as letting Linux use 4 MB pages, “one thousand times the default size” 5. Today's documentation keeps the name but defines it against the platform's default huge page size, and allows a per-NUMA-node format 17 — so the 4 MB figure belongs to x86 in 2006, not to the parameter.Cái còn, cái mất
Còn nguyên và gần như nguyên văn:
highmem=nn[KMG],vmalloc=nn[KMG](vẫn ghi 128 MB trên x86 và arm32, kèm danh sách dài các kiến trúc không có tham số này),mem=nopentium, cả năm biến thểmemmap=,ihash_entries=,reserve=,norandmapsvàvdso=17. Đã rụng:max_addr=n— bỏ qua mọi bộ nhớ vật lý từ địa chỉ n trở lên 5 — không còn trong danh sách hiện hành 17.Một tham số đã đổi hình
noexec=[on|off]của sách 5 không còn tồn tại dưới tên trần đó; cái còn lại trong tài liệu hiện hành lànoexec32=[on|off]trên x86-64, chỉ tác động tới tệp thực thi 32 bit 17. Tương tự,vdso=nay là bí danh củavdso32=trên x86-32, còn nơi khác thìvdso=1bật (mặc định) vàvdso=0tắt 17 — trùng ý sách 5, khác chi tiết. -
suspend options
Nhóm 05 · Ngủ — chỉ hai tham số, nhưng đúng hai tham số ấy Nhóm 05 · Ngủ — chỉ có hai núm Group 05 · Suspend — only two parameters, but exactly the right two
Nhóm nhỏ nhất trong chương.
resume=suspend_devicecho nhân biết thiết bị đĩa nào chứa ảnh nhân đã ngủ; nếu dữ liệu trên ảnh là một ảnh nhân hợp lệ do phân hệ software suspend tạo ra, nhân sẽ nạp nó vào bộ nhớ và chạy nó thay vì tiếp tục quá trình khởi động bình thường 6. Sách kèm một cảnh báo tinh tế:suspend_devicelà tên thiết bị của nhân, có thể khác với cái mà không gian người dùng nghĩ, nên phải cẩn thận 6. Ngược lại,noresumetắt chức năng khôi phục, và mọi phân vùng hoán đổi từng giữ ảnh hệ thống sẽ trở lại thành không gian hoán đổi dùng được 6.Nhóm này chỉ có hai núm.
resume=chỉ cho nhân biết ảnh “máy đang ngủ” nằm ở ổ nào, để nhân đánh thức máy thay vì khởi động lại từ đầu 6.noresumelàm ngược lại: quên ảnh đó đi, khởi động mới hoàn toàn 6. Nhớ nhé: máy đánh thức hỏng thì thêmnoresumeđể lên được đã.The smallest group in the chapter.
resume=suspend_devicetells the kernel which disk device holds the suspended kernel image; if the data there is a valid image created by the software suspend subsystem, it is loaded into memory and run instead of continuing the normal boot 6. The book adds a subtle warning:suspend_deviceis the kernel device name, which might differ from what userspace thinks it is, so be careful 6. Conversely,noresumedisables the resume functionality, and any swap partitions that were holding system images revert to available swap space 6.Bạn thấy nó ở đâu. Cảnh báo “tên thiết bị của nhân khác tên của không gian người dùng” đã được giải quyết theo hướng sách gợi ý: tài liệu hiện hành cho
resume=nhận cảPARTUUID=<uuid>, cặp số chính/phụ, hoặc giá trị thập lục phân 17 — UUID chính là câu trả lời cho việc tên/dev/sda2có thể đổi giữa hai lần khởi động.Gặp ở đâu. Tên ổ đĩa có thể đổi giữa các lần bật máy, nên sách dặn phải cẩn thận 6. Nay có cách chắc hơn: ghi
resume=PARTUUID=…, một mã không đổi 17. Nhớ nhé: gọi ổ bằng mã, đừng gọi bằng tên.Where you see it. The “kernel name differs from the userspace name” warning has been answered the way the book implies it should be: current documentation lets
resume=takePARTUUID=<uuid>, a major:minor pair, or a hex value 17 — a UUID being precisely the answer to/dev/sda2moving between boots. -
cpu options
Nhóm 06 · CPU — vá quanh những con chip nói sai về chính mình Nhóm 06 · CPU — khi chip tự khai sai Group 06 · CPU — working around chips that misreport themselves
Nhóm này kiểm soát một dải rộng hành vi về thời gian, cách dùng bộ xử lý trên hệ đa xử lý, và các vấn đề khác của bộ xử lý 7. Chủ đề ngầm của nó là phần cứng khai sai:
cachesize=ntồn tại vì “đôi khi lỗi phần cứng CPU khiến chúng báo sai kích thước bộ đệm”, và với một số CPU thì không thể xác định được giá trị đúng 7. Tương tự:no387luôn dùng thư viện mô phỏng 387 kể cả khi có bộ đồng xử lý toán học 387 7;no-hlttồn tại vì lệnhHLTkhông chạy đúng trên một số bộ xử lý x86 7. Nhóm công tắc lớn:nosmpbảo nhân SMP hành xử như nhân đơn xử lý 7,maxcpus=ngiới hạn số bộ xử lý dùng đến 7,notsctắt bộ đếm dấu thời gian 7,mcebật vànomcetắt tính năng ngoại lệ kiểm tra máy 7.Nhóm này để vá những con chip khai sai về chính mình. Ví dụ
cachesize=có vì đôi khi CPU báo sai kích thước bộ nhớ đệm 7. Cònnosmpbảo nhân chỉ dùng một nhân xử lý 7,maxcpus=ngiới hạn dùng n nhân 7. Nhớ nhé: nghi máy nhiều nhân gây lỗi thì thửnosmpđể khoanh vùng.This group controls a wide range of behaviour regarding timing, processor use on multiprocessor systems, and other processor issues 7. Its quiet theme is hardware that misreports itself:
cachesize=nexists because “sometimes CPU hardware bugs make them report the cache size incorrectly”, and for some CPUs the correct size cannot be determined at all 7. Likewiseno387always uses the 387 math emulation library even when a 387 coprocessor is present 7;no-hltexists because theHLTinstruction does not work correctly on some x86 processors 7. The big switches:nosmptells an SMP kernel to act as a uniprocessor kernel 7,maxcpus=ncaps the processors used 7,notscdisables the timestamp counter 7,mceenables andnomcedisables the machine check exception feature 7.Bạn thấy nó ở đâu.
lpj=nđặt sẵn “số vòng lặp trên mỗi jiffy”, giúp nhân khỏi mất thời gian tự dò lúc khởi động 7. Sách đóng khung cảnh báo mạnh nhất của cả chương ở đây: trên hệ SMP giá trị này áp cho mọi CPU, giá trị sai gây trễ sai trong nhân, dẫn tới lỗi I/O khó đoán, và trong trường hợp cực đoan — tuy khó xảy ra — có thể làm hỏng phần cứng 7. Tài liệu hiện hành giữ tham số và lượng hóa phần lợi: việc tự dò tốn tới 250 ms mỗi CPU 17.Gặp ở đâu.
lpj=giúp máy khởi động nhanh hơn một chút vì nhân khỏi phải đo lại 7. Nhưng sách cảnh báo rất nặng: đặt sai có thể gây lỗi đọc ghi khó hiểu, và hiếm khi thôi, có thể hỏng cả phần cứng 7. Nhớ nhé: núm này tiết kiệm được chút xíu mà rủi ro thì to, đừng vặn bừa.Where you see it.
lpj=npresets the loops per jiffy so the kernel can skip the time-consuming boot-time autodetection 7. The book boxes the chapter's sharpest warning here: on SMP systems the value applies to all CPUs, an incorrect value causes incorrect delays in the kernel leading to unpredictable I/O errors, and in extreme cases — though unlikely — it might damage your hardware 7. Current documentation keeps the parameter and quantifies the prize: autodetection costs up to 250 ms per CPU 17.Hai chỗ sách gõ nhầm
Bản in của chương có hai lỗi đánh máy đáng chú ý: mục
lpjghi cú pháp là “lpg=n” trong dòng khuôn dạng dù tiêu đề mục làlpj7, và mục CPU cuối cùng đặt tiêu đềmax_cpusnhưng khuôn dạng lại làmaxcpus=n7. Tên đúng làlpj=vàmaxcpus=, đúng như tài liệu hiện hành ghi 17.Những gì thời gian đã lấy đi
no387,no-hlt,nosepvànotscđều không còn trong danh sách tham số hiện hành 17.nmi_watchdog=thì còn nhưng đã đổi nghĩa hẳn: sách mô tả bốn giá trị 0–3 theo kiểu chọn APIC 7, còn tài liệu hiện hành chỉ nhận0hoặc1để tắt/bật bộ phát hiện treo cứng, cộng thêm các từ khóapanic,nopanicvàrNNN17. Còn nguyên:cachesize=,nofxsr,nosmp,maxcpus=,nomce17. -
scheduler options
Nhóm 07 · Lập lịch — nhóm nguy hiểm nhất, và nhóm biến mất nhiều nhất Nhóm 07 · Chia việc — nhóm dễ hỏng nhất Group 07 · Scheduler — the most dangerous group, and the one that vanished
Sách mở nhóm bằng một lời rào: các tùy chọn này vặn tham số dùng để ra quyết định lập lịch, và phần lớn đòi hỏi hiểu biết sâu sát về cách lập lịch hoạt động trong Linux 8. Tham số bền nhất là
isolcpus=cpu_number[,cpu_number,...]: loại các CPU chỉ định khỏi việc cân bằng SMP chung và khỏi thuật toán lập lịch, và cách duy nhất để đưa một tiến trình vào hoặc ra khỏi CPU “bị cô lập” là qua các lời gọi hệ thống về ái lực CPU 8. Sách nói rõ đây là cách ưu tiên để cô lập CPU, vì cách thay thế — tự đặt mặt nạ CPU cho mọi tác vụ trong hệ — có thể gây lỗi và làm bộ cân bằng tải hoạt động kém 8.Nhóm này chỉnh cách nhân chia việc cho các CPU, và sách nói ngay là rất khó dùng đúng 8. Núm đáng nhớ là
isolcpus=: giữ riêng vài nhân CPU, không cho nhân tự ý đẩy việc vào đó 8. Nhớ nhé: muốn một CPU chỉ làm đúng một việc thì dùngisolcpus, đừng tự đặt tay.The book opens this group with a fence: these options tweak the parameters used to make scheduling decisions, and most depend on an intimate understanding of how scheduling works in Linux 8. The most durable is
isolcpus=cpu_number[,cpu_number,...]: remove the specified CPUs from general kernel SMP balancing and scheduler algorithms, the only way onto or off an “isolated” CPU being the CPU affinity syscalls 8. The book calls this the preferred way to isolate CPUs, since the alternative — manually setting the CPU mask of all tasks in the system — can cause problems and suboptimal load-balancer performance 8.Bạn thấy nó ở đâu.
isolcpus=vẫn sống và đã lớn hẳn: tài liệu hiện hành cho khuôn dạng[flag-list,]<cpu-list>với cờdomainmặc định và cờnohz, danh sách CPU nhận cả dải và bước nhảy nhưisolcpus=1,2,10-20,100-2000:2/25, và ký hiệuNnghĩa là CPU cuối cùng của hệ 17.Gặp ở đâu.
isolcpus=nay viết được gọn hơn nhiều: ghi dải như10-20, và chữNnghĩa là CPU cuối cùng 17. Nhớ nhé: núm này là núm hiếm hoi của nhóm còn dùng được tới hôm nay.Where you see it.
isolcpus=is alive and has grown: current documentation gives the format[flag-list,]<cpu-list>with a defaultdomainflag and anohzflag, accepts ranges and strides such asisolcpus=1,2,10-20,100-2000:2/25, and letsNstand for the numerically last CPU on the system 17.Ba tham số chết theo bộ lập lịch
migration_cost=,migration_debug=vàmigration_factor=— ba núm gỡ lỗi cho ma trận chi phí di trú của bộ lập lịch, với ví dụmigration_cost=1000,2000,3000cho máy SMT NUMA 8 — không còn trong danh sách tham số hiện hành 17. Chúng thuộc về bộ lập lịch O(1) của dòng 2.6 thời điểm ấy; ma trận chi phí di trú mà chúng vặn không còn là cách Linux ra quyết định.Sách đã cảnh báo đúng chỗ
Cả ba tham số đã chết đều được sách đóng khung cảnh báo: “giá trị sai có thể làm suy giảm nghiêm trọng hiệu năng bộ lập lịch, nên chỉ dùng cho việc phát triển bộ lập lịch, không bao giờ dùng trong môi trường sản xuất” 8. Một chỉ dấu dùng được: tham số nào sách kèm khung cảnh báo mạnh thường là tham số gắn chặt với cài đặt nội bộ, và cũng là tham số dễ biến mất nhất.
Cụm khái niệm 03 · Nhóm 08–12Concept cluster 03 · Groups 08–12
Năm nhóm trên đường khởi động: ramdisk, đĩa gốc, init, kexec, RCU Năm nhóm theo thứ tự máy lên Five groups along the boot path: ramdisk, root disk, init, kexec, RCU
Năm nhóm này xếp gần đúng theo trình tự thời gian của một lần khởi động: nhân nạp đĩa RAM ban đầu, tìm và gắn hệ tệp gốc, chạy tiến trình đầu tiên. Nhóm kexec là ngoại lệ — nó chuẩn bị cho tình huống mọi thứ sụp đổ; và nhóm RCU là một cơ chế chạy suốt vòng đời nhân, được sách xếp ở đây.
Năm nhóm này đi theo đúng thứ tự máy khởi động: nạp đĩa tạm trong bộ nhớ, tìm ổ chứa hệ điều hành, chạy chương trình đầu tiên. Thêm hai nhóm đặc biệt: một để cứu khi nhân sụp, một là cơ chế khóa bên trong nhân. Nhớ nhé: sai một bước là máy đứng ngay tại đó.
These five sit roughly in the chronological order of a boot: the kernel loads the initial ramdisk, finds and mounts the root filesystem, runs the first process. The kexec group is the exception — it prepares for everything collapsing; and RCU is a mechanism running throughout the kernel's life that the book files here.
Tiến trình init. Tiến trình đầu tiên nhân khởi động và là tổ tiên của mọi tiến trình khác 9. Nếu nhân không chạy được nó, khởi động dừng tại đó — nên init= là tham số cứu hộ cuối cùng khi mọi thứ khác đã hỏng.
init là gì. Là chương trình đầu tiên chạy sau khi nhân lên, và mọi chương trình khác đều sinh ra từ nó 9. Nhớ nhé: nó không chạy được thì máy đứng im.
The init process. The first process started by the kernel and the ancestor of all other processes 9. If the kernel cannot run it, boot halts right there — which is why init= is the last rescue parameter when everything else has failed.
08 ramdisk → 09 đĩa gốc → 10 init
11 kexec = lối thoát khi sụp
12 RCU = loại trừ tương hỗ không khóa
đĩa tạm → ổ gốc → chương trình đầu
kexec = lối thoát khi sụp
RCU = cách nhân tránh giành nhau
08 ramdisk → 09 root disk → 10 init
11 kexec = the escape hatch
12 RCU = lockless mutual exclusion
-
ramdisk options
Nhóm 08 · Ramdisk — đĩa giả trong bộ nhớ Nhóm 08 · Đĩa tạm nằm trong bộ nhớ Group 08 · Ramdisk — a fake disk in memory
Nhóm này kiểm soát cách lưu thông tin trong bộ nhớ để giả làm đĩa, bao gồm các đĩa RAM khởi tạo giữ thông tin cần thiết ở một số giai đoạn khởi động 9.
initrd=filenamechỉ vị trí của đĩa RAM ban đầu 9;noinitrdkhông nạp đĩa RAM nào cả, kể cả khi nó đã được cấu hình trong các tùy chọn khác 9;ramdisk_size=nđặt kích thước tính bằng kilobyte, mặc định 4.096 (4 MB), và sách nói rõ nên dùng nó thay cho tham sốramdiskcũ hơn 9;ramdisk_blocksize=nđặt số byte mỗi khối, mặc định 1.024 9.Ramdisk là một “ổ đĩa giả” nằm trong bộ nhớ, dùng tạm lúc máy chưa gắn được ổ thật 9.
initrd=chỉ chỗ đặt nó 9,noinitrdbảo đừng dùng 9,ramdisk_size=đặt kích thước, mặc định khoảng 4 MB 9. Nhớ nhé: đĩa này mất sạch khi tắt máy, vì nó chỉ là bộ nhớ.This group controls how information stored in memory imitates disks, including the init ramdisks holding what is needed at some stages of booting 9.
initrd=filenamespecifies where the initial ramdisk is 9;noinitrdloads none at all, even if one is configured in other options 9;ramdisk_size=nsets the size in kilobytes, defaulting to 4,096 (4 MB), and the book says explicitly to use it instead of the olderramdiskoption 9;ramdisk_blocksize=nsets bytes per block, defaulting to 1,024 9.Bạn thấy nó ở đâu. Hai tham số ổ mềm của nhóm —
load_ramdisk=nnạp đĩa RAM từ ổ mềm, vàprompt_ramdisk=1hỏi người dùng trước khi đọc từ ổ mềm 9 — không còn trong danh sách tham số hiện hành 17. Đây là dấu vết rõ nhất của năm 2006 trong cả chương.Gặp ở đâu. Sách còn hai núm về ổ đĩa mềm: nạp đĩa RAM từ ổ mềm và hỏi trước khi đọc 9. Cả hai nay không còn 17. Nhớ nhé: đây là chỗ sách lộ tuổi rõ nhất.
Where you see it. The group's two floppy parameters —
load_ramdisk=n, loading a ramdisk from the floppy drive, andprompt_ramdisk=1, prompting the user before reading it 9 — are gone from today's parameter list 17. It is the clearest 2006 fingerprint in the chapter.Còn lại gì
initrd=còn, mô tả là “chỉ vị trí của đĩa RAM ban đầu” 17.ramdisk_size=còn, nhưng mô tả đã đổi sang số nhiều — “kích thước của các đĩa RAM, tính bằng kilobyte” 17.noinitrdcòn nhưng đã bị đánh dấu Deprecated, và tài liệu nói rõ nó áp choinitrdchứ không áp choinitramfs— trừ ở chế độ EFI thì áp cho cả hai 17.ramdisk_blocksize=thì không còn 17. -
root disk options
Nhóm 09 · Đĩa gốc — năm cách gọi tên một cái đĩa Nhóm 09 · Ổ gốc — chỉ cho nhân ổ nào Group 09 · Root disk — five ways to name one disk
Nhóm này kiểm soát cách nhân tìm và xử lý hệ tệp chứa hệ tệp gốc 9. Trục là
root=device, và sách liệt kê năm cách viết device:nnnn— số thiết bị dạng thập lục phân biểu diễn số chính và số phụ theo khuôn dạng nội bộ của nhân, không khuyến nghị trừ khi bạn nắm được nội bộ nhân;/dev/nfs— dùng đĩa NFS chỉ định bởi tùy chọnnfsroot;/dev/<diskname>;/dev/<diskname><decimal>cho phân vùng; và/dev/<diskname>p<decimal>, giống cái trên nhưng cần thiết khi tên đĩa kết thúc bằng một chữ số 9. Quanh nó:rovàrwgắn thiết bị gốc ở chế độ chỉ đọc hay đọc-ghi, mặc định của nhân là chỉ đọc 9;rootfstype=typechỉ định kiểu hệ tệp, ví dụrootfstype=ext39;rootflags=optionstruyền tùy chọn gắn 9.Nhóm này chỉ cho nhân biết ổ nào chứa hệ điều hành. Viết
root=/dev/sda1chẳng hạn 9. Thêmrolà gắn chỉ đọc,rwlà cho ghi; nhân mặc định chỉ đọc 9.rootfstype=ext3nói ổ đó định dạng gì 9. Nhớ nhé: gõ sairoot=là máy báo không tìm thấy hệ điều hành.This group controls how the kernel finds and handles the filesystem that contains the root filesystem 9. The spine is
root=device, and the book lists five ways to write device:nnnn— a hexadecimal device number giving major and minor in the kernel's internal format, not recommended unless you have access to kernel internals;/dev/nfs— use the NFS disk given by thenfsrootoption;/dev/<diskname>;/dev/<diskname><decimal>for a partition; and/dev/<diskname>p<decimal>, the same but needed when the disk name ends in a digit 9. Around it:roandrwmount the root device read-only or read-write, the kernel default being read-only 9;rootfstype=typenames the filesystem type, e.g.rootfstype=ext39;rootflags=optionspasses mount options 9.Bạn thấy nó ở đâu.
rootdelay=nđợi n giây trước khi thử gắn hệ tệp gốc — sách giải thích nó hữu ích khi hệ tệp gốc nằm trên thiết bị USB hoặc FireWire, vì những đĩa đó mất thêm chút thời gian để nhân phát hiện ra 9. Tài liệu hiện hành giữ nguyên tham số và bổ sung một giải pháp gọn hơn cho cùng vấn đề:rootwait, đợi vô thời hạn cho tới khi thiết bị gốc xuất hiện 17.Gặp ở đâu. Khởi động từ USB hay bị lỗi “không thấy ổ” vì nhân tìm sớm quá.
rootdelay=5bảo nhân đợi 5 giây 9; nay còn córootwaitđợi bao lâu cũng được 17. Nhớ nhé: không thấy ổ USB thì cho nhân chờ thêm.Where you see it.
rootdelay=nwaits n seconds before trying to mount the root filesystem — the book explains it is useful when the root filesystem is on a USB or FireWire device, as those take a bit longer for the kernel to discover 9. Current documentation keeps it and adds a tidier answer to the same problem:rootwait, which waits indefinitely for the root device to show up 17.Danh sách năm cách đã được thay bằng một con trỏ
Tài liệu hiện hành không còn liệt kê các khuôn dạng
root=ngay tại chỗ; nó nói “thường đây là một chỉ định thiết bị khối kiểu nào đó” và trỏ tới chú thíchearly_lookup_bdevtrongblock/early-lookup.c, đồng thời liệt kê các giá trị đặc biệtram,nfs,cifs,mtdvàubi17. Tức là hai giá trị đặc biệt mới —cifs,mtd/ubi— đã được thêm vào sau 2006. -
init options
Nhóm 10 · Init — ba tham số, một lối thoát hiểm Nhóm 10 · Chương trình đầu tiên Group 10 · Init — three parameters, one escape hatch
init=filenamechạy tệp nhị phân chỉ định làm tiến trình init thay cho/sbin/initmặc định 9.rdinit=full_path_namechạy chương trình chỉ định làm init, và sách nhấn mạnh tệp này phải nằm trên đĩa RAM của nhân chứ không phải trên hệ tệp gốc 9.Schạy init ở chế độ một người dùng, thay cho chế độ nhiều người dùng mặc định 9.Ba núm.
init=bảo nhân chạy chương trình nào đầu tiên, thay vì/sbin/init9.rdinit=cũng vậy nhưng chương trình phải nằm trên đĩa tạm 9. ChữSviết hoa cho máy lên ở chế độ một người dùng 9. Nhớ nhé: quên mật khẩu hay hỏng cấu hình thìinit=/bin/shlà cửa cuối.init=filenameruns the specified binary as the init process instead of the default/sbin/init9.rdinit=full_path_nameruns the named program as init, and the book stresses that this file must be on the kernel ramdisk rather than on the root filesystem 9.Sruns init in single-user mode instead of the default multi-user mode 9.Bạn thấy nó ở đâu.
init=/bin/shlà cách vào một hệ thống không lên nổi giao diện đăng nhập: nhân bỏ qua toàn bộ chuỗi khởi động dịch vụ và đưa thẳng bạn vào một trình bao. Cả ba tham số đều còn nguyên trong tài liệu hiện hành, vớirdinit=nay ghi rõ là chạy thay cho/inittrên ramdisk, dùng cho khởi động không gian người dùng sớm 17.Gặp ở đâu. Máy hỏng không vào được thì thêm
init=/bin/sh: nhân bỏ qua hết, đưa thẳng bạn vào dòng lệnh 917. Nhớ nhé: đây là cái chìa khóa dự phòng, nhớ nó là đủ cứu nhiều lần.Where you see it.
init=/bin/shis the way into a system that cannot reach a login prompt: the kernel skips the whole service-startup chain and drops you into a shell. All three survive in current documentation, withrdinit=now spelled out as running instead of/initfrom the ramdisk, used for early userspace startup 17. -
kexec options
Nhóm 11 · kexec — để dành chỗ cho lần sụp đổ kế tiếp Nhóm 11 · Để dành chỗ cứu hộ Group 11 · kexec — reserving room for the next collapse
Sách mô tả kexec là một tính năng khởi động lại chuyên biệt cho phép khởi động lại nhanh, và thường được kết hợp với tiện ích kdump để đổ bộ nhớ của nhân trước đó ra một nơi an toàn nhằm phân tích sau 10.
crashkernel=n[KMG]@start[KMG]dành riêng một phần bộ nhớ vật lý cho kexec: n là lượng bộ nhớ, start là vị trí, và nhân sẽ chuyển sang dùng vùng đó nếu nó hoảng loạn 10.elfcorehdr=nchỉ địa chỉ vật lý nơi tiêu đề ELF của ảnh lõi nhân bắt đầu, dùng để kexec tìm ra nhân khi khởi động ảnh nhân thứ cấp 10.kexec là cách khởi động lại thật nhanh, thường dùng chung với kdump để lưu lại bộ nhớ khi nhân sụp 10.
crashkernel=để dành sẵn một khoảnh bộ nhớ cho việc đó 10. Nhớ nhé: muốn biết vì sao máy sụp thì phải để dành chỗ ghi lại, từ trước khi sụp.The book describes kexec as a specialised rebooting feature allowing a fast reboot, usually combined with the kdump facility that dumps the previous kernel's memory somewhere safe for later analysis 10.
crashkernel=n[KMG]@start[KMG]reserves a portion of physical memory for kexec: n is the amount, start the location, and the kernel switches to it if it panics 10.elfcorehdr=ngives the physical address where the kernel core image's ELF header starts, used by kexec to find the kernel when booting the secondary image 10.Bạn thấy nó ở đâu. Cả hai tham số còn sống và đã nở ra thành một họ.
crashkernel=size[KMG][@offset[KMG]]nay cho phép bỏ trống@offsetđể nhân tự chọn vị trí thích hợp, và có thêm các biến thể theo dải bộ nhớ (range1:size1,...) cùng hậu tố,highđể đặt vùng nhớ trên mốc 4 GB 17; cả hai biến thể đều trỏ người đọc sang tài liệu kdump để xem ví dụ 22.elfcorehdr=nay nhận cả kích thước tùy chọn:elfcorehdr=[size[KMG]@]offset[KMG]17.Gặp ở đâu. Hai núm này vẫn còn và còn tiện hơn xưa: nay bỏ trống vị trí cũng được, nhân tự chọn chỗ 17. Nhớ nhé: máy chủ quan trọng thì nên bật sẵn kdump.
Where you see it. Both survive and have grown into a family.
crashkernel=size[KMG][@offset[KMG]]now lets you omit@offsetso a suitable one is chosen automatically, and adds memory-range variants (range1:size1,...) and a,highsuffix placing the region above 4 GB 17; both variants point the reader at the kdump documentation for a worked example 22.elfcorehdr=now takes an optional size:elfcorehdr=[size[KMG]@]offset[KMG]17. -
rcu options
Nhóm 12 · RCU — bốn núm đã đổi tiền tố Nhóm 12 · RCU — bốn núm đã đổi tên Group 12 · RCU — four knobs that changed prefix
Sách định nghĩa Read Copy Update là phần của nhân xử lý loại trừ tương hỗ cho nhiều phân hệ theo cách không dùng khóa, và nêu bốn núm tinh chỉnh 10:
rcu.blimit=nđặt số lượng tối đa các callback RCU đã hoàn tất được xử lý trong một lô;rcu.qhimark=n— giới hạn lô bị tắt khi số callback xếp hàng vượt n;rcu.qlowmark=n— giới hạn lô được bật lại khi số đó tụt xuống dưới n; vàrcu.rsinterval=nđặt số callback bổ sung cần xếp hàng trước khi ép lập lịch lại trên mọi CPU 10.RCU là cách nhân cho nhiều phần chạy song song mà không phải “khóa cửa” chờ nhau 10. Bốn núm trong sách chỉnh việc nhân dọn dẹp các công việc tồn đọng của RCU theo lô 10. Nhớ nhé: đây là nhóm dành cho người viết nhân, không phải cho người dùng thường.
The book defines Read Copy Update as the portion of the kernel that handles mutual exclusion for a variety of subsystems in a lockless manner, and gives four tuning knobs 10:
rcu.blimit=nsets the maximum number of finished RCU callbacks to process in one batch;rcu.qhimark=n— batch limiting is disabled when queued callbacks rise above n;rcu.qlowmark=n— batch limiting is re-enabled when they fall below n; andrcu.rsinterval=nsets how many additional callbacks should be queued before forcing a reschedule on all CPUs 10.Bạn thấy nó ở đâu. Đây là ví dụ sạch nhất trong chương về một nhóm đổi tên chứ không chết. Tiền tố
rcu.của sách không còn; ba trong bốn núm nay mang tiền tốrcutree.với mô tả gần như nguyên văn —rcutree.blimit=đặt số callback tối đa xử lý trong một lô,rcutree.qhimark=là ngưỡng trên để tắt giới hạn lô,rcutree.qlowmark=là ngưỡng dưới để bật lại 17. Núm thứ tư,rcu.rsinterval10, không có bản tương ứng trong danh sách hiện hành 17.Gặp ở đâu. Ba trong bốn núm vẫn còn nhưng đổi đầu tên từ
rcu.thànhrcutree., nội dung gần như y nguyên 17. Núm thứ tư thì không còn 17. Nhớ nhé: tra không thấy tên trong sách thì thử tìm tên mới, đừng vội kết luận nó chết.Where you see it. This is the chapter's cleanest example of a group that was renamed, not removed. The book's
rcu.prefix is gone; three of the four now carryrcutree.with near-verbatim descriptions —rcutree.blimit=sets the maximum finished callbacks per batch,rcutree.qhimark=is the threshold above which batch limiting is disabled,rcutree.qlowmark=the one below which it is re-enabled 17. The fourth,rcu.rsinterval10, has no counterpart in the current list 17.Quy tắc tra cứu rút ra từ nhóm này
Khi một tham số trong sách không tra thấy, hãy thử ba bước theo thứ tự: tìm theo mô tả chứ không theo tên (mô tả ít đổi hơn tên); thử các tiền tố module họ hàng (
rcu.→rcutree.,max_luns→scsi_mod.max_luns); rồi mới kết luận là nó đã bị gỡ. Hai bước đầu giải thích phần lớn các chỗ “mất tích” trong chương này.
Cụm khái niệm 04 · Nhóm 13–22Concept cluster 04 · Groups 13–22
Mười nhóm còn lại: phân hệ, an ninh, và cái hộp linh tinh Mười nhóm cuối: theo từng bộ phận The remaining ten: subsystems, security, and the miscellaneous box
Mười nhóm cuối được xếp theo phân hệ, và mật độ chi tiết của chúng rất chênh nhau: ACPI chiếm gần bốn trang, SCSI chỉ ba tham số. Điểm chung là chúng đều cho bạn nói “không” với một phần sụn hoặc một trình điều khiển đang nói dối — và đó là lý do thực dụng nhất để một người quản trị mở chương này ra.
Mười nhóm cuối xếp theo bộ phận: nguồn điện, ổ cứng, khe cắm, an ninh, mạng, máy in, đồng hồ. Có nhóm rất dài, có nhóm chỉ ba dòng. Điểm chung: chúng cho bạn bảo nhân “đừng tin cái đó”. Nhớ nhé: phần lớn tham số ở đây sinh ra vì phần cứng báo sai.
The last ten are ordered by subsystem, and their density varies wildly: ACPI runs to nearly four pages, SCSI to three parameters. What they share is that each lets you say “no” to a piece of firmware or a driver that is lying — which is the most practical reason an administrator ever opens this chapter.
ACPI. Advanced Configuration and Power Interface — giao diện giữa nhân và phần sụn về cấu hình và quản lý nguồn 11. Nhóm ACPI dài nhất chương không phải vì ACPI phức tạp, mà vì các BIOS triển khai nó mỗi nơi một kiểu.
ACPI là gì. Là cách nhân nói chuyện với phần sụn của máy về điện và cấu hình 11. Nhóm này dài nhất vì mỗi hãng làm một kiểu, và nhân phải vá từng kiểu. Nhớ nhé: máy không tắt được, không ngủ được, thường là chuyện ACPI.
ACPI. The Advanced Configuration and Power Interface — the interface between the kernel and firmware for configuration and power management 11. The ACPI group is the chapter's longest not because ACPI is complex, but because every BIOS implements it differently.
13 ACPI · 14 SCSI · 15 PCI · 16 PnP BIOS
17 SELinux · 18 mạng · 19 NFS
20 phần cứng · 21 đồng hồ · 22 linh tinh
nguồn · ổ cứng · khe cắm · cắm-là-chạy
an ninh · mạng · chia tệp qua mạng
thiết bị · đồng hồ · còn lại
13 ACPI · 14 SCSI · 15 PCI · 16 PnP BIOS
17 SELinux · 18 network · 19 NFS
20 hardware · 21 timer · 22 misc
-
acpi options
Nhóm 13 · ACPI — nhóm dài nhất, vì BIOS nào cũng khác Nhóm 13 · ACPI — điện và nguồn Group 13 · ACPI — the longest group, because every BIOS differs
Tùy chọn chính là
acpi=[force|off|noirq|ht|strict]:forceép bật ACPI, ghi đè tùy chọn cấu hình đã tắt nó;offtắt ACPI, ghi đè tùy chọn đã bật;noirqngăn dùng ACPI cho việc định tuyến IRQ;htchỉ chạy đủ lớp ACPI để bật HyperThreading;strictlàm lớp ACPI bớt khoan dung với các nền tảng không tuân thủ đầy đủ đặc tả 11. Quanh nó là một dãy dài các bản vá theo BIOS:acpi_os_name=namenói dối BIOS rằng hệ điều hành đang chạy mang tên đó, ví dụ chuỗiMicrosoft 2001để BIOS tưởng là Windows 2001 — hữu ích cho các BIOS cũ 11;acpi_skip_timer_overridebỏ qua vấn đề ghi đè ngắt IRQ0/pin2 ở các BIOS nForce2 hỏng 11;acpi_serializeép tuần tự hóa các phương thức ACPI Machine Language 11;processor.max_cstate=ngiới hạn bộ xử lý ở một C-state tối đa bất kể bảng ACPI nói nó hỗ trợ tới đâu, với giá trị 9 ghi đè mọi giới hạn danh sách đen DMI 11.Núm chính là
acpi=:offtắt hẳn,forcebật hẳn,noirqkhông cho ACPI phân chia ngắt 11. Có cả núm nói dối:acpi_os_name=làm BIOS tưởng máy đang chạy Windows, vì nhiều BIOS cũ chỉ chịu hợp tác với Windows 11. Nhớ nhé: máy sập nguồn lung tung thì thửacpi=offđể khoanh vùng.The main option is
acpi=[force|off|noirq|ht|strict]:forceenables ACPI, overriding a configuration option that disabled it;offdisables it, overriding one that enabled it;noirqprevents ACPI being used for IRQ routing;htruns only enough of the ACPI layer to enable HyperThreading;strictmakes the ACPI layer less tolerant of platforms not fully compliant with the specification 11. Around it runs a long row of per-BIOS patches:acpi_os_name=nametells the ACPI BIOS the running OS is called that — e.g. the stringMicrosoft 2001to spoof it into thinking Windows 2001 is running, useful for older BIOSes 11;acpi_skip_timer_overrideignores IRQ0/pin2 interrupt override issues on broken nForce2 BIOSes 11;acpi_serializeforces serialization of ACPI Machine Language methods 11;processor.max_cstate=nlimits the processor to a maximum C-state no matter what the ACPI tables claim, a value of 9 overriding any DMI blacklist limit 11.Bạn thấy nó ở đâu. Hai tham số
memmap=đặc thù ACPI nằm ở nhóm này chứ không ở nhóm Bộ nhớ:memmap=n[KMG]#start[KMG]đánh dấu một vùng là dữ liệu ACPI, cònmemmap=n[KMG]$start[KMG]đánh dấu là vùng dành riêng 11. Cả hai còn nguyên trong tài liệu hiện hành, cùng với biến thể mớimemmap=nn[KMG]!ss[KMG]17.Gặp ở đâu. Cùng một chữ
memmap=nhưng đổi dấu là đổi nghĩa: dấu#đánh dấu vùng dữ liệu ACPI, dấu$đánh dấu vùng cấm đụng 11. Nhớ nhé: ở đây dấu câu cũng là một phần của lệnh.Where you see it. Two ACPI-flavoured
memmap=forms live in this group rather than the Memory one:memmap=n[KMG]#start[KMG]marks a range as ACPI data, andmemmap=n[KMG]$start[KMG]marks it reserved 11. Both survive today, alongside a newermemmap=nn[KMG]!ss[KMG]variant 17.acpi= đã đổi danh sách giá trị
Sách cho năm giá trị
force|off|noirq|ht|strict11. Tài liệu hiện hành choforce | on | off | strict | noirq | rsdt | copy_dsdt | nospcr— thêmon,rsdt,copy_dsdt,nospcr, và bỏht17. Giá trịhtmất đi là hợp lý: nó là bản vá cho giai đoạn HyperThreading còn mới.Những bản vá BIOS đã hết nhiệm vụ
Bốn tham số của nhóm không còn trong danh sách hiện hành:
acpi_dbg_layer=,acpi_fake_ecdt,acpi_generic_hotkeyvàacpi_serialize17.ec_intr=n— chế độ ngắt của bộ điều khiển nhúng ACPI, mặc định là chế độ ngắt 11 — cũng vậy 17. Còn nguyên:acpi_sci=,acpi_sleep=(nay có thêm các giá trịs3_beep,s4_hwsig,nonvs,nobl…),acpi_skip_timer_override,acpi_irq_isa=,acpi_os_name=,acpi_pm_good,pnpacpi=off,processor.max_cstate=vàprocessor.nocst17.acpi_osi=thì còn nhưng đã giàu hơn hẳn: thay vì chỉ bật/tắt, nay nó sửa được cả danh sách chuỗi giao diện hệ điều hành với các dạngacpi_osi="string1",acpi_osi="!string2"vàacpi_osi=!*17. -
scsi options
Nhóm 14 · SCSI — ba tham số, cả ba đã đổi tên Nhóm 14 · SCSI — ba núm, đều đổi tên Group 14 · SCSI — three parameters, all three renamed
Sách chỉ nêu ba tham số và dặn xem các tệp tài liệu trình điều khiển riêng trong thư mục
Documentation/scsi/của nhân để biết thêm 12.max_luns=nđặt số LUN tối đa hệ thống nên dò, n là số nguyên từ 1 đến 4.294.967.295 12.max_report_luns=nđặt số LUN tối đa hệ thống có thể nhận, n từ 1 đến 16.384 12.scsi_dev_flags=vendor:model:flagscho phép thêm mục vào danh sách đen/trắng SCSI cho một hãng và kiểu thiết bị cụ thể 12.Nhóm này chỉ có ba núm, và sách bảo muốn biết thêm thì đọc tài liệu từng trình điều khiển 12. Hai núm đầu giới hạn số ổ đĩa mà nhân đi dò; núm thứ ba dùng để đánh dấu riêng một kiểu thiết bị hay gây lỗi 12. Nhớ nhé: khởi động chậm vì nhân dò quá nhiều ổ thì vặn núm đầu.
The book gives just three parameters and points to the per-driver documentation files in the kernel's
Documentation/scsi/directory for the rest 12.max_luns=nsets the maximum number of SCSI LUNs the system should probe, n from 1 to 4,294,967,295 12.max_report_luns=nsets the maximum it can receive, n from 1 to 16,384 12.scsi_dev_flags=vendor:model:flagsadds entries to the SCSI black/white list for a specific vendor and model 12.Bạn thấy nó ở đâu. Cả ba đã chuyển sang tiền tố module và nay nằm trong tài liệu SCSI parameters riêng, chứ không nằm trong danh sách chính:
scsi_mod.max_luns=“nên nằm giữa 1 và 2³²−1”,scsi_mod.max_report_luns=“nên nằm giữa 1 và 16384”, vàscsi_dev_flagsnay làscsi_mod.dev_flags=<vendor>:<model>:<flags>18. Giới hạn số học thì khớp nguyên vẹn với sách.Gặp ở đâu. Ba núm vẫn còn nhưng phải viết thêm
scsi_mod.ở đầu, và chúng nằm ở một trang tài liệu riêng 18. Các con số giới hạn thì vẫn đúng như sách. Nhớ nhé: đổi tên không phải là mất.Where you see it. All three moved to a module prefix and now live in a separate SCSI-parameters document rather than the main list:
scsi_mod.max_luns=“should be between 1 and 2^32-1”,scsi_mod.max_report_luns=“should be between 1 and 16384”, andscsi_dev_flagsis nowscsi_mod.dev_flags=<vendor>:<model>:<flags>18. The numeric limits match the book exactly. -
pci options
Nhóm 15 · PCI — một tham số, mười lăm giá trị Nhóm 15 · PCI — một núm, rất nhiều nấc Group 15 · PCI — one parameter, fifteen values
Cả nhóm gói trong một tham số:
pci=option[,option...]12. Các giá trị đáng nhớ:offkhông dò bus PCI;biosép dùng BIOS PCI thay vì truy cập phần cứng trực tiếp — và sách kèm một nhận xét sắc: làm vậy nghĩa là tin BIOS, “điều không bình thường, vì các BIOS nổi tiếng nói dối nhiều hơn là nói đúng” 12;nobiostruy cập phần cứng trực tiếp, và sách ghi đây là cách dò mặc định trong mọi nhân sau 2.6.13 12;nomsitắt ngắt MSI toàn hệ thống nếuPCI_MSIđược bật trong cấu hình 12;nosortkhông sắp xếp thiết bị theo thứ tự BIOS đưa ra — việc sắp xếp vốn có để tương thích với các nhân rất cũ 12;routeirqđịnh tuyến IRQ cho mọi thiết bị PCI, là cách vá tạm cho các trình điều khiển hỏng không gọipci_enable_device()12.Cả nhóm chỉ có một chữ:
pci=, nhưng đi sau nó là rất nhiều lựa chọn 12. Đáng nhớ:pci=nomsitắt một kiểu báo ngắt hay gây lỗi với card cũ 12,pci=noacpikhông dùng ACPI để chia ngắt 12. Sách còn nói vui rằng các BIOS “nổi tiếng nói dối nhiều hơn nói thật” 12. Nhớ nhé: card mạng hay card đồ họa dở chứng thì thửpci=nomsi.The whole group is one parameter:
pci=option[,option...]12. The values worth knowing:off, do not probe the PCI bus;bios, force use of the PCI BIOS rather than touching hardware directly — with the book's sharp aside that this means trusting the BIOS, “which is not the standard thing to do (as BIOSes are known to lie more often than they are known to be valid)” 12;nobios, access the hardware directly, which the book records as the default probing method in all kernels after 2.6.13 12;nomsi, disable MSI interrupts system-wide ifPCI_MSIis enabled in the configuration 12;nosort, do not sort PCI devices into the order the PCI BIOS gives — sorting exists for compatibility with much older kernels 12;routeirq, do IRQ routing for all PCI devices, a temporary workaround for broken drivers that fail to callpci_enable_device()12.Bạn thấy nó ở đâu. Các giá trị mang tính vá lỗi máy cụ thể vẫn còn nguyên trong tài liệu hiện hành —
nomsi,biosirq,irqmask=0xMMMM,lastbus=N,assign-busses,usepirqmask,routeirq17. Sách ghiusepirqmasklà cần cho một số BIOS hỏng, “đáng chú ý là vài máy HP Pavilion N5400 và Omnibook XE3”, và lưu ý nó vô hiệu nếu định tuyến IRQ qua ACPI đang bật 12 — một lát cắt rất rõ của phần cứng năm 2006.Gặp ở đâu. Nhiều nấc của
pci=sinh ra để vá cho đúng vài kiểu máy tính xách tay cũ; sách còn kể tên hai dòng máy HP 12. Phần lớn vẫn còn tới hôm nay 17. Nhớ nhé: những núm kỳ lạ nhất thường sinh ra từ một chiếc máy hỏng có thật.Where you see it. The machine-specific workaround values are all still there today —
nomsi,biosirq,irqmask=0xMMMM,lastbus=N,assign-busses,usepirqmask,routeirq17. The book recordsusepirqmaskas needed on some broken BIOSes, “notably some HP Pavilion N5400 and Omnibook XE3 notebooks”, and notes it has no effect when ACPI IRQ routing is enabled 12 — a very precise slice of 2006 hardware. -
plug and play bios options
Nhóm 16 · Plug and Play BIOS — dành chỗ mà đừng đụng vào Nhóm 16 · Cắm-là-chạy — chừa chỗ ra Group 16 · Plug and Play BIOS — reserve it and keep out
noisapnptắt phân hệ ISA Plug and Play nếu nó đã được bật trong cấu hình nhân 13.pnpbios=[on|off|curr|no-curr]đặt thiết lập chính:onbật phân hệ,offtắt,currbảo dùng thiết lập tĩnh hiện thời,no-currbảo dò thiết lập động nếu có thể 13. Bốn tham số còn lại đều là danh sách “chừa ra”:pnp_reserve_irq=,pnp_reserve_dma=,pnp_reserve_io=(mỗi cổng ghi theo cặp vị trí bắt đầu và kích thước) vàpnp_reserve_mem=(tương tự với vùng nhớ) — tất cả liệt kê những tài nguyên mà phân hệ PnP BIOS không được dùng cho tự động cấu hình 13.Nhóm này nói về việc máy tự dò và tự chia tài nguyên cho thiết bị cắm vào. Bốn núm
pnp_reserve_*dùng để bảo “chỗ này chừa ra, đừng chia cho ai” 13.pnpbios=offthì tắt hẳn việc tự dò 13. Nhớ nhé: hai thiết bị giành nhau một tài nguyên thì chừa tài nguyên đó ra là xong.noisapnpdisables the ISA Plug and Play subsystem if it was enabled in the kernel configuration 13.pnpbios=[on|off|curr|no-curr]sets the main behaviour:onenables the subsystem,offdisables it,currtells it to use the current static settings,no-currto probe for dynamic settings if possible 13. The remaining four are all “keep out” lists:pnp_reserve_irq=,pnp_reserve_dma=,pnp_reserve_io=(each port given as a starting location and a size) andpnp_reserve_mem=(the same for memory regions) — each naming resources the PnP BIOS subsystem must not use for autoconfiguration 13.Bạn thấy nó ở đâu. Toàn nhóm còn nguyên trong tài liệu hiện hành, chỉ khác một chi tiết:
pnpbios=nay nhận sáu giá trịon | off | curr | res | no-curr | no-res— thêm cặpres/no-resso với bốn giá trị sách nêu 17. Bốn tham sốpnp_reserve_*giữ nguyên cả tên lẫn ý nghĩa 17.Gặp ở đâu. Nhóm này gần như không đổi sau hai mươi năm; chỉ có
pnpbios=thêm hai lựa chọn mới 17. Nhớ nhé: phần cứng càng cũ thì tham số càng bền.Where you see it. The whole group survives today with one difference:
pnpbios=now takes six values,on | off | curr | res | no-curr | no-res— adding theres/no-respair to the book's four 17. The fourpnp_reserve_*parameters keep both name and meaning 17. -
selinux options
Nhóm 17 · SELinux — bốn núm và một mặc định đã lật Nhóm 17 · SELinux — an ninh, mặc định đã đổi Group 17 · SELinux — four knobs and one flipped default
Sách nói bốn tham số này đổi những khía cạnh nền tảng của việc khởi động SELinux 14.
enforcing=[0|1]quyết định SELinux có thực thi luật khi khởi động hay không: 0 nghĩa là chỉ ghi nhật ký vi phạm chính sách mà không từ chối truy cập, 1 là thực thi đầy đủ kèm cả từ chối lẫn ghi nhật ký; sách ghi giá trị mặc định là 0, và đổi được lúc chạy qua tệp/selinux/enforce14.selinux=[0|1]bật hoặc tắt SELinux khi khởi động, mặc định do một tùy chọn cấu hình nhân đặt ra 14.checkreqprot=[0|1]đặt giá trị cờ ban đầu: 0 nghĩa là bảo vệ do nhân áp và bao gồm cả bảo vệ thực thi ngầm định, 1 nghĩa là bảo vệ do ứng dụng yêu cầu 14.selinux_compat_net=[0|1]đặt mô hình kiểm soát mạng: 0 dùng kiểm soát gói dựa trên secmark mới, 1 dùng kiểm soát gói kiểu cũ, và 0 là giá trị mặc định và được ưa dùng 14.SELinux là lớp an ninh siết chặt quyền của từng chương trình.
enforcing=0nghĩa là chỉ ghi lại vi phạm chứ không chặn;enforcing=1là chặn thật 14.selinux=0tắt hẳn 14. Nhớ nhé: bật siết ngay có thể làm ứng dụng gãy, nên thường người ta chạy chế độ chỉ ghi nhật ký trước.The book says these four change fundamental aspects of SELinux startup 14.
enforcing=[0|1]decides whether SELinux enforces its rules at boot: 0 means it logs policy violations but denies nothing, 1 means full enforcement with denials as well as logging; the book records the default as 0, changeable at runtime through/selinux/enforce14.selinux=[0|1]enables or disables SELinux at boot, the default set by a kernel configuration option 14.checkreqprot=[0|1]sets the initial flag value: 0 means the protection applied by the kernel, including any implied execute protection; 1 means the protection requested by the application 14.selinux_compat_net=[0|1]sets the network control model: 0 uses the new secmark-based packet controls, 1 the legacy ones, and 0 is the default and preferred value 14.Bạn thấy nó ở đâu. Ba thay đổi cần biết. Một:
selinux=nay có mặc định là 1 ghi thẳng trong tài liệu, không còn phụ thuộc tùy chọn cấu hình như sách mô tả 17. Hai: đường dẫn/selinux/…của sách 14 nay là/sys/fs/selinux/…17. Ba:selinux_compat_netkhông còn trong danh sách 17, vàcheckreqprot=tuy còn nhưng tài liệu ghi rõ “đặtcheckreqprotbằng 1 là đã lỗi thời” 17. Riêngenforcing=thì giữ nguyên cả ý nghĩa lẫn mặc định 0 17.Gặp ở đâu. Ba chỗ đã đổi:
selinux=nay mặc định bật 17; các tệp điều khiển chuyển từ/selinux/sang/sys/fs/selinux/17; và một núm đã bị bỏ 17. Nhớ nhé: mặc định an ninh thường chỉ đổi theo một chiều — chặt hơn.Where you see it. Three changes to know. One:
selinux=now documents a default of 1, no longer deferring to a configuration option as the book describes 17. Two: the book's/selinux/…paths 14 are now/sys/fs/selinux/…17. Three:selinux_compat_netis gone from the list 17, andcheckreqprot=survives but is documented with “setting checkreqprot to 1 is deprecated” 17.enforcing=alone keeps both its meaning and its default of 0 17.Vì sao mặc định lật
Sách viết trong giai đoạn SELinux còn đang tìm chỗ đứng: mặc định của
selinux=để cho nhà phân phối quyết, vàenforcing=mặc định 0 để không làm gãy hệ thống của người chưa có chính sách phù hợp 14. Tài liệu hiện hành giữ đúng cặp lựa chọn đó nhưng chốtselinux=1làm mặc định 17 — phân hệ bật sẵn, mức thực thi vẫn để ngỏ. Cách phân vai ấy y hệt tinh thần sách, chỉ dịch một nấc. -
network options
Nhóm 18 · Mạng — bốn núm cấp thấp, một lỗi in Nhóm 18 · Mạng — bốn núm sâu bên trong Group 18 · Network — four low-level knobs and one typo
Nhóm này kiểm soát các khía cạnh cấp thấp của phân hệ mạng 15.
netdev=[irq],[io],[mem_start],[mem_end],[name]đặt tham số thiết bị mạng, đặc thù theo trình điều khiển; sách nói rõ nó thường không áp dụng cho thiết bị PCI, USB hay cắm-là-chạy, mà chỉ dành cho thiết bị không tự phát hiện được tài nguyên của mình 15.rhash_entries=nghi đè số lượng mặc định các hash bucket cho bộ đệm định tuyến, và sách khuyến nghị chỉ dành cho chuyên gia mạng của nhân 15.thash_entries=nlàm điều tương tự cho bộ đệm kết nối TCP 15.shapers=nđặt số lượng tối đa network shaper mà nhân có thể dùng 15.Bốn núm rất sâu bên trong phần mạng. Hai núm
rhash_entries=vàthash_entries=chỉnh kích thước bảng tra của nhân cho tuyến đường và kết nối TCP; sách nói chỉ chuyên gia mới nên đụng 15. Nhớ nhé: nhóm này không dành cho việc “mạng chậm thì vặn thử”.This group controls low-level aspects of the networking subsystem 15.
netdev=[irq],[io],[mem_start],[mem_end],[name]sets driver-specific network device parameters; the book states it does not usually apply to PCI, USB or other plug-and-play devices, being intended only for devices that cannot discover their own resource assignments 15.rhash_entries=noverrides the default number of hash buckets for the route cache, recommended only for kernel network experts 15.thash_entries=ndoes the same for the TCP connection cache 15.shapers=nsets the maximum number of network shapers the kernel can use 15.Bạn thấy nó ở đâu.
thash_entries=vàshapers=còn nguyên trong tài liệu hiện hành, vớishapers=vẫn mang đúng mô tả “số lượng shaper tối đa” 17.netdev=cũng còn, nhưng nay được ghi cụ thể là tham số cho thiết bị mạng NE2000 ISA 17.rhash_entries=thì không còn 17 — bộ đệm định tuyến mà nó vặn đã không còn là cấu trúc dữ liệu trung tâm của Linux nữa.Gặp ở đâu. Ba trong bốn núm vẫn còn; núm chỉnh bộ đệm định tuyến thì đã mất 17. Nhớ nhé: cấu trúc bên trong nhân đổi thì núm chỉnh nó cũng đi theo.
Where you see it.
thash_entries=andshapers=survive, withshapers=keeping exactly its “maximal number of shapers” description 17.netdev=survives too, now documented specifically as NE2000 ISA network device parameters 17.rhash_entries=is gone 17 — the route cache it tuned is no longer a central Linux data structure.Lỗi in đáng để ý
Mục
rhash_entriescủa sách có tiêu đề đúng nhưng dòng khuôn dạng lại in là “dhash_entries=n” 15 — tên của một tham số khác hẳn, thuộc nhóm Linh tinh và dùng cho bộ đệm dentry 16. Đây là lời nhắc thực tế: với một chương tra cứu, tên tham số phải đối chiếu với nguồn hiện hành trước khi gõ vào dòng khởi động, kể cả khi nó in trong sách giấy. -
network file system options
Nhóm 19 · NFS — khởi động từ một cái đĩa không có ở đây Nhóm 19 · NFS — ổ đĩa nằm ở máy khác Group 19 · NFS — booting from a disk that is not here
Tham số quan trọng nhất là
nfsroot=[server-ip:]root-dir[,nfs-options]: đặt hệ tệp gốc NFS cho những máy không đĩa, để chúng khởi động được qua mạng; nếu không đặt, giá trị/tftpboot/client_ip_addresssẽ được dùng làm hệ tệp gốc với tùy chọn NFS mặc định 15. Sách giải thích từng phần: server-ip là địa chỉ máy chủ NFS; root-dir là thư mục trên máy chủ để gắn làm gốc — và nếu chuỗi này chứa dấu hiệu%s, nó sẽ được thay bằng biểu diễn ASCII địa chỉ IP của máy khách; nfs-options là các tùy chọn NFS chuẩn nhưro, phân cách bằng dấu phẩy 15. Bốn tham sốlockd.nlm_*chỉnh trình quản lý khóa NFS:grace_period,tcpport,udpport, vàtimeout— sách ghi mặc định củatimeoutlà 10 giây 15.Nhóm này cho máy khởi động từ ổ đĩa nằm trên một máy khác qua mạng.
nfsroot=chỉ máy chủ và thư mục 15. Mấy númlockd.nlm_*chỉnh việc khóa tệp khi nhiều máy dùng chung 15. Nhớ nhé: phòng máy không ổ cứng thì khởi động kiểu này.The important one is
nfsroot=[server-ip:]root-dir[,nfs-options]: it sets the NFS root filesystem for diskless boxes so they can boot over NFS; if unset,/tftpboot/client_ip_addressis used as the root with default NFS options 15. The book breaks it down: server-ip is the NFS server's address; root-dir is the directory on the server to mount as root — and if that string contains a%stoken, it is replaced with the ASCII representation of the client's IP address; nfs-options are standard NFS options such asro, comma-separated 15. Fourlockd.nlm_*parameters tune the NFS lock manager:grace_period,tcpport,udpport, andtimeout— the book records thetimeoutdefault as 10 seconds 15.Bạn thấy nó ở đâu. Nhóm này bền một cách đáng chú ý: cả bốn
lockd.nlm_*còn nguyên tên và ý nghĩa,nfs.callback_tcpport=vẫn là cổng TCP cho kênh gọi lại NFSv4, vànfs.idmap_cache_timeout=vẫn đặt thời gian sống tối đa của mục trong bộ đệm ánh xạ định danh 17.nfsroot=còn, nhưng tài liệu hiện hành không mô tả cú pháp tại chỗ mà trỏ sangDocumentation/admin-guide/nfs/nfsroot.rst17.Gặp ở đâu. Nhóm này gần như không đổi: tất cả núm vẫn còn đúng tên 17. Chỉ có phần mô tả cú pháp chuyển sang một trang tài liệu riêng 17. Nhớ nhé: chuẩn mạng càng lâu đời càng ít đổi.
Where you see it. This group is remarkably durable: all four
lockd.nlm_*keep their names and meanings,nfs.callback_tcpport=is still the TCP port for the NFSv4 callback channel, andnfs.idmap_cache_timeout=still sets the maximum lifetime for idmapper cache entries 17.nfsroot=survives, though today's documentation points atDocumentation/admin-guide/nfs/nfsroot.rstrather than spelling the syntax out 17. -
hardware-specific options
Nhóm 20 · Phần cứng — USB, cổng song song, và UART Nhóm 20 · Thiết bị — USB và cổng máy in Group 20 · Hardware — USB, parallel ports, and UARTs
nousbkhông khởi tạo phân hệ USB 16.lp=[0|port[,port...]|reset|auto]chỉ định cổng song song: dạnglp=port1,port2...gán một chuỗi cổng cho các thiết bị bắt đầu từlp0, và sách cho ví dụlp=none,parport0để bỏ cấu hìnhlp0và khiếnlp1dùng cổng song song đầu tiên;lp=0tắt trình điều khiển máy in;lp=resetđặt lại các máy in gắn vào;lp=autokhiến nhân xem xét mã định danh thiết bị từ từng cổng để xác định có máy in tương thích IEEE 1284 hay không 16.parport=đặt thiết lập trình điều khiển cổng song song theo thứ tự chỉ định, bắt đầu từparport0;autoép dùng thiết lập IRQ/DMA đã phát hiện, trong khi mặc định là bỏ qua chúng vì có thể xung đột 16.parport_init_mode=[spp|ps2|epp|ecp|ecpepp]đặt chế độ vận hành — sách nói nó cần cho máy Pegasos, nơi phần sụn không có tùy chọn đặt chế độ cổng song song 16.nr_uarts=nđặt số UART tối đa được đăng ký 16.Nhóm này về thiết bị cắm ngoài.
nousbtắt hẳn USB 16. Mấy númlp=vàparport=là về cổng máy in đời cũ:lp=0tắt máy in,lp=resetđặt lại máy in 16.nr_uarts=giới hạn số cổng nối tiếp 16. Nhớ nhé: nhóm này nhiều dấu vết của máy tính hai mươi năm trước.nousbleaves the USB subsystem uninitialised 16.lp=[0|port[,port...]|reset|auto]specifies the parallel port: thelp=port1,port2...form associates a sequence of ports with devices starting atlp0, the book's example beinglp=none,parport0to suppresslp0and makelp1use the first parallel port;lp=0disables the printer driver;lp=resetresets attached printers;lp=automakes the kernel examine each port's device ID to determine whether an IEEE 1284-compatible printer is attached 16.parport=sets parallel port driver settings in the order given, starting atparport0;autoforces use of detected IRQ/DMA settings, whereas the default is to ignore them because of possible conflicts 16.parport_init_mode=[spp|ps2|epp|ecp|ecpepp]sets the operating mode — the book notes it is necessary on the Pegasos computer, whose firmware has no option for setting the parallel port mode 16.nr_uarts=nsets the maximum number of UARTs registered 16.Bạn thấy nó ở đâu. Ba trong bốn tham số còn nguyên tên:
lp=,parport=,parport_init_mode=vànr_uarts=đều còn trong tài liệu hiện hành 17. Nhưngnousbthì không còn đứng một mình: nó nay làusbcore.nousb17 — đúng theo cú pháp dấu chấm mà chính chương này mở đầu bằng cách giới thiệu 2.Gặp ở đâu. Hầu hết núm vẫn nguyên tên; riêng
nousbnay phải viết làusbcore.nousb17. Nhớ nhé: đúng cú pháp dấu chấm mà chương này dạy ở đầu bài.Where you see it. Three of the four keep their names:
lp=,parport=,parport_init_mode=andnr_uarts=all survive today 17. Butnousbno longer stands alone: it is nowusbcore.nousb17 — exactly the dot syntax this very chapter opens by introducing 2. -
timer-specific options
Nhóm 21 · Đồng hồ — sáu công tắc vá cho các con chip cụ thể Nhóm 21 · Đồng hồ — vá cho chip cụ thể Group 21 · Timers — six switches patching specific chips
Sách nói thẳng mục đích: các tùy chọn này ghi đè hành vi mặc định của nhân để sửa vấn đề với một số con chip nhất định 16.
enable_timer_pin_1bật chân 1 của bộ định thời APIC, hữu ích để vá lỗi chipset — sách nêu đích danh một số chipset ATI — và nói rõ nhân có cố đặt một mặc định hợp lý, nhưng đôi khi cần tùy chọn này để ghi đè 16;disable_timer_pin_1làm ngược lại, hữu ích vì cùng lý do 16.enable_8254_timerbật định tuyến ngắt 0 qua chip 8254 bên cạnh định tuyến qua IO-APIC, vàdisable_8254_timertắt nó 16.hpet=disabletắt nguồn định thời HPET và bảo nhân dùng PIT thay thế 16.clocksource=[hpet|pit|tsc|acpi_pm|cyclone|scx200_hrt]ghi đè nguồn đồng hồ mặc định 16.Nhóm này sinh ra để vá lỗi đồng hồ trên vài dòng chip cụ thể 16. Có cặp công tắc bật/tắt chân 1 của bộ định thời 16, cặp bật/tắt chip 8254 16, và
clocksource=để chọn nguồn đếm thời gian khác 16. Nhớ nhé: máy chạy sai giờ hay bị giật thì nghĩ tới nguồn đồng hồ.The book states the purpose plainly: these override default kernel behaviour to fix problems with certain chips 16.
enable_timer_pin_1enables pin 1 of the APIC timer, useful for working around chipset bugs — the book names some ATI chipsets in particular — noting that the kernel tries to set a reasonable default but sometimes this option is needed to override it 16;disable_timer_pin_1does the reverse, useful for the same reasons 16.enable_8254_timerenables interrupt 0 timer routing over the 8254 chip in addition to routing over the IO-APIC, anddisable_8254_timerdisables it 16.hpet=disabledisables the HPET timer source and tells the kernel to use PIT instead 16.clocksource=[hpet|pit|tsc|acpi_pm|cyclone|scx200_hrt]overrides the default clocksource 16.Bạn thấy nó ở đâu.
hpet=nay có bốn giá trịenable(mặc định),disable,force,verbose— trong đódisablegiữ đúng nghĩa sách ghi 17.clocksource=còn nhưng tài liệu không còn liệt kê danh sách cố định; nó nhận một chuỗi tên và nói rõ tên khả dụng tùy nền tảng, vớijiffieslà nguồn cơ sở dự phòng 17. Cặpenable_timer_pin_1/disable_timer_pin_1vẫn còn, nhưng cặpenable_8254_timer/disable_8254_timerthì đã biến mất 17.Gặp ở đâu.
clocksource=còn dùng được, nhưng danh sách tên trong sách đã cũ — nay tên nào dùng được là tùy máy 17. Cặp núm về chip 8254 thì không còn 17. Nhớ nhé: danh sách giá trị trong sách phải kiểm lại, đừng chép thẳng.Where you see it.
hpet=now takes four values —enable(default),disable,force,verbose— of whichdisablekeeps exactly the book's meaning 17.clocksource=survives but no longer carries a fixed list; it takes a name string and states that available names depend on the platform, withjiffiesas the base fallback 17. Theenable_timer_pin_1/disable_timer_pin_1pair remains, whileenable_8254_timer/disable_8254_timerhas vanished 17. -
miscellaneous options
Nhóm 22 · Linh tinh — cái hộp cuối, và cũng là cái hộp hữu dụng nhất Nhóm 22 · Linh tinh — hộp cuối, nhiều đồ dùng được Group 22 · Miscellaneous — the last box, and the most useful one
Sách định nghĩa nhóm này bằng một tiêu chí rõ: đây là những tùy chọn luôn có sẵn, không phụ thuộc vào một phân hệ hay phần cứng cụ thể nào 16. Đó chính là lý do nó hữu dụng. Ba tham số đáng thuộc lòng:
panic=nđặt số giây nhân đợi sau một lần hoảng loạn trước khi khởi động lại, và giá trị mặc định 0 nghĩa là không khởi động lại — nhân chỉ dừng hẳn 16;pause_on_oops=nbảo nhân dừng mọi CPU sau lần oops đầu tiên trong n giây, hữu ích khi các bản oops cứ trôi khỏi màn hình trước khi bạn kịp chép lại hoặc chụp ảnh 16;elevator=[anticipatory|cfq|deadline|noop]chọn bộ lập lịch I/O, và sách trỏ sang Chương 11 để xem danh sách 16. Còn lại:dhash_entries=ncho bộ đệm dentry,hashdist=[0|1]phân tán các bảng băm lớn qua các nút NUMA,max_loop=nđặt số thiết bị loopback tối đa từ 1 đến 256,combined_mode=[combined|ide|libata]chọn trình điều khiển dùng cổng IDE, vàprofile=[schedule,][number]điều khiển bộ định hình nhân — sách nói cách dùng phổ biến nhất làprofile=216.Nhóm cuối gom những núm luôn dùng được, không cần thiết bị gì đặc biệt 16. Đáng nhớ nhất:
panic=10bảo nhân tự khởi động lại sau 10 giây nếu sụp — vì mặc định là đứng im mãi mãi 16.pause_on_oops=giữ màn hình lỗi lại để bạn kịp chụp ảnh 16. Nhớ nhé: máy chủ ở xa thì nên đặtpanic=, không thì nó nằm chết chờ bạn tới.The book defines this group by a clear test: these options should always be available and do not depend on any specific subsystem or hardware being present 16. That is exactly why it is useful. Three worth memorising:
panic=nsets the seconds the kernel waits after a panic before rebooting, and the default of 0 means it will not reboot at all — it simply halts 16;pause_on_oops=nhalts all CPUs after the first oops for n seconds, useful when oopses keep scrolling off the screen before you can write them down or photograph them 16;elevator=[anticipatory|cfq|deadline|noop]picks the I/O scheduler, with the book pointing to Chapter 11 for the list 16. The rest:dhash_entries=nfor the dentry cache,hashdist=[0|1]distributing large hashes across NUMA nodes,max_loop=nsetting the maximum loopback devices from 1 to 256,combined_mode=[combined|ide|libata]choosing which driver uses the IDE ports, andprofile=[schedule,][number]controlling the kernel profiler — the book notes the most common use isprofile=216.Bạn thấy nó ở đâu.
panic=đã mở rộng theo cách rất đáng biết: tài liệu hiện hành ghi ba vùng giá trị — lớn hơn 0 là số giây trước khi khởi động lại, bằng 0 là đợi mãi mãi, và nhỏ hơn 0 là khởi động lại ngay lập tức 17. Giá trị âm này không có trong sách 16.Gặp ở đâu.
panic=nay có thêm một nấc sách chưa có: số âm nghĩa là khởi động lại ngay, không đợi giây nào 17. Nhớ nhé: số dương là đợi, số 0 là nằm chờ, số âm là chạy lại liền.Where you see it.
panic=has grown in a way worth knowing: current documentation gives three ranges — greater than 0 is seconds before rebooting, 0 waits forever, and less than 0 reboots immediately 17. That negative value is not in the book 16.elevator= đã chết, và cách nó được thay
elevator=không còn trong danh sách tham số hiện hành 17, và bốn bộ lập lịch mà sách liệt kê —anticipatory,cfq,deadline,noop16 — đều không còn. Tài liệu khối hiện hành nêu bốn cái khác hẳn:mq-deadline,none,bfq,kyber, và cách đặt cũng đổi — ghi tên vào/sys/block/<dev>/queue/schedulercho từng thiết bị, thay vì một tham số khởi động cho cả hệ 19.Hai cái mất, hai cái còn
combined_mode=cũng đã biến mất 17 — cùng với thời kỳ trình điều khiển IDE cũ và libata tranh nhau cùng một cổng, và với nó là cảnh báo của sách rằng chọnidehaylibatacó thể đổi tên thiết bị, ví dụhdcthànhsdb16. Còn nguyên:dhash_entries=,hashdist=(nay ghi rõ mặc định bật trên NUMA 64 bit, tắt ở nơi khác),max_loop=(nay là số thiết bị tạo sẵn lúc khởi tạo, mặc định theoBLK_DEV_LOOP_MIN_COUNT, và có bí danhloop.max_loop),pause_on_oops=vàprofile=(nay thêm kiểu định hìnhkvm) 17.
Ba hiểu lầm thường gặpThree common misconceptions
“Chương 9 là danh sách đầy đủ”“Chapter 9 is the complete list”
Hiểu lầm: tra không thấy trong chương thì tham số đó không tồn tại. Thực tế: sách nói ngay trang đầu rằng một số tùy chọn theo kiến trúc và theo trình điều khiển riêng lẻ không được liệt kê, và muốn danh sách đầy đủ thì xem tệp Documentation/kernel-parameters.txt trong cây mã nguồn cùng các tệp tài liệu riêng theo kiến trúc 1. Bản kết xuất hiện hành của tệp đó đọc được trực tuyến 17.
Myth: if it is not in the chapter, the parameter does not exist. Fact: the book says on its first page that a number of architecture-specific and individual driver options are not listed, and that for a complete list you should see Documentation/kernel-parameters.txt in the kernel source tree plus the individual architecture-specific documentation files 1. Today's rendering of that same file is available online 17.
“Gõ đúng tên là nó sẽ chạy”“Spelling it right makes it work”
Hiểu lầm: không có thông báo lỗi nghĩa là tham số đã có tác dụng. Thực tế: hầu hết tham số gắn với một phân hệ và chỉ chạy nếu nhân được cấu hình có phân hệ đó dựng vào, đồng thời phần cứng liên quan phải hiện diện 1; và tên phân biệt chữ hoa chữ thường 1. Nhân bỏ qua trong im lặng — bằng chứng duy nhất là nhật ký khởi động của phân hệ đó.
Myth: no error message means the parameter took effect. Fact: most parameters are associated with a subsystem and work only if the kernel is configured with it built in and the associated hardware is present 1; and names are case-sensitive 1. The kernel ignores them silently — the only evidence is that subsystem's boot log.
“Sách in năm 2006 nên chép được nguyên xi”“It is in print, so copy it verbatim”
Hiểu lầm: tham số in trong sách thì gõ thẳng vào GRUB là được. Thực tế: chương này chụp lại dòng nhân 2.6 năm 2006 1. Đối chiếu với danh sách hiện hành cho thấy có tham số đã đổi tiền tố (rcu. → rcutree., nousb → usbcore.nousb, max_luns → scsi_mod.max_luns), có tham số đã biến mất hẳn (elevator=, migration_cost=, max_addr=, load_ramdisk=), và có tham số đổi cả mặc định (selinux=) 1718. Bản thân sách cũng có lỗi in: mục rhash_entries in khuôn dạng là dhash_entries=n 15.
Myth: a parameter printed in the book can be typed straight into GRUB. Fact: the chapter is a snapshot of the 2.6 series in 2006 1. Checked against today's list, some parameters changed prefix (rcu. → rcutree., nousb → usbcore.nousb, max_luns → scsi_mod.max_luns), some vanished (elevator=, migration_cost=, max_addr=, load_ramdisk=), and one changed its default (selinux=) 1718. The book carries typos of its own: the rhash_entries entry prints its format as dhash_entries=n 15.
Tự kiểmSelf-check
Tự kiểm trước khi sang chương 10 Tự hỏi mình vài câu Self-check before Chapter 10
Chương tra cứu không đòi bạn thuộc lòng. Nó đòi bạn biết đường vào: nhóm nào chứa thứ bạn cần, và bằng cách nào bạn xác minh một tham số trước khi đưa nó vào dòng khởi động của một máy đang chạy.
Chương này không bắt học thuộc. Chỉ cần biết tìm ở đâu và kiểm lại thế nào thôi. Nhớ nhé: biết tra là đủ, không cần nhớ hết.
A reference chapter does not ask you to memorise. It asks you to know the way in: which group holds what you need, and how you verify a parameter before putting it on the boot line of a running machine.
- Bạn kể được ba đường truyền tùy chọn vào nhân, và nói được đường nào phù hợp cho một thay đổi cụ thể bạn đang cân nhắc?
Đáp án của sách: lúc dựng, lúc khởi động, và lúc chạy qua
/procvà/sys1. Chọn sai đường là gõ bao nhiêu cũng không có tác dụng. - Máy bạn không khởi động được và bạn chỉ có màn hình trắng. Bạn với tay vào những nhóm nào trước?
Console để nghe được nhân nói 3; Đĩa gốc để chỉ đúng ổ 9; Init để vào được trình bao 9; và nếu nghi phần sụn, nhóm Ngắt với
irqpoll4. - Bạn giải thích được vì sao một tham số gõ đúng chính tả vẫn có thể hoàn toàn không có tác dụng?
Vì hầu hết tham số gắn với một phân hệ và chỉ chạy khi phân hệ đó được dựng vào nhân và phần cứng tương ứng có mặt 1; cộng thêm việc tên phân biệt chữ hoa chữ thường 1.
- Trước khi đưa một tham số từ chương này vào dòng khởi động thật, bạn làm gì để kiểm chứng?
Đối chiếu với tài liệu
kernel-parametershiện hành 17; nếu không thấy tên, tìm theo mô tả và thử các tiền tố module họ hàng trước khi kết luận nó đã bị gỡ. - Bạn nêu được ít nhất một tham số trong chương đã đổi tiền tố, và một tham số đã biến mất hẳn?
Đổi tiền tố:
rcu.blimitthànhrcutree.blimit17, hoặcmax_lunsthànhscsi_mod.max_luns18. Biến mất:elevator=17, nay thay bằng việc ghi vào/sys/block/<dev>/queue/schedulercho từng thiết bị 19. - Bạn biết đặt
panic=có tác dụng gì trên một máy chủ ở xa, và mặc định của nó là gì?Mặc định 0 nghĩa là nhân không khởi động lại sau khi hoảng loạn; nó chỉ dừng hẳn 16. Với máy ở xa, đó nghĩa là nằm chết cho tới khi có người tới.
- Có mấy cách để dặn nhân, và mỗi cách dùng lúc nào?
- Máy không lên, màn hình trắng — bạn thử nhóm nào trước?
- Vì sao gõ đúng tên mà vẫn không thấy gì xảy ra?
- Trước khi gõ một tham số trong sách vào máy thật, bạn kiểm ở đâu?
- Bạn kể được một tham số trong sách nay đã đổi tên không?
- Nhớ nhé: trả lời được cả năm câu thì sang chương 10 được rồi.
- Can you name the three ways to pass options to the kernel, and say which one fits a change you are actually considering?
The book's answer: when building, when starting, and at runtime through
/procand/sys1. - Your machine will not boot and all you have is a blank screen. Which groups do you reach for first?
Console to hear the kernel at all 3; Root Disk to point at the right device 9; Init to reach a shell 9; and, if firmware is suspect, Interrupts with
irqpoll4. - Can you explain why a correctly spelled parameter can still do nothing at all?
Because most are tied to a subsystem that must be built in, with the matching hardware present 1, and because the names are case-sensitive 1.
- Before putting a parameter from this chapter on a real boot line, what do you do to verify it?
- Can you name at least one parameter here that changed prefix, and one that disappeared?
- Do you know what setting
panic=does on a remote server, and what its default is?
Đọng lạiWhat remains
Hai mươi hai nhóm tham số không phải là thứ để thuộc, mà là một bản đồ những chỗ nhân chịu nghe lời. Và vì chương này chỉ là một bản chụp của tài liệu sống trong cây mã nguồn, nên việc cuối cùng bạn học được ở đây không phải là một tham số nào cả — mà là thói quen đối chiếu trước khi gõ.
Hai mươi hai nhóm này là tấm bản đồ chỗ nào nhân chịu nghe bạn, không phải bài học thuộc lòng. Sách in năm 2006, nên thứ đáng mang theo nhất là thói quen kiểm lại trước khi gõ. Nhớ nhé: tra rồi hãy gõ.
Twenty-two groups of parameters are not something to memorise; they are a map of the places the kernel is willing to listen. And because this chapter is only a snapshot of documentation that lives in the source tree, the last thing you learn here is not any parameter at all — it is the habit of checking before you type.