更新时间:2023-08-15 GMT+08:00

修改引导的硬件设备驱动

操作场景

此操作主要是在系统启动阶段,针对加载的实际物理服务器的硬件设备驱动所进行的。

前提条件

已登录虚拟机。

操作步骤

  1. 增加或修改驱动。
    • 对于Red Hat系列/Oracle Linux系列/EulerOS/OpenEuler/SUSE 12/SUSE 15/CentOS系列操作系统,使用vi编辑器打开“/etc/dracut.conf”文件,修改或添加“add_drivers”的取值,如下所示,add_drivers+="服务器的RAID卡驱动"。
      logfile=/var/log/dracut.log
      # fileloglvl=7
      ...
      ...
      # additional kernel modules to the default
      add_drivers+="ahci megaraid_sas mpt3sas mpt2sas virtio_blk virtio_scsi virtio_net"

      如果有报错,请在引号内前后增加空格,再次尝试。

    • 对于Ubuntu 14.04/Debian操作系统,使用vi编辑器打开“/etc/initramfs-tools/modules”文件,添加ahci、megaraid_sas、mpt3sas和mpt2sas驱动(具体格式需要根据操作系统本身的要求决定)。
      # List of modules that you want to include in your initramfs.
      # They will be loaded at boot time in the order below.
      #
      # Syntax:  module_name [args ...]
      #
      # You must run update-initramfs(8) to effect this change.
      #
      # Examples:
      #
      # raid1
      # sd_mod
      ahci
      megaraid_sas
      mpt3sas
      mpt2sas
      virtio_blk
      virtio_scsi
      virtio_net
    • 对于Ubuntu 16.04/Ubuntu 18.04操作系统,需要分别在“/etc/dracut.conf”和“/etc/initramfs-tools/modules”文件中添加驱动。但是,在编辑配置文件之前,需要安装相关软件:
      1. 由于该操作系统默认不带dracut软件,执行以下命令安装dracut软件:

        apt-get install dracut

        安装完成后,按照Red Hat系列/Oracle Linux 7.3等操作系统的方法,编辑“/etc/dracut.conf”文件,在末尾添加add_drivers+="ahci megaraid_sas mpt3sas mpt2sas virtio_blk virtio_scsi virtio_net"

        如果有报错,请在引号内前后增加空格,再次尝试。

      2. 由于该操作系统默认不带initramfs-tools软件,执行以下命令进行安装:

        apt-get install initramfs-tools

        安装完成后,按照Ubuntu 14.04操作系统的方法,编辑“/etc/initramfs-tools/modules”文件,在末尾添加ahci、megaraid_sas、mpt3sas、mpt2sas和virtio_blk virtio_scsi virtio_net驱动。

    • 对于Ubuntu 16.04 ARM,还需要执行以下命令更新内核和驱动,之后再重启虚拟机。

      sudo apt-get update

      sudo apt-get dist-upgrade

    • 对于SUSE 11 SP4操作系统,使用vi编辑器打开“/etc/sysconfig/kernel”文件,修改或添加“INITRD_MODULES”的取值,如下所示,INITRD_MODULES="服务器的RAID卡驱动"。
      ...
      #
      INITRD_MODULES="ahci megaraid_sas mpt3sas mpt2sas virtio_blk virtio_scsi virtio_net"
      ## Type:   string(yes)
      ...

    服务器的RAID卡驱动可以填写多个,以空格分开。驱动信息可以根据采购的硬件设备获取RAID相关的驱动名称。镜像支持多种类型的驱动并存,如“mpt3sas”、“mpt2sas”和“megaraid_sas”就是3种不同的RAID卡型号。当操作系统不支持某些硬件的驱动时,需要额外安装硬件驱动。

  2. 刷新内核,对于Ubuntu 16.04 ARM、Ubuntu 18.04 ARM,则跳过本步骤。

    Rad Hat系列/Oracle Linux系列/EulerOS/SUSE 12/SUSE 15/Ubuntu 16.04/Ubuntu 18.04/CentOS系列刷新命令:dracut -f

    • 对于Rad Hat系列/Oracle Linux系列/EulerOS/OpenEuler/CentOS系列,执行命令dracut -f,等待数秒后,如果命令执行完成不产生回显信息,说明加载成功。
    • 对于SUSE 12 SP1,执行命令dracut -f,观察最后几行回显信息,显示信息提示“有些内核模块没有被加载,但不一定是一个错误”,可以看到回显信息中提到的没有加载的驱动,不包括上面手动加载的驱动,说明RAID卡驱动加载成功。
      ...
      Some kernel modules could not be included
      This is not necessarily an error:
      pcmcia
      sdhci_acpi
      swap
    • 对于SUSE 12/SUSE 15,执行命令dracut -f,结果如下图,表示刷新成功。

    • 对于Ubuntu 14.04/Ubuntu 16.04/Ubuntu 18.04/Debian,执行以下命令重新生成initrd。

      update-initramfs -u

      依次执行以下命令,检查是否已经成功装载了ahci、megaraid_sas、mpt3sas和mpt2sas驱动的相应模块。

      lsinitramfs /boot/initrd.img-`uname -r` |grep ahci

      lsinitramfs /boot/initrd.img-`uname -r` |grep megaraid_sas

      lsinitramfs /boot/initrd.img-`uname -r` |grep mpt3sas

      lsinitramfs /boot/initrd.img-`uname -r` |grep mpt2sas

    • 对于SUSE 11 SP4,刷新命令:mkinitrd,查看Kernel Modules是否加载上了上面的驱动,如下图所示,表示已经成功加载。

  3. 对于SUSE 11 SP4,还需将虚拟机文件中的虚拟磁盘更改为实际物理磁盘,方法如下(其余操作系统Rad Hat/CentOS/Oracle Linux/SUSE 12/EulerOS等跳过此步骤):

    如果采用LVM分区机制,需要参考3.a~3.e修改盘符模式。

    1. 在虚拟机“/boot/grub”目录下执行blkid命令,检查磁盘分区是否正常。
      linux-a5d6:/boot/grub # blkid
      /dev/sda1: UUID="c23d47f8-ef1b-4c4e-9a3b-5ae138ef7184" TYPE="swap"
      /dev/sda2: UUID="27644978-e244-4a8c-996a-03119fdaff71" TYPE="ext3"

      如果出现磁盘分区没有UUID等异常情况,请检查安装虚拟机操作系统的步骤是否正确,并重新安装虚拟机。

    2. 使用vi编辑器打开“/boot/grub/menu.lst”文件,修改OS启动参数并保存配置。修改前后对比如下:

      修改前的menu.lst:

      修改后的menu.lst:

    3. 使用vi编辑器打开“/boot/grub/device.map”文件,修改前后对比如下:

      修改前的device.map:

      (hd0)   /dev/disk/by-id/ata-QEMU_HARDDISK_QM00001
      ~

      修改后的device.map:

      (hd0)   /dev/sda
    4. 使用vi编辑器打开“/etc/fstab”文件,修改前后对比如下:

      修改前的fstab:

      修改后的fstab:

    5. 使用vi编辑器打开“/etc/mtab”,删除/dev/sr0的CDROM所在行并保存配置。

      删除后的mtab:

      如果没有/dev/sr0配置项,无需执行此步骤。

    6. 使用vi编辑器打开“/etc/sysconfig/bootloader”,修改前后对比如下:

      修改前的bootloader:

      修改后的bootloader:

    如果SUSE 11 SP4采用LVM分区机制,则按照以下方法将虚拟机文件中的虚拟磁盘更改为实际物理磁盘:

    1. 在虚拟机“/boot/grub”目录下执行blkid命令,检查磁盘分区是否正常。

      如果出现磁盘分区没有UUID等异常情况,请检查安装虚拟机操作系统的步骤是否正确,并重新安装虚拟机。

    2. 使用vi编辑器打开“/boot/grub/menu.lst”文件,修改OS启动参数并保存配置。修改前后对比如下:

      修改前的menu.lst:

      修改后的menu.lst:

    3. 使用vi编辑器打开“/boot/grub/device.map”文件,修改前后对比如下:

      修改前的device.map:

      (hd0)    /dev/disk/by-id/ata-QEMU_HARDDISK_QM00001

      修改后的device.map:

      (hd0)    /dev/sda
      ~
    4. 使用vi编辑器打开“/etc/fstab”文件,修改前后对比如下:

      修改前的fstab:

      修改后的fstab:

    5. 使用vi编辑器打开“/etc/sysconfig/bootloader”,修改前后对比如下:

      修改前的bootloader:

      修改后的bootloader:

    配置完成后执行mkinitrd命令,如果回显信息中resume没有被更新为“by-uuid”模式,需要执行reboot后再次执行mkinitrd命令,确保resume被更新为“by-uuid”模式。

  4. 对于Ubuntu 18.04、Ubuntu 16.04 for ARM,还需要修改grub引导文件、fstab文件和interfaces文件。
    1. 修改“/etc/default/grub”配置文件中的参数。

      将GRUB_DISABLE_LINUX_UUID参数设置为true。

      ...
      # Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to linux
      GRUB_DISABLE_LINUX_UUID=true
      
      # Uncomment to disable generation of recovery mode menu entries
      ...

      修改后执行命令:sudo update-grub2

    2. 修改“/etc/fstab”中的UUID为物理磁盘/dev/sdax。硬盘的UUID可以通过sudo blkid命令获取。

    3. 修改“/etc/network/interfaces”文件,删除其中除了“lo interface”之外的其他interface信息。
      # This file describes the network interfaces available on your system
      # and how to activate them. For more information, see interfaces (5).
      
      source /etc/network/interfaces.d/*
      
      # The loopback network interface
      auto lo
      iface to inet loopback
      
      ~
      ~