Bí ẩn về phần cứng “vô hình”
Bạn vừa lắp một card mạng Mellanox 10GbE hoặc bộ điều khiển NVMe cao cấp, nhưng lệnh ip link hoặc lsblk không hiển thị bất cứ thứ gì. Phần cứng đã được cắm chặt, đèn LED đang nhấp nháy, nhưng hệ điều hành lại coi như nó không tồn tại. Đây thường không phải là lỗi phần cứng. Thay vào đó, đó là dấu hiệu điển hình của một module kernel bị thiếu hoặc chưa được kích hoạt.
Linux sử dụng thiết kế dạng module. Hãy coi các module kernel (tệp .ko) như các plugin bổ sung tính năng tức thì mà không yêu cầu khởi động lại toàn bộ hệ thống. Khi các module này không nạp được—hoặc khi driver bị hỏng sau một đợt apt upgrade định kỳ—hiệu suất và sự ổn định của hệ thống sẽ bị đe dọa ngay lập tức.
Bên trong Kernel dạng Module
Tại sao không build mọi thứ trực tiếp vào kernel? Nếu mọi driver cho mọi thiết bị phần cứng được sản xuất từ năm 1991 đều được biên dịch trực tiếp vào image vmlinuz, kernel sẽ trở nên khổng lồ. Nó sẽ chiếm dụng hàng trăm megabyte RAM chỉ để hỗ trợ những phần cứng mà bạn thậm chí không sở hữu. Thay vào đó, kernel luôn tinh gọn, chỉ nạp mã nguồn cụ thể cần thiết cho môi trường của bạn.
Kiểm tra hệ thống với lsmod
Trước khi bắt đầu thay đổi cấu hình, bạn cần xem những gì hiện đang chạy. Lệnh lsmod lấy dữ liệu từ /proc/modules để hiển thị stack đang hoạt động. Trong một môi trường server Ubuntu điển hình, bạn có thể thấy từ 80 đến 120 module được nạp tại bất kỳ thời điểm nào.
lsmod | head -n 10
Kết quả trả về gồm ba cột: Module, Size (Kích thước), và Used by (Được dùng bởi). Hãy chú ý kỹ đến cột “Used by”. Nếu bạn cố gắng gỡ một module có số lượng sử dụng khác không, kernel sẽ chặn yêu cầu đó để ngăn chặn tình trạng sập hệ thống hoặc kernel panic ngay lập tức.
Tìm hiểu sâu với modinfo
Nếu bạn gặp một tên module mơ hồ như overlay hoặc iwlwifi, đừng đoán mục đích của nó. Hãy sử dụng modinfo để kiểm tra:
modinfo iwlwifi
Lệnh này liệt kê nhà phát triển, giấy phép và quan trọng nhất là các tham số (parameters) khả dụng. Ví dụ, nếu Wi-Fi Intel của bạn bị mất kết nối, modinfo có thể tiết lộ tham số power_save mà bạn có thể tinh chỉnh để ổn định đường truyền.
Quản lý chủ động với modprobe
Trước đây, các quản trị viên thường dùng insmod và rmmod. Những công cụ này khá “thô sơ” vì chúng không hiểu các mối quan hệ phụ thuộc. Nếu Module A cần Module B để hoạt động, insmod sẽ đơn giản là báo lỗi. modprobe là tiêu chuẩn hiện đại vì nó tự động xử lý toàn bộ chuỗi phụ thuộc.
Nạp và gỡ module tức thì
Để đưa một module và các phụ thuộc cần thiết của nó vào kernel đang chạy, hãy sử dụng:
sudo modprobe [tên_module]
Để gỡ bỏ một cách an toàn:
sudo modprobe -r [tên_module]
Hiệu suất rất quan trọng trong môi trường production. Khi tối ưu hóa một gateway web lưu lượng cao trên Ubuntu 22.04 với 4GB RAM, tôi đã loại bỏ các module không sử dụng như floppy, bluetooth, và joydev. Việc này đã giảm mức chiếm dụng bộ nhớ của kernel khoảng 120MB và giảm nhẹ độ trễ ngắt (interrupt latency).
Cập nhật danh sách phụ thuộc
modprobe dựa vào tệp modules.dep. Nếu bạn tự biên dịch một driver hoặc di chuyển các tệp .ko, modprobe sẽ không tìm thấy chúng cho đến khi bạn cập nhật bản đồ phụ thuộc. Hãy chạy sudo depmod -a để buộc kernel lập chỉ mục lại các module khả dụng và sửa các lỗi về đường dẫn.
Thiết lập vĩnh viễn và Blacklisting
Các lệnh modprobe thủ công chỉ có tác dụng tạm thời và sẽ biến mất sau khi khởi động lại. Để driver luôn được nạp mỗi khi hệ thống khởi động, hãy thêm tên của nó vào /etc/modules hoặc tạo một tệp cấu hình riêng trong /etc/modules-load.d/.
# Buộc nạp interface mạng ảo (dummy) để thử nghiệm
echo "dummy" | sudo tee /etc/modules-load.d/dummy.conf
Loại bỏ các driver gây lỗi
Xung đột driver là chuyện thường xuyên xảy ra, đặc biệt là với card đồ họa. Driver mã nguồn mở nouveau thường xung đột với driver NVIDIA độc quyền. Để ngăn một module không được nạp hoàn toàn, bạn phải đưa nó vào danh sách đen (blacklist) trong /etc/modprobe.d/.
# Tạo một tệp blacklist
sudo nano /etc/modprobe.d/blacklist-nouveau.conf
# Thêm các dòng sau:
blacklist nouveau
options nouveau modeset=0
Sau khi sửa đổi các tệp này, bạn phải chạy sudo update-initramfs -u. Điều này đảm bảo danh sách đen được tích hợp vào môi trường boot sớm trước khi kernel mount hệ thống tệp gốc của bạn.
Tự động Rebuild với DKMS
Ít có điều gì gây gián đoạn hệ thống như một bản vá bảo mật kernel làm hỏng các driver bên thứ ba của bạn. Nếu bạn sử dụng các driver ngoài luồng (out-of-tree)—như ZFS, VirtualBox hoặc các driver RAID chuyên dụng—chúng được liên kết với một phiên bản kernel cụ thể. Khi phiên bản kernel thay đổi, driver sẽ ngừng hoạt động.
Dynamic Kernel Module Support (DKMS) chính là giải pháp. Nó phát hiện khi một kernel mới được cài đặt và tự động biên dịch lại các driver của bạn dựa trên các header mới. Nó biến một công việc biên dịch thủ công tốn 20 phút thành một tiến trình chạy ngầm diễn ra trong quá trình apt upgrade.
Kiểm tra trạng thái DKMS hiện tại bằng:
dkms status
Nếu một module bị kẹt ở trạng thái “added”, bạn có thể buộc build thủ công:
sudo dkms install -m [tên_module] -v [phiên_bản]
Khắc phục sự cố với Kernel Ring Buffer
Khi modprobe thất bại với lỗi mơ hồ “Operation not permitted,” câu trả lời thực sự nằm trong kernel ring buffer. Hãy sử dụng dmesg để xem chính xác lý do kernel từ chối.
Hãy chú ý ba dấu hiệu cảnh báo sau:
- Unknown symbol: Module của bạn có khả năng được biên dịch cho một phiên bản kernel khác (hãy kiểm tra trạng thái DKMS).
- Signature failure: UEFI Secure Boot đang bật và bạn chưa ký module tùy chỉnh của mình bằng MOK (Machine Owner Key).
- Missing firmware: Module đã được nạp, nhưng nó đang tìm kiếm một tệp binary blob trong
/lib/firmwaremà không thấy.
Làm chủ lsmod, modprobe và dkms sẽ biến kernel Linux từ một “hộp đen” bí ẩn thành một thành phần minh bạch và dễ quản lý trong hạ tầng của bạn.

