zoukankan      html  css  js  c++  java
  • 【虚拟化】支持IDE/SATA/SCSI

    驱动说明

    • IDE    :IDE和SATA是最常用的两种磁盘格式,基本每个系统上都会有;
    • SATA:同IDE;
    • SCSI :系统上一般缺少此驱动,需要手动安装;

    Linux下的名称

    • IDE硬盘:hd[a,b,c,...]
    • SATA/SCSI/USB硬盘:sd[a,b,c,...]  ==>都是使用SCSI模块来驱动;
    • U盘:sd[a,b,c,...]
    • 当前CD ROM/DVD ROM:/dev/cdrom

    速度

    • IDE:理论max133MB;
    • SATA:1代,max150MB,2代max300MB;

    安装SCSI 驱动

    主要包括两部分:
    1. 引导小系统isolinux安装scsi驱动;
    2. 大系统安装scsi驱动;

    引导小系统安装SCSI驱动

    主要工作:添加virtio_scsi.kosym53c8xx.ko,然后insmod这两个模块;

    • 拷贝virtio_scsi.ko到目录:/..../isoBuilder/init/lib/modules/2.6.18-194.el5/kernel/drivers/virtio

    • 拷贝sym53c8xx.ko到目录:/..../isoBuilder/init/lib/modules/2.6.18-194.el5/kernel/drivers/scsi

    • 修改insmod.sh,目录:/.../isoBuilder/init/etc/init.d 
    添加:
    1. #!/bin/sh
    2.  
    3. insmod_self()
    4. {
    5.     modprobe ${1}
    6. }
    7. ....
    8. insmod_self sym53c8xx
    9. insmod_self virtio
    10. insmod_self virtio_balloon
    11. insmod_self virtio_ring
    12. insmod_self virtio_pci
    13. insmod_self virtio_scsi

    大系统安装SCSI驱动

    在此之前,先介绍一些概念,在说具体操作。

    概念介绍

    下图是Centos5.x 系统的kernel目录下的文件(这里的boot目录实际是正常系统的kernel目录):

    文件说明

    • initrd-2.xxx.el5.img :虚拟文件系统;
    • vmlinuz-2.6xx.el5    :linux内核文件;

    两难困境

    1. 在启动过程中,Linux内核文件根本不认识SATA磁盘,所以需要加载SATA磁盘的驱动,否则根本就无法挂载根目录
    2. 但是SATA的驱动程序在/lib/modules内,你根本无法挂载根目录,又怎么能读取到 /lib/modules内的驱动程序呢

    两难困境的解决

    为解决此问题,需要使用虚拟文件系统(initialRAM Disk),一般使用文件名:/boot/initrd
    它能够bootloader来加载到内存,然后这个文件会被解压并且在内存当中仿真成一个根目录,且此仿真在内存当中的文件系统能够提供一个可执行程序,通过该程序来加载启动过程中所需要的内核模块,通常这些模块就是USB、RAID、LVM、SCSI等文件系统与磁盘驱动的接口。
    下面将简单的介绍虚拟文件系统文件initrd

    initrd介绍

    initrd内所包含的模块大多与启动过程相关,而主要以文件系统和硬盘模块(如:USB、SATA、SCSI等)为主;
    一般来说,需要initrd的时刻包括:
    1. 根目录所在磁盘为SATA、USB或SCSI等连接接口;
    2. 根目录所在文件系统为LVM、RAID等特殊格式;
    3. 根目录所在文件系统为非传统Linux“认识”的文件系统时;
    4. 其他必须在内核模块加载时提供的模块;
    因为我们需要支持IDE、SATA、SCSI磁盘格式,所以需要使用initrd,而SCSI内核驱动又需要手动去安装,因此我们需要将SCSI驱动添加到initrd目录结构中并重新生成initrd的image文件;

    主要工作步骤

    1. 在虚拟文件系统添加SCSI驱动,然后重新编译为initrd文件;
    2. 替换initrd文件;
    虚拟文件系统initrd-xxx主要的改变:添加virtio_scsi.kosym53c8xx.ko,然后insmod这两个模块;
    替换initrd-2.6.18-194.el5.img(虚拟文件系统),目录:/.../package/install/hsmos/kernel

    说明:
    新的initrd-2.6.18-194.el5.img文件中有scsi的驱动,
    1. [root@localhost initrd]# mv initrd-2.6.18-194.el5.img initrd-2.6.18-194.el5.gz     //gzip解压需要修改后缀名
    2. [root@localhost initrd]# gunzip initrd-2.6.18-194.el5.gz     //解压,得到initrd-2.6.18-194.el5
    3. [root@localhost initrd]# file initrd-2.6.18-194.el5
    4. initrd-2.6.18-194.el5: ASCII cpio archive (SVR4 with no CRC)
    5. [root@localhost initrd]# cpio -idmv < initrd-2.6.18-194.el5
    6. [root@localhost initrd]# ls lib
    7. .........
    8. sym53c8xx.ko
    9.  virtio_balloon.ko
    10.  virtio.ko
    11.  virtio_pci.ko
    12.  virtio_ring.ko
    13.  virtio_scsi.ko



      

    支持IDE、SATA、SCSI脚本

    主要思路:

    1. 首次安装好系统后,重写grub.cfg,修改为LABEL方式;
    2. 修改rc.local,在下次启动时,将grub.cfg修改为以/dev/[s,h]dx方式启动;
    3. 关机;
    4. 导出ova;

    具体流程:

    1. 选择好一种磁盘格式,如:SATA,安装好系统;
    2. 执行 支持 磁盘格式的脚本:doforvm(主要是修改了grub.cfg文件和fstab文件,最后会关机)
    3. 导出ova;
    4. 将导出的ova安装在其他磁盘中,如:IDE、SCSI中;
    5. 新磁盘下的系统重启后执行的rc.local会重新将grub.cfg文件和fstab文件修改回去;
    说明:
    doforvm脚本:主要是修改了grub.cfg文件和fstab文件;













    附件列表

    • 相关阅读:
      复杂JSON字符串转换为Java嵌套对象的方法
      好代码是如何炼成的
      让数据流转换代码更加健壮流畅:List的Stream包装
      由一个重构示例引发的对可扩展性的思考
      如何高效搜索信息
      个人安全防护简明指南
      YAML配置解析
      事件处理业务的简易组件编排框架
      lambda表达式滥用之殇:解耦三层嵌套lambda表达式
      碎碎念四六
    • 原文地址:https://www.cnblogs.com/ssslinppp/p/5896048.html
    Copyright © 2011-2022 走看看