解決Ubuntu14.04下更換內核不成功的問題(轉)

intro

最近在做ovs的實驗,爲了保持實驗環境的一致性,我這邊用了openvswitch-2.3.1這個版本,由於ovs與對應的內核版本有要求:

Open vSwitch Linux kernel
1.4.x 2.6.18 to 3.2
1.5.x 2.6.18 to 3.2
1.6.x 2.6.18 to 3.2
1.7.x 2.6.18 to 3.3
1.8.x 2.6.18 to 3.4
1.9.x 2.6.18 to 3.8
1.10.x 2.6.18 to 3.8
1.11.x 2.6.18 to 3.8
2.0.x 2.6.32 to 3.10
2.1.x 2.6.32 to 3.11
2.3.x 2.6.32 to 3.14
2.4.x 2.6.32 to 4.0
2.5.x 2.6.32 to 4.3
2.6.x 3.10 to 4.7

這裏爲了安裝ovs2.3.1,我需要讓內核版本滿足2.6.32到3.14的條件,當前ubuntu系統的內核版本是3.19.0-25-generic,目標內核版本是3.13.0-24-generic

安裝3.13.0-24-generic內核

1.顯示所有可以獲取的內核版本

1
apt-cache search linux

2.安裝指定版本version內核
version一般爲x.x.x-x的形式。

1
2
3
sudo apt-get install  -y linux-headers-version-generic \
					 	 linux-image-version-generic \
					 	 linux-image-extra-version-generic

比如這裏我要安裝version爲3.13.0-24的內核,這裏就執行

1
2
3
sudo apt-get install  -y linux-headers-3.13.0-24-generic \
					 	 linux-image-3.13.0-24-generic \
					 	 linux-image-extra-3.13.0-24-generic

[可選]修改GRUB,保證ubunu啓動的時候使用的使新內核

修改默認grub啓動菜單

這裏是一個可選的配置,如果不配置,每次在啓動系統的時候,都需按下ESC鍵,進入GRUB菜單,選中新內核。這一重複的操作,我們可以在GRUB中進行配置。需要修改的文件是/etc/default/grub

1
2
3
4
5
6
7
8
// /etc/default/grub
GRUB_DEFAULT=0
GRUB_HIDDEN_TIMEOUT=0
GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT=10
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX=""

 

這裏講下GRUB_DEFAULT的配置,GRUB_DEFAULT表示了開機的時候的默認選項(包括二級菜單選項)。這邊先盜個圖說下內核順序:
下面是一張GRUB的啓動菜單
grub_submenu_examples
在配合一段grub的配置說明,如下:
grub_simple_configuration
意思就是一級菜單比如Ubuntu,with Linux 3.2.0-24-generic-paeUbunut,with Linux 3.2.0-24-generic-pae(recovery mode)Previous Linux versionsMemory test(memtest86+)等等,一級菜單按照從0開始編號,如Ubuntu,with Linux 3.2.0-24-generic-pae對應0,Ubunut,with Linux 3.2.0-24-generic-pae(recovery mode)對應1,Previous Linux versions對應2,以此類推。對於二級菜單也是一樣的道理,每個菜單項下的子菜單都是從0開始編號。
那麼這裏如果我要配置Previous Linux versions下的Ubuntu, with Linux 3.2.0-18-generic-pae,我們的內核順序就應該是2>0,這裏注意在填寫GRUB_DEFAULT的時候一定要加上有引號,如:

1
GRUB_DEFAULT="2>0"

 

除了填寫數字形式的內核順序,還可以有其他的寫法

1
2
3
GRUB_DEFAULT="Previous Linux versions>Ubuntu, with Linux 3.2.0-18-generic-pae"
GRUB_DEFAULT="Previous Linux versions>0"
GRUB_DEFAULT="2>Ubuntu, with Linux 3.2.0-18-generic-pae"

 

