[Article] Hướng dẫn cập nhật Kernel tránh lỗi Kernel Panic trên Centos 5.7 |
03/01/2012 06:47:53 (+0700) | #1 | 251779 |
|
tranhuuphuoc
Moderator
|
Joined: 05/09/2004 06:08:09
Messages: 865
Location: Lầu Xanh
Offline
|
|
Kernel Linux là nòng cốt của "hệ điều hành" Linux, để cho hệ thống hoạt động mạnh mẽ, hiệu quả , an toàn, bảo mật thì thường người quản trị hệ thống nên cập nhật phiên bản Kernel mới. Kernel mới nhất bạn có thể tìm, tải tại đây http://www.kernel.org/ khuyến cáo nên dùng các phiên bản ổn định (Stable) thay vì dùng các phiên bản Mainline, Beta.
Tuy nhiên đám phát triển các dòng Centos thường ít cập nhật phiên bản mới nhất, nếu có thì trong kernel nó "gom" một đống những thứ không cần thiết vào làm cho máy chủ bị đình trệ hoặc dư thừa những module không cần thiết, giống như tronòg 1 công ty "tôi cần anh A nhưng không cần anh B".
Những lý do nên cập nhật kernel
- Đương nhiên 1 nhà lập trình nào đó , khi viết ra 1 sản phẩm phần mềm nếu thêm nhiều đoạn code vào thì đoạn code đó dung lượng , thời gian sẽ chậm hơn so với 1 đoạn code khá ngắn .
- Thử hình dung kernel có nhiều tính năng "hữu ích" trong đó thì khi module này có lỗi thì bạn sẽ trở thành nạn nhân của hacker như các cuộc tấn công tràn bộ đệm là 1 ví dụ.
- Lựa chọn cài đặt khá đơn giản chỉ Yes (Y) hay No (N)
Những lý do không nên cập nhật kernel (cẩn thận với người dùng đăng nhập SSH từ xa)
- Việc cập nhật kernel thường xuyên đối với 1 người lam việc thành thạo trên Linux và có kinh nghiệm nhiều năm trong kernel thì việc cập nhật kernel có thể đơn giản hơn bao giờ hết tuy nhiên với những người theo mạng...cộng đồng, ai nói cập nhật kernel là tốt sau đó thử nghiệm trên hệ thống của mình mà "kéo" theo nguyên đám không cần thiết thì có thể làm hệ thống trì trệ hơn nữa.
- Hệ thống dễ chết bất cứ lúc nào khi cập nhật kernel phiên bản mới nhất bị lỗi như Kernel Panic thường xãy ra là 1 ví dụ điển hình, nếu điều chỉnh grub không đúng cũng có thể làm bạn tự "khóa" mình lại.
Kernel cũ trên máy tính của tôi
# uname -a
Linux localhost.localdomain 2.6.18-274.el5
Chuẩn bị mọi thứ cần thiết
# wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.39.4.tar.bz2
# tar jxvf linux-2.6.39.4.tar.bz2 -C /usr/src
# cd /usr/src
# ln -sf linux-2.6.39.4 linux
Thêm 1 số gói cài đặt bổ sung cho việc nâng cấp kernel mới
# yum install gcc make bison ncurses-devel rpm-build
Bắt đầu cài đặt
# cd /usr/src/linux
# make clean && make mrproper
# cp /boot/config-`uname -r` .config
# make menuconfig
Trong phần này bạn cần bật
General setup->
[*] enable deprecated sysfs features to support old userspace tools
[*] enabled deprecated sysfs features by default
Nếu bạn config trực tiếp thì mở .config , điều chỉnh 2 dòng sau thành
CONFIG_SYSFS_DEPRECATED=y
CONFIG_SYSFS_DEPRECATED_V2=y
Thường thì khi tôi cập nhật, nâng cấp kernel thì các tính năng mà nó hỗ trợ iptables tôi đều bật nó cả (nếu bạn không biết về các tính năng này thì chọn hết)
Tôi ví dụ như conntract
Tìm dòng Networking support chọn tiếp Networking option , kéo xuống phía dưới thấy dòng này Network packet filtering framework (Netfilter) chọn mục Core Netfilter Configuration và chọn mục Netfilter connection tracking support
Bạn tìm mục General Setup chọn dòng Local version – append to kernel release sau đó nhập vào ví dụ như -hvaonline hay -default , -config tùy bạn
Sau đó xong mọi thứ thì bạn vào Exit để thoát ra
# make rpm
# ls -alh /usr/src/redhat/RPMS/i386/
total 217M
drwxr-xr-x 2 root root 4.0K Jan 1 11:04 .
drwxr-xr-x 9 root root 4.0K Oct 3 17:14 ..
-rw-r--r-- 1 root root 217M Jan 1 11:04 kernel-2.6.39.4hvaonline-1.i386.rpm
# rpm -ivh /usr/src/redhat/RPMS/i386/kernel-2.6.39.4hvaonline-1.i386.rpm
Preparing... ########################################### [100%]
1:kernel ########################################### [100%]
# ls /boot
config-2.6.18-274.el5 symvers-2.6.18-274.el5.gz
config-2.6.39.4-hvaonline System.map-2.6.18-274.el5
grub System.map-2.6.39.4-hvaonline
initrd-2.6.18-274.el5.img vmlinux-2.6.39.4-hvaonline.bz2
lost+found vmlinuz-2.6.18-274.el5
message vmlinuz-2.6.39.4-hvaonline
# cd /boot
# depmod 2.6.39.4-hvaonline
# mkinitrd -v /boot/initrd-2.6.39.4-hvaonline.img 2.6.39.4-hvaonline
Ta xem qua cấu hình mặc định của tập tin grub
# cat /boot/grub/grub.conf
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You have a /boot partition. This means that
# all kernel and initrd paths are relative to /boot/, eg.
# root (hd0,0)
# kernel /vmlinuz-version ro root=/dev/VolGroup00/LogVol00
# initrd /initrd-version.img
#boot=/dev/sda
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.18-274.el5)
root (hd0,0)
kernel /vmlinuz-2.6.18-274.el5 ro root=/dev/VolGroup00/LogVol00
initrd /initrd-2.6.18-274.el5.img
Bây giờ ta điều chỉnh thêm vào 1 đoạn như sau
title CentOS (2.6.39.4-hvaonline)
root (hd0,0)
kernel /vmlinuz-2.6.39.4-hvaonline ro root=/dev/VolGroup00/LogVol00
initrd /initrd-2.6.39.4-hvaonline.img
Kết thúc
|
|
|
|
|
[Article] Hướng dẫn cập nhật Kernel tránh lỗi Kernel Panic trên Centos 5.7 |
03/01/2012 13:01:29 (+0700) | #2 | 251792 |
|
tanviet12
Member
|
0 |
|
|
Joined: 10/05/2010 12:15:15
Messages: 138
Location: TP - HCM
Offline
|
|
Cảm ơn anh Phước rất nhiều vì đầu năm đã "mở hàng" một bài rất thực tế và hữu ích.
Tốt nhất trước khi thực hành với server thật của mình, nên test một phát trên máy ảo. ; |
|
BTV
fb.com/buitanviet |
|
|
|
[Article] Hướng dẫn cập nhật Kernel tránh lỗi Kernel Panic trên Centos 5.7 |
19/01/2012 16:20:57 (+0700) | #3 | 252698 |
|
rootix
Member
|
0 |
|
|
Joined: 21/09/2011 23:41:20
Messages: 9
Offline
|
|
Hồi trước có bài viết của bác Conmale khá chi tiết về việc biên dịch lại kernel. Giờ bác tranhuuphuoc nhắc lại tuyệt quá. Cảm ơn bác vì 1 bài viết ý nghĩa! |
|
|
|
|
[Article] Hướng dẫn cập nhật Kernel tránh lỗi Kernel Panic trên Centos 5.7 |
20/01/2012 16:26:49 (+0700) | #4 | 252719 |
LeVuHoang
HVA Friend
|
Joined: 08/03/2003 16:54:07
Messages: 1155
Offline
|
|
Tui đang suy nghĩ, tại sao tụi GRUB team không modify cho grub boot loader, nếu kernel panic thì khi reboot lại nó sẽ tự động chọn stable kernel trước đó mà boot nhỉ. Chứ mỗi lần server từ xa reboot lại sợ gần chết. |
|
|
|
|
[Article] Hướng dẫn cập nhật Kernel tránh lỗi Kernel Panic trên Centos 5.7 |
20/01/2012 17:08:02 (+0700) | #5 | 252725 |
|
rickb
Reseacher
|
Joined: 27/01/2007 17:47:27
Messages: 200
Offline
|
|
LeVuHoang wrote:
Tui đang suy nghĩ, tại sao tụi GRUB team không modify cho grub boot loader, nếu kernel panic thì khi reboot lại nó sẽ tự động chọn stable kernel trước đó mà boot nhỉ. Chứ mỗi lần server từ xa reboot lại sợ gần chết.
Em nghĩ là không thể vì nhiều lý do :
1/ Sau khi Grub đã bắt đầu load kernel thì nó đã pass control cho OS, và theo định nghĩa kernel panic xảy ra khi OS ko thể control/recovery được fatal error xảy ra => Grub ko thể can thiệp vì lúc đó nó ko còn quyền control
2/ Giả dụ là Grub có quyền làm chuyện đó thì nó cũng chỉ nên restart lại hệ thống, chứ ko nên tự chọn 1 stable kernel được vì khái niệm "stable" nó còn phụ thuộc còn phụ thuộc vào tuỳ trường hợp nữa, còn nếu chỉ cảe cái cái version stable trên kernel.org distribute thì sẽ ko ổn, vd như 1 server có hardware đặc biệt khiến sysadmin ko thể cài OS default mà phải rebuilt lại kernel thì OS đó mới chạy được trên nền tảng hardware đó, nhưng khi sự cố xảy ra khiến kernel panic => grub tự động chuyển sang cái stable kernel cũ
P/S : đây chỉ là suy nghĩ cá nhân của em, mọi người có gì đóng góp thêm nha
-rickb |
|
|
|
|
[Article] Hướng dẫn cập nhật Kernel tránh lỗi Kernel Panic trên Centos 5.7 |
20/01/2012 17:20:01 (+0700) | #6 | 252728 |
LeVuHoang
HVA Friend
|
Joined: 08/03/2003 16:54:07
Messages: 1155
Offline
|
|
@rickb: Theo mình nghĩ định nghĩa stable kernel dựa trên cái kernel chạy gần nhất mà trên Windows định nghĩa là: Last good known configuration.
Nói nôm na thì có thể mô tả như vầy:
Đầu tiên, khi server boot, hoàn tất tới shell, kernel #1. ID = #1, recoveryState = 0.
Reboot server, nếu người dùng không tự chọn kernel thì dùng lại kernel #1 (ID = #1). Nếu boot với kernel khác (#2), tới shell, ID = #2. recoveryState = 0.
Recompile kernel, reboot với kernel #3, kernel panic, set recoveryState = 1. server tự reboot.
Khi server đang reboot, check thấy giá trị recoveryState = 1 thì dùng last kernel version, ở đây là #2. Như vậy hầu như tự khắc vào được version gần nhất khởi động được. Trong trường hợp không giải quyết được triệt để thì cũng giảm thiểu 1 phần đáng kể của việc gọi điện lên DC kêu NOC fix. |
|
|
|
|
[Article] Hướng dẫn cập nhật Kernel tránh lỗi Kernel Panic trên Centos 5.7 |
20/01/2012 17:53:09 (+0700) | #7 | 252730 |
|
rickb
Reseacher
|
Joined: 27/01/2007 17:47:27
Messages: 200
Offline
|
|
LeVuHoang wrote:
@rickb: Theo mình nghĩ định nghĩa stable kernel dựa trên cái kernel chạy gần nhất mà trên Windows định nghĩa là: Last good known configuration.
Nói nôm na thì có thể mô tả như vầy:
Đầu tiên, khi server boot, hoàn tất tới shell, kernel #1. ID = #1, recoveryState = 0.
Reboot server, nếu người dùng không tự chọn kernel thì dùng lại kernel #1 (ID = #1). Nếu boot với kernel khác (#2), tới shell, ID = #2. recoveryState = 0.
Recompile kernel, reboot với kernel #3, kernel panic, set recoveryState = 1. server tự reboot.
Khi server đang reboot, check thấy giá trị recoveryState = 1 thì dùng last kernel version, ở đây là #2. Như vậy hầu như tự khắc vào được version gần nhất khởi động được. Trong trường hợp không giải quyết được triệt để thì cũng giảm thiểu 1 phần đáng kể của việc gọi điện lên DC kêu NOC fix.
Ok, đồng ý với anh, nhưng như vậy thì nó cũng không do khả khi do phần quyền như em đã nói đúng khộng ?
-rickb |
|
|
|
|
[Article] Hướng dẫn cập nhật Kernel tránh lỗi Kernel Panic trên Centos 5.7 |
20/01/2012 19:01:38 (+0700) | #8 | 252734 |
LeVuHoang
HVA Friend
|
Joined: 08/03/2003 16:54:07
Messages: 1155
Offline
|
|
Vấn đề này giải quyết cũng dễ lắm rickb. Quan trọng là phải có sự kết hợp giữa kernel và boot loader.
Có 2 options:
1. Sử dụng 512 bytes của MBR
2. Sử dụng temp file trên filesystem (image, vzlinux)
Khi kernel panic, có thể tạo ra 1 temp file tại /tmp/boot.tmp chứa ID # và recoveryState hoặc set 2 bytes vào MBR chứa 2 giá trị này.
Sau đó mỗi lần GRUB khởi động thì check 2 giá trị này thôi. Nếu MBR thì càng không liên quan tới quyền nữa. |
|
|
Users currently in here |
1 Anonymous
|
|
Powered by JForum - Extended by HVAOnline
hvaonline.net | hvaforum.net | hvazone.net | hvanews.net | vnhacker.org
1999 - 2013 ©
v2012|0504|218|
|
|