Linux内核安装

RamDisk实际是从内存中划出一部分作为一个分区使用,换句话说,就是把内存一部分当做硬盘使用,你可以向里边存文件。那么为什么要用RamDisk呢?假设有几个文件要频繁的使用,你如果将它们加到内存当中,程序运行速度会大副提高,因为内存的读写速度远高于硬盘。况且内存价格低廉,一台PC有128M或256M已不是什么新鲜事。划出部分内存提高整体性能不亚于更换新的CPU。何乐而不为呢?象WEB服务器这样的计算机,需要大量的读取和交换特定的文件,因此,在WEB服务器上建立RamDisk会大大提高网络读取速度。


创建和使用RamDisk的方法。


使用RamDisk非常方便,缺省安装的RedHat6.0就支持RamDisk。你所要作的就是格式化RamDisk并把它装载到一个目录下。要想查看RamDisk的数目,用命令"ls -al /dev/ram*",它会给出所有当前情况下可用的RamDisk。这些RamDisk只有使用的时候才占用内存。下面是使用RamDisk的几个命令:

#创建装载点

mkdir /tmp/ramdisk0

# 创建一个文件系统

mke2fs /dev/ram0

#装载ramdisk:

mount /dev/ram0 /tmp/ramdisk0

  这三个命令将会为RamDisk创建一个目录、格式化RamDisk(创建文件系统)并把RamDisk装载到目录"/tmp/ramdisk0"中。现在,你就可以把它作为一个磁盘分区使用了。

  如果格式化RamDisk失败,可能是因为你没有把对RamDisk的支持编译进内核中去。内核中对RamDisk的配置选项是 CONFIG_BLK_DEV_RAM。

  缺省的RamDisk为4M。使用mke2fs命令可以查知你所获RamDisk的大小。命令mke2fs /dev/ram0会产生以下信息:

mke2fs 1.14, 9-Jan-1999 for EXT2 FS 0.5b, 95/08/09

Linux ext2 filesystem format

Filesystem label=

1024 inodes, 4096 blocks

204 blocks (4.98%) reserved for the super user

First data block=1

Block size=1024 (log=0)

Fragment size=1024 (log=0)

1 block group

8192 blocks per group, 8192 fragments per group

1024 inodes per group

使用命令df /dev/ram0可以查到你实际能用的RamDisk的大小(文件系统也占用一定空间):

>df -k /dev/ram0

Filesystem 1k-blocks Used Available Use% Mounted on

/dev/ram0 3963 13 3746 0% /tmp/ramdisk0

不过要记住,RamDisk中的数据会在机器重新启动后消失,因此应把其中有用的数据及时备份到硬盘中。


改变RamDisk大小的技巧?


  为使用RamDisk,你或者要将对RamDisk的支持编译到内核中去,或者把它编译为一个可装载模块。编译为一个可装载模块有一个好处,就是可以在装载时任意指定RamDisk的大小。

  把下面这一行加到你的lilo.conf 文件中去:

ramdisk_size=10000 (或对老内核写作ramdisk=10000)

  这样你键入LILO命令并重新启动后,缺省的RamDisk的大小将为10M,下面是我的/etc/lilo.conf文件:

boot=/dev/hda

map=/boot/map

install=/boot/boot.b

prompt

timeout=50

p_w_picpath=/boot/vmlinuz

label=linux

root=/dev/hda2

read-only

ramdisk_size=10000

实际上,我只获得了9M多一点的RamDisk,其余被文件系统占用。

  当你编译为一个可装载模块后,你可以在模块装载时决定RamDisk的大小,这可以通过 /etc/conf中的选项设置来设定。或者通过作为ismod命令行参数来实现。

options rd rd_size=10000

insmod rd rd_size=10000

下面是使用模块的例子:


卸载下上一章装载的RamDisk, umount /tmp/ramdisk0.


卸载模块rmmod rd。


装载RamDisk模块并设置大小为20M,insmod rd rd_size=20000。创建文件系统,mke2fs /dev/ram0。


装载RamDisk ,mke2fs /dev/ram0。


在WEB服务器上使用RamDisk的实例?


  本例介绍在WEB服务器上使用3个RamDisk的方法。所用的WEB服务器是RedHat 6.0 自带的Apache。

  首先,把WEB根目录中所有文件移到其它目录中,然后创建RamDisk的装载点:

mv /home/httpd/ /home/httpd_real

mkdir /home/httpd

mkdir /home/httpd/cgi-bin

mkdir /home/httpd/html

mkdir /home/httpd/icons

  然后,把以下命令加到你的/etc/rc.d/init.d/httpd.init文件中去:

### 创建3个RamDisk

/sbin/mkfs -t ext2 /dev/ram0

/sbin/mkfs -t ext2 /dev/ram1

/sbin/mkfs -t ext2 /dev/ram2


### 加载RamDisk到开始创建的目录中


mount /dev/ram0 /home/httpd/cgi-bin

mount /dev/ram1 /home/httpd/icons

mount /dev/ram2 /home/httpd/html


