- Việc tự biên dịch nhân hệ điều hành cho phép bạn tối ưu hóa hiệu năng, bảo mật và khả năng hỗ trợ. phần cứng Điều chỉnh các mô-đun, hệ thống tập tin và các tùy chọn cụ thể.
- Quy trình chuẩn bao gồm cài đặt các thư viện phụ thuộc, tải xuống mã nguồn từ kernel.org, sử dụng lại cấu hình hiện tại và cấu hình bằng lệnh make menuconfig hoặc xconfig.
- Việc biên dịch và cài đặt nhân hệ điều hành và các mô-đun, tạo initramfs chính xác và tích hợp nhân hệ điều hành mới vào GRUB là điều cần thiết để đảm bảo hoạt động ổn định. khởi động được tẩy rửa.
- Việc duy trì các nhân hệ điều hành cũ và biết cách khôi phục hoặc gỡ bỏ một nhân hệ điều hành có vấn đề là chìa khóa để thử nghiệm an toàn trên bất kỳ bản phân phối nào.

Biên dịch nhân của Linux Đó là một trong những nhiệm vụ phân biệt người dùng tò mò với người dùng thực sự muốn tìm hiểu. để tìm hiểu sâu về hệ điều hànhViệc này không bắt buộc khi sử dụng GNU/Linux hàng ngày, nhưng nó là một cách tuyệt vời để hiểu rõ hơn cách máy tính của bạn hoạt động, tận dụng tối đa phần cứng và tinh chỉnh hệ thống theo ý thích của bạn.
Trong hướng dẫn này, bạn sẽ thấy từng bước một, cách Tải xuống, cấu hình, biên dịch và cài đặt nhân Linux từ đầu. Chúng ta sẽ tìm hiểu về các bản phân phối dựa trên Debian (Debian, Ubuntu, Mint và các bản phái sinh), cũng như các khái niệm chung áp dụng cho các dòng hệ điều hành khác như Fedora hoặc CentOS. Chúng ta cũng sẽ khám phá lý do tại sao bạn muốn thực hiện việc này, những công cụ bạn cần, cách tái sử dụng cấu hình kernel hiện tại, cách điều chỉnh các tùy chọn cho Docker hoặc phần cứng cụ thể và cách khôi phục nếu có sự cố xảy ra.
Tại sao bạn có thể quan tâm đến việc tự biên dịch nhân hệ điều hành của riêng mình?
Trước khi động vào bất cứ thứ gì, điều quan trọng là phải xác định rõ bạn muốn gì: Việc biên dịch nhân hệ điều hành không phải lúc nào cũng cần thiết.Nhưng có một số lý do thuyết phục để làm như vậy.
- hiệu suất và hiệu quảViệc gỡ bỏ các trình điều khiển và tính năng mà bạn không bao giờ sử dụng có thể giúp hệ thống khởi động nhanh hơn, sử dụng ít RAM hơn và giảm độ trễ trong một số tác vụ nhất định.
- An ninhViệc vô hiệu hóa các tính năng hoặc mô-đun không cần thiết sẽ làm giảm bề mặt tấn công. Trong nhiều trường hợp, một nhân hệ điều hành tối giản hơn sẽ an toàn hơn.
- Hỗ trợ phần cứng cụ thểĐôi khi bản phân phối của bạn chưa bao gồm trình điều khiển bạn cần, hoặc nó đã bị vô hiệu hóa; bằng cách biên dịch nhân hệ điều hành của riêng mình, bạn có thể... kích hoạt hỗ trợ dành riêng cho phần cứng của bạn (card mạng, RAID, thiết bị của) lưu trữ (không phổ biến, v.v.).
- Chức năng đặc biệtBạn có thể muốn thử một trình lập lịch tác vụ mới, các tính năng cụ thể dành cho ảo hóa, Docker, container, BPF, io_uring hoặc bất kỳ tính năng nâng cao nào khác không được bật theo mặc định.
- Học tập và thử nghiệmBiên dịch nhân hệ điều hành là một cách rất đơn giản để Tìm hiểu cách hệ thống GNU/Linux được tổ chức bên trong.Cách thức khởi tạo phần cứng và cách tích hợp các mô-đun.
Tuy nhiên, đối với người dùng gia đình chỉ muốn bật máy tính, lướt internet và không làm gì khác, Việc biên dịch nhân hệ điều hành bằng tay giống như dùng súng đại bác để diệt ruồi.Đây là một quá trình dài và tinh tế, và việc ăn một ít thức ăn trong suốt quá trình là điều bình thường. hạt nhân hoảng loạn Trước khi tinh chỉnh nó. Nếu bạn thích mày mò, cứ thoải mái; nếu không, tốt nhất là nên sử dụng các gói chính thức dành cho bản phân phối của bạn.
Nhân Linux thực chất là gì?
Nhân Linux là thành phần trung tâm của hệ thống: Phần mềm nằm giữa phần cứng và các chương trình còn lại.Nó chịu trách nhiệm quản lý bộ nhớ, các tiến trình, hệ thống tập tin, thiết bị đầu vào/đầu ra, mạng, bảo mật và nhiều hơn nữa.
Linux bắt đầu vào năm 1991 với tên gọi một dự án cá nhân của Linus Torvalds để tạo ra một nhân hệ điều hành miễn phí. Kể từ đó, nó đã phát triển vượt bậc: ngày nay chúng ta đang nói về hàng chục triệu dòng mã, được duy trì bởi hàng nghìn nhà phát triển theo giấy phép này. GPLv2Hệ thống mà chúng ta thường gọi là "Linux" thực chất là sự kết hợp của... Nhân Linux + các công cụ GNU và các thành phần khác những người chịu trách nhiệm lắp ráp hệ thống phân phối.
Khi bạn biên dịch một nhân tùy chỉnh, điều bạn làm là tạo ra một tệp nhị phân (thường là...) /boot/vmlinuz-version) cộng với một bộ mô-đun trong /lib/modules/version, kèm theo các tệp như System.map, The cấu hình với cấu hình được sử dụng và ảnh khởi động ban đầu (initrd hoặc initramfs).
Các công cụ cơ bản cần thiết để biên dịch nhân hệ điều hành.
Để biên dịch nhân Linux từ mã nguồn, bạn cần một môi trường phát triển hoàn chỉnh. Trên các hệ thống Debian, Ubuntu và Mint, điều này thường bao gồm việc cài đặt... build-essential và một số thư viện và tiện ích bổ sung khác..
Nhiều cẩm nang kinh điển khuyên dùng các bộ trang bị như sau (Bạn có thể điều chỉnh chúng sao cho phù hợp với bố cục của mình.):
- Cấu hình tối thiểu trong Debian/Ubuntu đối với một nhân hệ điều hành tương đối hiện đại:
sudo apt-get install build-essential libncurses-dev bison flex libssl-dev libelf-dev libudev-dev libpci-dev libiberty-dev dkms openssl bc autoconf - Môi trường đóng gói Debian Để xây dựng các gói .deb kernel:
sudo apt install autoconf automake autotools-dev bison build-essential dh-make debhelper debmake devscripts dpkg fakeroot file gfortran git gnupg fp-compiler lintian patch pbuilder perl quilt xutils-dev
Trên Fedora, CentOS và các hệ điều hành phái sinh.Phương pháp có thay đổi đôi chút, nhưng ý tưởng vẫn giữ nguyên: cài đặt một bộ công cụ phát triển và các thư viện cho giao diện cấu hình (văn bản và đồ họa). Ví dụ, những thư viện sau đây thường được sử dụng. lệnh về phong cách:
su -c 'yum groupinstall "Development Tools"'
su -c 'yum install ncurses-devel qt-devel unifdef'
Nếu thiếu các thư viện phụ thuộc này, quá trình biên dịch sẽ thất bại khá nhanh, vì vậy... Việc chuẩn bị môi trường trước khi tải xuống mã nguồn là điều cần thiết..
Tải xuống mã nguồn nhân Linux ở đâu?
Nguồn chính thức để lấy mã nguồn nhân là kernel.orgTừ đó, bạn có thể chọn giữa các phiên bản chính thức, ổn định và hỗ trợ dài hạn (LTS). Mỗi phiên bản đều có thư mục riêng và liên kết đến tệp tin. tập tin nén Viên thuốc.
Một số ví dụ về tải thường thấy Các bài hướng dẫn bao gồm:
- Phiên bản kernel ổn định 6.6 được sử dụng cho các thử nghiệm gần đây:
wget https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.6.tar.xz - Kernel 6.0.11 (nhánh v6.x):
wget https://mirrors.edge.kernel.org/pub/linux/kernel/v6.x/linux-6.0.11.tar.xz - Kernel 5.10.13 (nhánh v5.x):
wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.10.13.tar.xz
Bạn cũng có thể tải xuống các phông chữ từ... kho lưu trữ của bản phân phối của bạnVí dụ, trong Debian/Ubuntu, có gói phần mềm này. nguồn linux:
sudo apt-get install linux-source
Điều này để lại một tệp có dạng linux-source-xxxtar.bz2 en / usr / srcBạn có thể giải nén nó theo cách tương tự như tệp nén tarball của kernel.org.
Chuẩn bị cây thư mục nguồn và dung lượng đĩa.
Sau khi tải xuống tệp nén kernel, bạn cần giải nén nó vào một vị trí mà bạn có thể đủ không gian và quyền viếtBạn không bắt buộc phải sử dụng /usr/src, mặc dù đó là một cách dùng phổ biến. Ví dụ, bạn có thể tạo một thư mục như thế này. ~/Downloads/my-kernels.
Hãy nhớ rằng, khi giải nén, cây thư mục nguồn có thể có kích thước khoảng... 1,5 GBvà trong quá trình biên dịch, mọi thứ dễ dàng vượt quá giới hạn. 7 GBVì vậy, hãy chừa nhiều khoảng trống để mắc sai lầm.
một số các ví dụ điển hình về giải nén âm thanh:
- Với tar.xz:
tar avxf linux-6.6.tar.xz - Với tar.bz2:
tar jxvf linux-2.6.36.tar.bz2 -C /usr/src - Với tar.gz:
tar zxvf linux-x.x.x.x.tar.gz -C /usr/src
Sau khi giải nén, bạn sẽ có một thư mục như sau: linux-6.6 o linux-5.10.13Bạn có thể tạo một liên kết tượng trưng chung có tên là linux Để tránh bị rối loạn với các tuyến đường:
cd /usr/src
sudo ln -s linux-6.0.11 linux
Việc đặt nguồn tham khảo không phải là bắt buộc. / usr / srcMặc dù nhiều hướng dẫn viên làm vậy vì lý do truyền thống. Quá trình biên dịch và cài đặt sẽ diễn ra tương tự cho dù bạn thực hiện trong thư mục người dùng của mình.với điều kiện bạn có đủ không gian và giấy phép cần thiết.
Tái sử dụng cấu hình nhân hiện tại
Việc cấu hình nhân hệ điều hành từ đầu, từng tùy chọn một, là một công việc không bao giờ kết thúc ngay cả đối với những người rất giàu kinh nghiệm. Thông thường thì người ta sẽ làm như sau: Tái sử dụng cấu hình kernel mà bạn đang dùng. như điểm khởi đầu.
Để làm được điều này, trước tiên cần phải biết Bạn đang sử dụng nhân hệ điều hành nào? tại thời điểm này:
uname -r
Kết quả sẽ giống như thế này: 6.1.0-13-amd64 o 4.19.0-6-amd64Với thông tin đó, bạn có thể sao chép cấu hình hiện tại từ / khởi động vào thư mục chứa các mã nguồn vừa được giải nén:
cd linux-6.6
cp /boot/config-$(uname -r) .config
Tệp đó .config Đây sẽ là phiên bản mà hệ thống biên dịch nhân hệ điều hành sử dụng làm cơ sở. Trong các phiên bản mới hơn, khi chạy các công cụ cấu hình, bạn sẽ chỉ được hỏi về... các tùy chọn không tồn tại trong nhân hệ điều hành trước đó của bạnĐiều này giúp tiết kiệm được rất nhiều thời gian.
Cách điều chỉnh cài đặt cho phù hợp với phần cứng thực tế
Ngoài việc tái sử dụng tệp .config hiện tại, bạn có thể tinh chỉnh nó hơn nữa bằng cách sử dụng các công cụ được cung cấp bởi chính cây mã nguồn kernel. Một công cụ đặc biệt hữu ích là tạo localmodconfig, nhằm mục đích tạo ra một cấu hình phù hợp với các mô-đun bạn đã tải tại thời điểm đó.
Trong thư mục mã nguồn, chỉ cần chạy lệnh sau:
make localmodconfig
Lệnh này kiểm tra các mô-đun đang hoạt động và Nó vô hiệu hóa nhiều thứ mà hệ thống của bạn không sử dụng.Điều này rất lý tưởng nếu bạn đang cấu hình nhân hệ điều hành cho một máy cụ thể. Nếu bạn dự định biên dịch một nhân hệ điều hành chung cho các máy hoặc máy chủ khác, bạn cần xem xét kỹ lưỡng sau đó để đảm bảo không bỏ sót phần cứng nào không có trên hệ thống mà bạn đang biên dịch.
Các chế độ cấu hình nhân hệ điều hành: môi trường văn bản và đồ họa
Việc cấu hình nhân hệ điều hành có thể được thực hiện theo nhiều cách. Tất cả các cách này đều dẫn đến việc tạo hoặc sửa đổi tệp tin. .configNhưng trải nghiệm sẽ rất khác nhau tùy thuộc vào chế độ:
- makeconfigMột bảng câu hỏi hoàn toàn dựa trên văn bản, từng câu hỏi một. Ngày nay, nó chỉ được coi là thiết thực trong những trường hợp rất cụ thể; đó là Chậm chạp, tẻ nhạt và dễ mắc lỗi..
- Làm cho menuconfigGiao diện menu dựa trên văn bản (ncurses), rất phổ biến trên máy chủ hoặc khi bạn không có môi trường đồ họa. Bạn điều hướng bằng các phím mũi tên, phím Tab và phím cách.
- làm cho xconfigGiao diện đồ họa dựa trên Qt, thoải mái khi sử dụng chuột. Lý tưởng khi làm việc trên màn hình máy tính để bàn đầy đủ.
- làm cho gconfigGiao diện đồ họa dựa trên GTK, được thiết kế cho môi trường kiểu GNOME.
Trong thực tế, Làm cho menuconfig Đây là phần quan trọng nhất trong hầu hết các hướng dẫn vì nó hoạt động hiệu quả trong hầu hết mọi trường hợp. Bắt đầu với tệp .config mà bạn đã sao chép, tất cả những gì bạn cần làm là:
make menuconfig
Bạn sẽ thấy một menu chính với các danh mục như "Loại và tính năng bộ xử lý", "Trình điều khiển thiết bị", "Hệ thống tệp", "Hỗ trợ mạng", "Ảo hóa", v.v. Trong mỗi danh mục, bạn có thể... kích hoạt, vô hiệu hóa hoặc đánh dấu là mô-đun Các lựa chọn khác nhau. Thông thường:
- [*] Nó có nghĩa là "được tích hợp sẵn".
- [M] Nó cho biết "nó được biên dịch như một mô-đun có thể tải được."
- [] Nó đã bị "vô hiệu hóa".
Ý tưởng là tích hợp vào nhân hệ điều hành những gì cần thiết để khởi động hệ thống (ví dụ: hỗ trợ ổ đĩa gốc), và sử dụng các mô-đun cho... Các tính năng ít quan trọng hơn hoặc các tính năng không phải lúc nào cũng được sử dụng.để nhân chính nhẹ hơn.
Mỗi món trong thực đơn thường có một tùy chọn để... Trợ giúp Phần này giải thích chính xác chức năng của nó và đôi khi cung cấp một giá trị đề xuất mặc định. Nếu bạn không chắc chắn về một điều gì đó cụ thể, tốt nhất nên sử dụng giá trị được đề xuất hoặc giá trị đã được kích hoạt trong cấu hình trước đó.
Các thiết lập hữu ích: hệ thống tệp, ảo hóa và Docker
Một phần quan trọng của việc tùy chỉnh nhân hệ điều hành là lựa chọn đúng đắn. Các hệ thống tệp, cơ chế chứa dữ liệu và các tùy chọn mạng nào? Bạn sẽ cần đến nó. Ví dụ, nếu bạn dự định sử dụng các phân vùng. NTFS Để ghi dữ liệu, bạn cần kích hoạt chức năng hỗ trợ tương ứng (thường nằm trong "Hệ thống tệp → Hệ thống tệp DOS/FAT/EXFAT/NT").
Nếu bạn dự định làm việc với ảo hóa hoặc container, có một số nhóm tùy chọn quan trọng cần xem xét. Ví dụ, đối với Docker và Docker Swarm, có một số... chức năng của không gian tên, cgroup và mạng phải được kích hoạt:
- hệ thống phân cấp cgroup.
CONFIG_NAMESPACES,CONFIG_NET_NS,CONFIG_PID_NS,CONFIG_IPC_NS,CONFIG_UTS_NS.CONFIG_CGROUPSvà các tùy chọn phụ nhưCONFIG_CGROUP_CPUACCT,CONFIG_CGROUP_DEVICE,CONFIG_CGROUP_FREEZER,CONFIG_CGROUP_SCHED,CONFIG_CPUSETS,CONFIG_MEMCG.- Hỗ trợ chính (
CONFIG_KEYS). - Các tùy chọn mạng như
CONFIG_VETH,CONFIG_BRIDGE,CONFIG_BRIDGE_NETFILTER,CONFIG_NF_NAT_IPV4,CONFIG_IP_NF_FILTER,CONFIG_IP_NF_TARGET_MASQUERADE,CONFIG_NETFILTER_XT_MATCH_ADDRTYPE,CONFIG_NETFILTER_XT_MATCH_CONNTRACK,CONFIG_NETFILTER_XT_MATCH_IPVS,CONFIG_IP_NF_NAT,CONFIG_NF_NAT,CONFIG_NF_NAT_NEEDED. - Hỗ trợ hàng đợi POSIX (
CONFIG_POSIX_MQUEUE). - Các tùy chọn như
CONFIG_IPVLANĐối với một số cấu hình mạng nhất định được Docker sử dụng.
Phần lớn chức năng này có thể được biên dịch thành một mô-đun mà không gặp vấn đề gì, nhưng Bạn nên xem lại tài liệu Docker hoặc sử dụng các tập lệnh kiểm thử.Có những tiện ích như... check-config.sh Những công cụ này phân tích tệp .config của nhân hệ điều hành và cho bạn biết những gì còn thiếu để đảm bảo khả năng tương thích container đầy đủ.
Các nguyên tắc cơ bản sẽ là:
chmod +x check-config.sh
./check-config.sh .config
Kết quả sẽ cho bạn biết tùy chọn nào ổn, tùy chọn nào bị thiếu hoặc tùy chọn nào bị cấu hình sai. Nếu bạn phát hiện bất kỳ tùy chọn quan trọng nào bị vô hiệu hóa, bạn có thể chạy lại chương trình. Làm cho menuconfig o làm cho xconfigHãy sửa lỗi, lưu lại và lặp lại quá trình xác minh.
Những cải tiến thú vị trong các phiên bản kernel gần đây.
Ngoài việc tùy chỉnh, nhiều người còn biên dịch các phiên bản mới của nhân hệ điều hành để... Tận dụng những cải tiến về hiệu năng và các tính năng mới. Việc này vẫn sẽ mất một thời gian để các gói hàng đến được tay người nhận.
Ví dụ, trong rama 6.6 Những cải tiến đã được đề cập bao gồm:
- Hiệu năng được cải thiện đáng kể trong EXT4., với mức tăng lên tới 34% đối với một số tải ghi đồng thời nhất định.
- Cải tiến về hỗ trợ GPU NVIDIA sử dụng trình điều khiển miễn phí Nouveau, chuẩn bị nền tảng cho trình điều khiển NVK (Vulkan).
- Tùy chọn cho cấu hình các khía cạnh của BIOS Từ thiết bị HP trực tiếp từ Linux.
- Cài đặt lập lịch cụm cho bộ xử lý lai Intel (Hồ Alder, Hồ Raptor và các hồ sau này).
- Tối ưu hóa I/O bất đồng bộ trực tiếp với io_uringVới mức tăng hiệu suất khoảng 37% trong một số bài kiểm tra nhất định.
- Một công cụ lập kế hoạch công việc mới, EEVDF (Hạn chót nộp hồ sơ trực tuyến đủ điều kiện sớm nhất)Điều này giúp cải thiện việc phân bổ CPU giữa các tiến trình.
Tất cả những tính năng này đều có sẵn trong các phiên bản hiện đại, nhưng quá trình đóng gói hoặc kích hoạt chúng trên hệ điều hành của bạn có thể mất thời gian, đó là lý do tại sao nhiều người phải tìm đến các giải pháp khác. biên dịch thủ công một nhân hệ điều hành mới hơn..
Biên dịch nhân hệ điều hành: lệnh make, các mô-đun và các luồng biên dịch.
Sau khi cấu hình xong theo ý muốn, đã đến lúc để CPU hoạt động. Đây là lúc các lệnh phát huy tác dụng. làm cho Quá trình biên dịch nhân hệ điều hành theo phương pháp truyền thống. Quá trình biên dịch có thể mất từ vài phút đến hơn một giờ, tùy thuộc vào phần cứng và số lượng mô-đun cần tạo.
Về bản chất, dòng chảy cơ bản Trong Debian/Ubuntu (hoặc các bản phân phối khác), nó thường là:
- Biên dịch nhân hệ điều hành (ảnh chính):
make -j$(nproc)
Hoặc, nếu bạn muốn nó chỉ sử dụng một lõi xử lý:
make - Biên dịch và cài đặt các mô-đun:
sudo make modules_install
các tùy chọn -j$(nproc) Lệnh này yêu cầu make sử dụng số lượng tiến trình song song tối đa bằng số lõi CPU của bạn, giúp tiết kiệm rất nhiều thời gian trên các máy tính hiện đại. Nếu bạn thấy lỗi trong quá trình biên dịch, bạn cần kiểm tra chúng tại điểm xảy ra lỗi; chúng có thể do... thiếu các thư viện phụ thuộc, cấu hình xung đột hoặc các lỗi cụ thể trong phiên bản nhân hệ điều hành đó..
Một số công thức nấu ăn nâng cao hơn sử dụng công cụ Debian. make-kpkg và gói gói hạt nhân Đóng gói nhân hệ điều hành thành các tệp .deb. Điều này cho phép bạn cài đặt và gỡ cài đặt nhân hệ điều hành tùy chỉnh như thể đó là một gói phần mềm thông thường, với lệnh tương tự như sau:
fakeroot make-kpkg --initrd --append-to-version=-custom kernel_image kernel_headers
cd /usr/src
sudo dpkg -i *.deb
Trong trường hợp đó, việc gặp phải các lỗi liên quan đến cũng rất phổ biến. chứng chỉ hạt nhânNhiều hướng dẫn giải quyết các vấn đề cụ thể bằng cách vô hiệu hóa các khóa đáng tin cậy trong tệp .config bằng một dòng như sau:
sed -i '/CONFIG_SYSTEM_TRUSTED_KEYS/s/^/#/g' .config
Cài đặt nhân hệ điều hành mới được biên dịch và cập nhật bộ nạp khởi động.
Nếu bạn không sử dụng gói .deb và đang sử dụng các công cụ cây kernel tiêu chuẩn một cách "trần trụi", thì... Việc cài đặt được thực hiện trực tiếp từ thư mục nguồn.Trình tự phổ biến nhất sau quá trình biên dịch là:
- Cài đặt các mô-đun (nếu bạn chưa làm):
sudo make modules_install - Cài đặt nhân hệ điều hành:
sudo make install
Hệ thống kịch bản riêng của nhân hệ điều hành sẽ sao chép tệp nhị phân. bzHình ảnh được tạo ra trong thư mục /boot, cùng với System.map và tệp cấu hình. Trong Debian/Ubuntu, các tập lệnh thường được kích hoạt trong /etc/kernel/postinst.d tạo ra initramfs và tự động cập nhật trình quản lý khởi động (GRUB).
Tuy vậy, việc thực hiện một cách rõ ràng không bao giờ là thừa:
sudo update-initramfs -u
sudo update-grub
sudo update-grub2
Với cái này Bạn cần đảm bảo rằng ảnh khởi động ban đầu đã được tạo lại chính xác. Đối với phiên bản kernel mới, và GRUB đã tính đến điều đó trong menu của nó. Trong các bản phân phối khác, chẳng hạn như một số bản dựa trên Red Hat, nó có thể được sử dụng. mkinitrd o bản nháp Thay vì sử dụng update-initramfs, nhưng mục tiêu vẫn như nhau: Tạo ảnh initrd/initramfs phù hợp với nhân hệ điều hành mới..
Vai trò của initrd/initramfs và các vấn đề tiềm ẩn
Initrd hoặc initramfs là một Hình ảnh hệ thống tập tin được tải vào bộ nhớ rất sớm trong quá trình khởi động.Nó chứa các trình điều khiển tối thiểu cần thiết để gắn kết hệ thống tệp gốc thực tế (ví dụ: hỗ trợ bộ điều khiển SATA hoặc NVMe nơi phân vùng / của bạn được đặt).
Nếu initrd được tạo không chính xác hoặc không chứa các mô-đun cần thiết, nhân hệ điều hành sẽ khởi động nhưng không thể gắn kết được. / và cuối cùng bạn sẽ có một hạt nhân hoảng loạn phàn nàn rằng anh ta không thể tìm thấy nguồn gốc Hệ thống tập tin. Đây là lỗi thường gặp khi các tùy chọn kernel quan trọng bị vô hiệu hóa hoặc initramfs bị quên sau khi thay đổi phiên bản.
Trong Debian/Ubuntu, lệnh tham chiếu hiện nay là cập nhật-initramfs:
sudo update-initramfs -c -k x.x.x
Tham số -c tạo ra một hình ảnh mới, và -k Cho biết phiên bản kernel chính xác. Trong các bản phân phối cũ hơn (hoặc với các công cụ khác), nó được sử dụng. mkinitrd với cú pháp tương tự:
cd /boot
mkinitrd -o initrd.img-2.6.36 2.6.36
Trong mọi trường hợp, nếu sau khi cài đặt kernel tùy chỉnh mà bạn thấy lỗi liên quan đến /lib/modules hoặc liên quan đến việc gắn kết thư mục gốc, Trước tiên, hãy kiểm tra initramfs/initrd và cấu hình GRUB. trước khi chạm vào bất cứ thứ gì khác.
Hãy kiểm tra xem nhân hệ điều hành mới có hoạt động chính xác hay không.
Sau khi cài đặt mọi thứ và cập nhật trình quản lý khởi động, đã đến lúc khởi động lại để kiểm tra hệ thống. Trong quá trình khởi động, theo dõi thông báo khởi động GRUB và kernel Trong trường hợp xuất hiện lỗi từ các mô-đun, hệ thống tập tin hoặc thiết bị không được nhận dạng.
Sau khi vào được hệ thống, bạn có thể kiểm tra phiên bản kernel đang sử dụng bằng lệnh:
uname -a
Kết quả đầu ra phải phản ánh phiên bản mới được biên dịchTừ đó, việc cần làm tiếp theo là kiểm tra các dịch vụ thông thường của bạn: máy chủ web, cơ sở dữ liệu, Người đưa tin, máy ảocác chương trình máy tính để bàn, v.v. Nếu mọi thứ hoạt động chính xác, bạn có thể để nhân kernel đó làm nhân chính và giữ các phiên bản cũ hơn làm bản sao lưu.
Cách khôi phục về kernel trước đó và gỡ cài đặt kernel mới.
Nếu có điều gì đó không ổn (điều này hoàn toàn có thể xảy ra, đặc biệt là trong những lần đầu), điều quan trọng là... Không hoảng loạnChỉ cần GRUB của bạn hiển thị các nhân hệ điều hành khác đang hoạt động, bạn có thể khôi phục hệ thống mà không gặp quá nhiều khó khăn.
Quá trình điển hình sẽ:
- Khởi động lại hệ thống.
- Trên màn hình GRUB, di chuyển bằng các phím mũi tên và vào mục "type". "Các tùy chọn nâng cao dành cho…".
- Hãy chọn một phiên bản kernel cũ hơn mà bạn biết chắc chắn là hoạt động tốt.
- Khởi động với nhân hệ điều hành đó, và sau khi vào được bên trong, hãy tiến hành xóa nhân hệ điều hành gây lỗi.
Nếu bạn cài đặt nhân hệ điều hành theo cách thủ công, không sử dụng các gói .deb, thì việc gỡ bỏ thường bao gồm các bước sau: Xóa các tệp tương ứng trong thư mục /boot và /lib/modules.Ví dụ, để gỡ bỏ phiên bản 6.6.0, bạn có thể thực hiện như sau:
cd /boot
sudo rm config-6.6.0 initrd.img-6.6.0 System.map-6.6.0 vmlinuz-6.6.0
Sau đó, hãy xóa các mô-đun của nó:
cd /lib/modules
sudo rm -rf 6.6.0
Sau khi hoàn tất, hãy cập nhật GRUB để nó không còn hiển thị nhân đó trong menu nữa và khởi động lại:
sudo update-grub
sudo update-grub2
sudo reboot
Nếu bạn cài đặt nhân hệ điều hành được đóng gói dưới dạng tệp .deb, thì sẽ gọn gàng hơn. Hãy sử dụng nó như bất kỳ gói hàng nào khác. Hãy sử dụng apt hoặc dpkg để gỡ cài đặt, giúp kiểm soát trạng thái hệ thống tốt hơn.
Lưu ý dành cho các bản phân phối khác: Fedora, CentOS và các bản khác.
Mặc dù hướng dẫn này tập trung chủ yếu vào Debian/Ubuntu/Mint, nhưng logic chung cũng tương tự đối với các bản phân phối dựa trên Red Hat như Fedora hoặc CentOS. Những thay đổi là gì? Các công cụ quản lý gói, một số tên phụ thuộc và cách truy cập trình quản lý khởi động..
Ví dụ, trong Fedora/CentOS, quy trình cơ bản để biên dịch nhân hệ điều hành từ kernel.org có thể như sau:
- Cài đặt các công cụ phát triển:
su -c 'yum groupinstall "Development Tools"'
su -c 'yum install ncurses-devel qt-devel unifdef' - Tải xuống phiên bản ổn định (chẳng hạn như 2.6.36 trong các ví dụ kinh điển):
cd /tmp
wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.36.tar.bz2 - Giải nén và chuẩn bị cây thư mục nguồn:
mkdir /usr/src/linux
tar -xjvf linux-2.6.36.tar.bz2 -C /usr/src/linux
cd /usr/src/linux - Cấu hình nhân hệ điều hành bằng cách sử dụng menuconfig, xconfig hoặc gconfig.
- Biên dịch và cài đặt:
make
make modules
make modules_install
make install
Sau đó bạn sẽ phải xem xét và chỉnh sửa. /boot/grub/grub.conf (hoặc tệp tương đương, tùy thuộc vào việc bạn sử dụng GRUB Legacy, GRUB2, v.v.) để thêm một mục cho nhân mới với initrd tương ứng, cần hết sức cẩn thận với các đường dẫn của root = và các tham chiếu đến các ổ đĩa logic nếu bạn sử dụng LVM.
Việc biên dịch, cấu hình và cài đặt một nhân Linux tùy chỉnh là một quá trình dài nhưng vô cùng bổ ích: nó buộc bạn phải hiểu những mô-đun nào bạn cần để khởi động, những tùy chọn nào là cần thiết cho các dịch vụ của bạn (như Docker hoặc ảo hóa), cách initramfs và GRUB được tích hợp vào quá trình khởi động, và làm thế nào để luôn duy trì một tùy chọn dự phòng để quay lại nhân trước đó nếu có sự cố xảy ra. Nếu bạn dành thời gian xem xét từng phần, sử dụng lại cấu hình nhân hiện tại một cách thông minh và làm quen với việc kiểm tra các thay đổi dần dần, bạn có thể sẽ có được một hệ thống thực sự mạnh mẽ. Tối ưu hơn, phù hợp với phần cứng của bạn và đáp ứng nhu cầu thực tế của bạn. hơn so với những gì được cung cấp bởi các nhân chung của hầu hết các bản phân phối.
Người viết đam mê về thế giới byte và công nghệ nói chung. Tôi thích chia sẻ kiến thức của mình thông qua viết lách và đó là những gì tôi sẽ làm trong blog này, cho bạn thấy tất cả những điều thú vị nhất về tiện ích, phần mềm, phần cứng, xu hướng công nghệ, v.v. Mục tiêu của tôi là giúp bạn điều hướng thế giới kỹ thuật số một cách đơn giản và thú vị.