ps:我這裏並沒有重新看一遍grub的啓動內容,而是查看了/boot/grub/grub.cfg,如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-5723676a-712c-4518-a288-feea52c251b0' {
	recordfail
	load_video
	gfxmode $linux_gfx_mode
	insmod gzio
	insmod part_msdos
	insmod ext2
	set root='hd0,msdos1'
	if [ x$feature_platform_search_hint = xy ]; then
	  search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1  5723676a-712c-4518-a288-feea52c251b0
	else
	  search --no-floppy --fs-uuid --set=root 5723676a-712c-4518-a288-feea52c251b0
	fi
	linux	/boot/vmlinuz-3.19.0-25-generic root=UUID=5723676a-712c-4518-a288-feea52c251b0 ro  quiet splash $vt_handoff
	initrd	/boot/initrd.img-3.19.0-25-generic
}
submenu 'Advanced options for Ubuntu' $menuentry_id_option 'gnulinux-advanced-5723676a-712c-4518-a288-feea52c251b0' {
	menuentry 'Ubuntu, with Linux 3.19.0-25-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.19.0-25-generic-advanced-5723676a-712c-4518-a288-feea52c251b0' {
		recordfail
		load_video
		gfxmode $linux_gfx_mode
		insmod gzio
		insmod part_msdos
		insmod ext2
		set root='hd0,msdos1'
		if [ x$feature_platform_search_hint = xy ]; then
		  search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1  5723676a-712c-4518-a288-feea52c251b0
		else
		  search --no-floppy --fs-uuid --set=root 5723676a-712c-4518-a288-feea52c251b0
		fi
		echo	'Loading Linux 3.19.0-25-generic ...'
		linux	/boot/vmlinuz-3.19.0-25-generic root=UUID=5723676a-712c-4518-a288-feea52c251b0 ro  quiet splash $vt_handoff
		echo	'Loading initial ramdisk ...'
		initrd	/boot/initrd.img-3.19.0-25-generic
	}
	menuentry 'Ubuntu, with Linux 3.19.0-25-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.19.0-25-generic-recovery-5723676a-712c-4518-a288-feea52c251b0' {
		recordfail
		load_video
		insmod gzio
		insmod part_msdos
		insmod ext2
		set root='hd0,msdos1'
		if [ x$feature_platform_search_hint = xy ]; then
		  search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1  5723676a-712c-4518-a288-feea52c251b0
		else
		  search --no-floppy --fs-uuid --set=root 5723676a-712c-4518-a288-feea52c251b0
		fi
		echo	'Loading Linux 3.19.0-25-generic ...'
		linux	/boot/vmlinuz-3.19.0-25-generic root=UUID=5723676a-712c-4518-a288-feea52c251b0 ro recovery nomodeset 
		echo	'Loading initial ramdisk ...'
		initrd	/boot/initrd.img-3.19.0-25-generic
	}
	menuentry 'Ubuntu, with Linux 3.13.0-24-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.13.0-24-generic-advanced-5723676a-712c-4518-a288-feea52c251b0' {
		recordfail
		load_video
		gfxmode $linux_gfx_mode
		insmod gzio
		insmod part_msdos
		insmod ext2
		set root='hd0,msdos1'
		if [ x$feature_platform_search_hint = xy ]; then
		  search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1  5723676a-712c-4518-a288-feea52c251b0
		else
		  search --no-floppy --fs-uuid --set=root 5723676a-712c-4518-a288-feea52c251b0
		fi
		echo	'Loading Linux 3.13.0-24-generic ...'
		linux	/boot/vmlinuz-3.13.0-24-generic root=UUID=5723676a-712c-4518-a288-feea52c251b0 ro  quiet splash $vt_handoff
		echo	'Loading initial ramdisk ...'
		initrd	/boot/initrd.img-3.13.0-24-generic
	}
	menuentry 'Ubuntu, with Linux 3.13.0-24-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.13.0-24-generic-recovery-5723676a-712c-4518-a288-feea52c251b0' {
		recordfail
		load_video
		insmod gzio
		insmod part_msdos
		insmod ext2
		set root='hd0,msdos1'
		if [ x$feature_platform_search_hint = xy ]; then
		  search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1  5723676a-712c-4518-a288-feea52c251b0
		else
		  search --no-floppy --fs-uuid --set=root 5723676a-712c-4518-a288-feea52c251b0
		fi
		echo	'Loading Linux 3.13.0-24-generic ...'
		linux	/boot/vmlinuz-3.13.0-24-generic root=UUID=5723676a-712c-4518-a288-feea52c251b0 ro recovery nomodeset 
		echo	'Loading initial ramdisk ...'
		initrd	/boot/initrd.img-3.13.0-24-generic
	}
}

 

根據我這段從grub.cfg中摘取出來的菜單項,那麼我的對應的菜單項爲

1
2
3
4
5
6
|-----Ubuntu
|-----Advanced options for Ubuntu
		|-----Ubuntu, with Linux 3.19.0-25-generic
		|-----Ubuntu, with Linux 3.19.0-25-generic (recovery mode)
		|-----Ubuntu, with Linux 3.13.0-24-generic
		|-----Ubuntu, with Linux 3.13.0-24-generic (recovery mode)

 

爲了使用3.13.0-24版本的內核,修改GRUB_DEFAULT爲"1>2"
如下:
etc-default-grub

使上面的配置生效

修改完/etc/default/grub之後,要使配置生效,還需要執行sudo update-grub,使得配置項可以更新到/boot/grub/grub.cfg文件中

驗證

reboot,在終端中執行uname -r看看內核有沒有改過來。

轉自:https://warjiang.github.io/devcat/2016/11/22/ubuntu14-04%E4%B8%8B%E6%9B%B4%E6%8D%A2%E5%86%85%E6%A0%B8/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章