### 拷贝真正的目录中的所用文件到RamDisk 中

tar -C /home/httpd_real -c . | tar -C /home/httpd -x

  最后,重新启动WEB服务器即可生效,试一下速度是否有所改变。

后语:1. 一定要记住保存RamDisk中有用的东西,否则,重新启动后将化为乌有。你可以用cron设定一个计划,每隔10分钟扫描一下RamDisk中的文件是否发生变化,如有,拷贝到硬盘中,这会比较安全。

2.最酷的应用是如果你有1G的内存,划出256M来作为暂存区/tmp,如果很多程序用到/tmp,那么你的系统性能会大大提高,而且重新启动后垃圾消失,真是一举两得。

1、实验背景:主机WIN7     虚拟机VMware (ubuntu12.04)     内核版本Linux-3.2.0-23-generic-pae

2、下载了新的内核版本linux-3.2.1来进行编译,安装

步骤:

     1、首先下载你想要编译的内核版本:linux-3.2.1.tar.bz2。

     2、进入root权限把刚下载的内核代码复制到/usr/src目录下面去。

     3、在/usr/src目录下面解压刚才下载的内核代码:tar   -xjvf  linux-3.2.1.tar.bz2,解压完成后进入相应的linux-3.2.1           目录,以后的工作都会在这个目录下面完成。

     4、开始编译前的工作:

          4.1  使用命令:make mrproper

              作用是在每次配置并重新编译内核前需要先执行”make mrproper”命令清理源代码树,包括过去曾经配置的内核配置文件”.config”都将被清除。即进行新的编译工作时将原来老的配置文件给删除,以免影响新的内核编译。(但是一般情况也可以不执行这条命令,因为内核编译是增量编译,清除之后又要从头开始编译,浪费时间).    

         4.2   使用命令:make menuconfig,进行内核定制,配置编译信息。

              输入命令:make menuconfig  。然后再出现的界面中移动鼠标选中file system项目  然后再出现的界面中移动鼠标选中file system项目,进入其中,把second extended fs suppor前面的 * 好改成M(修改这个的目的是让在编译内核的时候以模块的方式进行编译,而不是编译进内核)。这里可能会提醒安装ncurses相应的包。安装这个包的命令如下:sudo apt-get install libncurses5-dev

        4.3    保存退出

    5、  make dep命令生成内核功能间的依赖关系。一般会提示unecessary.
    6、  make命令 编译内核。(若过程不出现问题,大约1-2个小时编译完成) 。

           这个相当于手工执行下面两步:
           #make bzImage(编译出核心)
           #make modules(编译可加载模块)

    7、  等编译内核完成之后就是安装模块。使用命令:make modules_install

    8、 安装核心。 使用命令:make install

    9、  创建initrd文件  使用命令:mkinitramfs -o /boot/initrd.img-3.2.1(后面的数字是自己需要编译的内核的版本,根据自己的版本不同来书写).*****后面出现的一个错误在重新用另外的方法生成initrd.img-3.2.1文件后解决,不知道是不是这里的生成方法有错,但是可以用这种方法试一试,出错了再改。因为我也只试了一次,说不定是我操作失误了。*****
   10、 更新grub来显示自己安装的内核。进入/boot/grub目录,然后输入命令:update-grub即可。
    经过以上的步骤,内核基本上已经编译成功并且已经安装上了。

为了看自己的内核是否安装上了可以通过以下步骤来看:进入/boot/grub/目录,然后打开grub.cfg文件,看你自己编译的版本是否已经在里面了,如果在里面了,就说明你自己编译的内核就完成了。这是后重启就可以进入你自己编译的内核里面了。(但是为了选择自己安装的内核或者是选择进入以前系统自带的内核还必须更改/boot/grub/目录下面的文件grub.cfg,把里面的所有的timeout的值都更改成10)。然后重新启动就可以选择了。

以上就是编译和安装自己内核的步骤。


过程中出现的错误:

  1、提示虚拟机磁盘空间不足,如下:

     

     原因是我分配给虚拟系统的磁盘只有10G,而已经使用完了,查看磁盘使用率如下图:

    

  解决方法:我按照网上的方法使用vmware-manager.exe扩充磁盘结果导致虚拟机无法进入系统。所以只好重装系统,分配更大的空间。

    重装之后,编译顺利通过。但是在进入新编译的内核是出现错误2.

   2、could not load /lib/modules/3.2.1/modules.dep。

      但是 在/lib/modules/3.2.1/下又能找到modules.dep文件。于是我尝试了网上的方法,结果能够正常进入新编译的内核了。方法如下:

         1、备份之前生成的/boot/initrd.img-3.2.1,执行
             使用如下命令:mv   initrd.img-3.2.1  initrd.img-3.2.1.old(重命名)
         2、cd  /usr/src/linux-3.2.1.
         3、执行:update-initramfs  –c  –k  3.2.1。这样,重新在/boot下创建initrd.img-3.2.1
        4 、sudo update-grub
        5、将/boot/grub/grub.cfg中的timeout改为10
重启后,进入了新内核,内核编译升级成功。


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