You need to enable JavaScript to run this app.
导航

制作Linux镜像

最近更新时间2024.03.22 16:45:43

首次发布时间2021.07.09 13:31:09

操作场景

如果您拥有所需发行版本的基础镜像,您可以参考本文使用virt-manager制作QCOW2格式镜像并导入您的私有镜像到火山引擎平台。

此方式具有更高的定制化性,适用于需要复杂初始化系统镜像的场景,导入平台后,您可以使用该镜像重新部署复杂初始化系统或多次部署同样配置的云服务器。

前提条件

下文制作方法支持的基础镜像操作系统及相关版本如下,支持32位/64位。

  • Centos7.x 系列
  • Centos8.x 系列
  • Ubuntu 系列
  • Debian 系列

第一步:宿主机环境准备(可选)

本节适用于没有虚拟机的用户,如果您已有虚拟机,请跳过此步骤。

  1. 配置宿主机。

    1. 准备一台物理服务器作为镜像制作服务器(即宿主机)。

      宿主机操作系统的发行版无硬性要求,本文宿主机为X86架构并安装图形化界面(GUI)的CentOS 7.9操作系统。

    2. 登录宿主机。
    3. 执行如下命令,确认宿主机已开启虚拟化能力。
      egrep '(vmx|svm)' /proc/cpuinfo
      如下图所示,回显存在vmxsvm表示已开启虚拟化。
    4. 执行如下命令,确认宿主机内核高于3.10版本。
      uname -r
      如下图所示。
  2. 安装虚拟化软件。

    1. 执行如下命令,安装KVM与相关软件包。
      yum install -y qemu-kvm libvirt libvirt-python libvirt-client
      
    2. 执行如下命令,启动libvirtd服务。
      systemctl start libvirtd
      systemctl enable libvirtd # 执行本命令可配置libvirtd服务开机自启动
      
    3. 执行如下命令,确认libvirtd服务是否启动成功。
      systemctl status libvirtd
      
      当回显如下所示时,表示服务启动成功。
  3. 执行如下命令,安装virt-manager。

    yum install -y virt-manager
    
  4. 创建启动模式为UEFI的虚拟机时,还需完成如下配置。

    1. 请执行如下命令,安装OVMF。

      说明

      • 若您的宿主机操作系统源中没有edk2-ovmf,请执行wget --no-check-certificate http://www.kraxel.org/repos/firmware.repo -O /etc/yum.repos.d/firmware.repo命令,安装firmware源。
      • 本文宿主机与创建的虚拟机均为X86_64架构,若您创建其他架构虚拟机,请安装相应架构的OVMF。
      yum install -y edk2.git-ovmf-x64.noarch
      
    2. 配置libvirtd以启用UEFI。

      1. 执行如下命令,并按i键进入编辑模式。

        vim /etc/libvirt/qemu.conf
        
      2. 在配置文件中插入如下内容,将OVMF和运行时变量模板添加到libvirt配置中。

        请将nvram参数中路径替换为您安装OVMF的实际路径。

        nvram = [
                "/usr/share/edk2.git/ovmf-x64/OVMF_CODE-pure-efi.fd:/usr/share/edk2.git/ovmf-x64/OVMF_VARS-pure-efi.fd"
                ]
        
      3. ecs键,并输入:wq保存并退出。

      4. 执行如下命令,重启libvirtd服务。

        systemctl restart libvirtd
        
  5. 开启宿主机ip_forward功能。

    1. 执行如下命令,配置ip_forward功能。

      echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
      
    2. 执行如下命令,使配置生效。

      sysctl -p
      

第二步:在宿主机上创建虚拟机

  1. 在宿主机中准备基础镜像,请使用文件系统为EXT3、EXT4的单分区镜像,并且不要创建任何分区,否则可能出现自动扩容或启动异常问题。

    说明

    • 建议您使用官方镜像。
    • 若您可选的镜像文件包括QCOW2、ISO两种格式,建议选择ISO镜像。
  2. 执行如下命令,打开virt-manager。

    virt-manager
    
  3. 单击图标,开启新建虚拟机向导。

  4. 选择“Loca install media(ISO image or CDROM)”选项并单击“Forward”按钮,使用您准备的基础镜像安装虚拟机操作系统.。

  5. 单击“Browse...”按钮,打开选择窗口。

  6. 单击“Browse Local”按钮打开宿主机存储目录,选择您在宿主机中准备的基础镜像,单击“Open”按钮确认并返回新建虚拟机向导。

  7. 取消勾选“Automatically detect operating system based on install media”选项,根据使用的镜像信息自行选择“OS type”(镜像类型)与“Version”(发行版本)。

  8. 单击“Forward”按钮,配置虚拟机内存与CPU信息。

    您不能分配超过宿主机系统中可用的物理处理器(或超线程)的虚拟CPU,可用的虚拟CPU数量可查看相应配置框下方Up to X available信息。

  9. 单击“Forward”按钮,配置创建的磁盘镜像大小。

    请考虑虚拟机启用及需要在其中安装的应用程序,为其分配足够的空间。

  10. 单击“Forward”按钮,配置虚拟机名称与网络,并勾选“Customize configuration before install”。

    说明

    • 虚拟机名称可以包含字母、数字和以下字符:下划线(_)、句号(.)和连字符(-)。
    • 网络配置默认为Virtual network 'default' : NAT',如需更改,请在“Network selection”模块下拉选择。
  11. 确认虚拟机配置后,单击“Finish”按钮创建虚拟机。

  12. 在个性化定制页面中,可以配置虚拟机启动模式为UEFI或调整虚拟机硬件配置。启动模式调整步骤如下:

    1. 在左侧目录树选择“Overview”。
    2. 在“Hypervisor Details”模块的“Firmware”选项下拉选择UEFI,单击“Apply”按钮即可配置虚拟机启动模式为UEFI

      3. 单击窗口左上角“Begin Installation”按钮,开始安装虚拟机。
  13. 跟随安装指引进入虚拟机配置页面时,需要您进入网络配置页面开启网络连接。

    1. 单击“NETWORK & HOST NAME”按钮,进入网络配置页面。

    2. 单击开启选项,确认开启网络连接后,单击左上角“Done”按钮,保存并回到个性化配置页面。

  14. 完成其他个性化配置后,单击“Continue”按钮,跟随指引完成虚拟机安装。

第三步:修改虚拟机文件

修改/etc/fstab文件

您需要登录创建的虚拟机,注释或删除将/etc/fstab文件中存在的数据盘目录信息。

  1. 执行如下命令,打开/etc/fstab文件。

    vi /etc/fstab
    
  2. i键进入编辑模式,并注释或删除数据盘目录信息。

  3. esc键输入:wq保存并退出编辑。

修改启动引导文件(可选)

若您需要制作UEFI启动模式的镜像,可根据本节指引登录虚拟机,修改虚拟机的启动引导文件。

  1. 在虚拟机中执行如下命令,安装grub2-efi。

    • CentOS镜像

      yum install grub2-efi-x64 && yum install grub2-efi-x64-modules
      
    • Debian/Ubuntu镜像

      apt install --reinstall grub-common grub-efi-amd64
      
  2. 执行如下命令,以UEFI为引导重装grub。

    • CentOS镜像

      grub2-install --target=x86_64-efi --efi-directory=/boot/efi /dev/vda
      grub2-install --target=x86_64-efi --removable --efi-directory=/boot/efi --bootloader-id=GRUB
      
    • Debian/Ubuntu镜像

      grub-install --target=x86_64-efi --efi-directory=/boot/efi /dev/vda
      grub-install --target=x86_64-efi --removable --efi-directory=/boot/efi --bootloader-id=GRUB
      
  3. 执行如下命令,重新生成grub2-config文件。

    重新生成grub2-config文件将覆盖原有配置,建议您提前备份。

    • CentOS镜像

      grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg
      
    • Debian/Ubuntu镜像

      grub-mkconfig -o /boot/grub/grub.cfg
      
  4. 执行如下命令,修改grub2-mkconfig文件配置。

    Debian、Ubuntu镜像请跳过本步骤。

    sed -i 's/linux16/linuxefi/g' /boot/grub2/grub.cfg
    sed -i 's/initrd16/initrdefi/g' /boot/grub2/grub.cfg
    

第四步:在虚拟机上安装Cloud-init

  1. 执行如下命令,下载20.03版本的cloud-init,更多版本请前往cloud-init官网获取下载链接。

    wget https://launchpad.net/cloud-init/trunk/20.3/+download/cloud-init-20.3.tar.gz
    
  2. 安装Python3版本和cloud-init依赖。

    说明

    • 请选择Python3.6以上版本进行安装,否则会出现Python3和部分pip包不兼容的情况,影响cloud-init运行。
    • 建议您从 Python官网 手动下载安装Python3。
    • CentOS 7/8 系列:依次执行以下命令安装Python3和相关依赖。

      yum install python3 -y
      yum install python3-pip -y
      yum install cloud-utils-growpart -y
      
    • Ubuntu/Debian 系列:依次执行以下命令安装Python3和相关依赖。

      apt-get install python3 -y
      apt-get install python3-pip -y
      apt-get install cloud-guest-utils -y
      
  3. 安装cloud-init: 依次执行以下命令进行安装。

    tar zxvf cloud-init-20.3.tar.gz
    ls
    cd cloud-init-20.3
    pip3 install -r requirements.txt -i https://mirrors.volces.com/pypi/simple/
    python3 setup.py build
    python3 setup.py install --init-system systemd
    
    ln -s /usr/local/bin/cloud-init /usr/bin/cloud-init
    
    
    systemctl enable cloud-init-local.service
    systemctl enable cloud-init.service
    systemctl enable cloud-config.service
    systemctl enable cloud-final.service
    
  4. 执行vim /etc/cloud/cloud.cfg命令,替换cloud-init配置文件为如下内容,执行:wq保存修改。

    注意

    若您制作的是CentOS镜像,请在system_info模块增加distro: rhel配置。

    users:
    - default  
    
    disable_root: 0
    ssh_pwauth: 1
    growpart:
        mode: auto
        devices: ['/']
        ignore_growroot_disabled: false
    
    mount_default_fields: [~, ~, 'auto', 'defaults,nofail,x-systemd.requires=cloud-init.service', '0', '2']
    resize_rootfs_tmp: /dev
    ssh_deletekeys: 1
    syslog_fix_perms: ~
    disable_vmware_customization: false
    
    manage_etc_hosts: localhost
    
    cloud_init_modules:
      - disk_setup
      - migrator
      - bootcmd
      - write-files
      - growpart
      - resizefs
      - set_hostname
      - update_hostname
      - update_etc_hosts
      - rsyslog
      - users-groups
      - ssh
    
    cloud_config_modules:
      - mounts
      - locale
      - set-passwords
      - rh_subscription
      - yum-add-repo
      - package-update-upgrade-install
      - timezone
      - puppet
      - chef
      - salt-minion
      - mcollective
      - disable-ec2-metadata
      - runcmd
    
    cloud_final_modules:
      - rightscale_userdata
      - scripts-per-once
      - scripts-per-boot
      - scripts-per-instance
      - scripts-user
      - ssh-authkey-fingerprints
      - keys-to-console
      - phone-home
      - final-message
      - power-state-change
    
    system_info:
      # distro: rhel # CentOS镜像需打开此配置
      paths:
        cloud_dir: /var/lib/cloud
        templates_dir: /etc/cloud/templates
      ssh_svcname: sshd
    
  5. 更换cloud-init 数据源,执行vim /etc/cloud/cloud.cfg.d/90_dpkg.cfg命令创建文件,写入以下内容后,执行:wq保存修改。

    datasource_list: [ConfigDrive, OpenStack]
    
    datasource:
        OpenStack:
            metadata_urls: ["http://100.96.0.96"]
            max_wait: -1
            timeout: 5
            retries: 5
            apply_network_config: True
    

第五步:在虚拟机上安装驱动

安装Virtio1.1驱动

若制作如下规格的实例使用的镜像,需根据本节指引安装Virtio1.1驱动。各规格详情可查看实例规格介绍

系统架构类型实例规格

x86计算

通用型

  • 通用型g3i
  • 通用型g3a

计算型

  • 计算型c3i
  • 计算型c3a

内存型

  • 内存型r3i
  • 内存型r3a
本地SSD型本地SSD型i3s
弹性裸金属所有弹性裸金属实例规格-
异构计算GPU计算型GPU计算型gni3

说明

  • 若您在虚拟机中上传的基础镜像是veLinux、CentOS 8.x(及以上版本)、Ubuntu Server 20.xx(及以上版本)及Debian 11(及以上版本)镜像,创建任意规格实例均无需安装Virtio1.1驱动,请跳过此步骤。
  • 安装驱动前请先安装好kernel-headers和kernel-devel,并确保与kernel版本一致,否则可能会出现安装驱动失败的情况(如有升级kernel,请重启后再安装驱动)。您也可以根据驱动源代码进行编译适配,或提交工单获取支持。
  • 如果您的镜像用于采用LTS-内核的弹性裸金属实例,请参考在虚拟机上安装LTS-内核与Virtio1.1驱动进行操作。
  1. 通过脚本检测虚拟机中的Virtio驱动版本是否符合要求。

    1. 执行如下命令,使用公网下载检测脚本文件。

      wget https://virtio11-drivers.tos-cn-beijing.volces.com/virtio_check
      
    2. 执行如下命令,为脚本文件添加执行权限。

      chmod +x ./virtio_check
      
    3. 在脚本文件所在目录中,执行如下命令,检查Virtio驱动版本是否符合要求。

      ./virtio_check
      
      • 若回显如下所示,表示您的虚拟机中已安装符合要求的Virtio驱动,请跳过本节。
      • 若回显如下所示,表示您的虚拟机中未安装符合要求的Virtio驱动,请继续执行本节操作。
  2. 安装Virtio1.1驱动。

    • CentOS操作系统,依次执行以下命令安装驱动。

      说明

      暂仅支持如下操作系统及内核版本,安装Virtio1.1驱动。

      镜像版本内核版本
      CentOS 7.93.10.0-1160.71.1
      CentOS 7.83.10.0-1127.19.1
      CentOS 7.73.10.0-1062.18
      CentOS 7.63.10.0-957.27.2
      CentOS 7.53.10.0-862.14.4
      CentOS 7.43.10.0-693.21.1
      CentOS 7.33.10.0-514.26.2
      CentOS 7.23.10.0-327.36.3
      • 公网环境:
        yum -y install rpm-build redhat-lsb-core
        yum -y install epel-release
        
        sed -e 's!^metalink=!#metalink=!g' \
            -e 's!^#baseurl=!baseurl=!g' \
            -e 's!//download\.fedoraproject\.org/pub!//mirrors.volces.com!g' \
            -i /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel-testing.repo
            
        yum -y install --enablerepo=epel dkms
        
        wget https://virtio11-drivers.tos-cn-beijing.volces.com/virtio-1.1.0-1.noarch.centos.rpm
        
        rpm -i virtio-1.1.0-1.noarch.centos.rpm
        rm -rf virtio-1.1.0-1.noarch.centos.rpm
        
      • 内网环境:
        yum -y install rpm-build redhat-lsb-core
        yum -y install epel-release
        
        sed -e 's!^metalink=!#metalink=!g' \
            -e 's!^#baseurl=!baseurl=!g' \
            -e 's!//download\.fedoraproject\.org/pub!//mirrors.ivolces.com!g' \ 
            -i /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel-testing.repo
            
        yum -y install --enablerepo=epel dkms
        
        wget https://mirrors.ivolces.com/extra-tools/centos/7/rpms/virtio-1.1.0-1.noarch.centos.rpm
        
        rpm -i virtio-1.1.0-1.noarch.centos.rpm
        rm -rf virtio-1.1.0-1.noarch.centos.rpm
        
    • Ubuntu Server 18.04 LTS 64位,依次执行以下命令安装驱动。

      apt install -y dkms fakeroot dh-make
      
      wget https://virtio11-drivers.tos-cn-beijing.volces.com/virtio_ubuntu-18.04-v11.tar
      tar xf virtio_ubuntu-18.04-v11.tar
      cd virtio_ubuntu-18.04-v11/
      ./install.sh
      cd ..
      rm -rf virtio_ubuntu-18.04-v11*
      
    • Ubuntu Server 16.04 LTS 64位(内核版本4.4.x),依次执行以下命令安装驱动。

      apt-get install -y dkms fakeroot dh-make
      
      wget https://virtio11-drivers.tos-cn-beijing.volces.com/virtio_ubuntu-16.04-kernel-4.4-v11.tar  
      tar xf virtio_ubuntu-16.04-kernel-4.4-v11.tar
      cd virtio_ubuntu-16.04-kernel-4.4-v11
      ./install.sh
      cd ..
      rm -rf virtio_ubuntu-16.04-kernel-4.4-v11*
      
      
    • Debian 10 64位(内核版本4.19.x),依次执行以下命令安装驱动。

      • 公网安装
        apt install -y dkms fakeroot dh-make
        apt install -y linux-image-$(uname -r)
        apt install -y linux-headers-$(uname -r)
        apt install -y linux-tools
        
        wget https://virtio11-drivers.tos-cn-beijing.volces.com/virtio-dkms_1.1.0_amd64.deb  
        dpkg -i virtio-dkms_1.1.0_amd64.deb  
        rm -rf virtio-dkms_1.1.0_amd64.deb  
        
      • 内网安装
        apt install -y dkms fakeroot dh-make
        apt install -y linux-image-$(uname -r)
        apt install -y linux-headers-$(uname -r)
        apt install -y linux-tools
        
        wget https://mirrors.ivolces.com/extra-tools/debian/pool/main/v/virtio-dkms/virtio-dkms_1.1.0_all.deb
        dpkg -i virtio-dkms_1.1.0_all.deb
        rm -rf virtio-dkms_1.1.0_all.deb
        
    • Debian 9 64位(内核版本4.9.x),依次执行以下命令安装驱动。

      • 公网安装
        apt install -y dkms fakeroot dh-make
        apt install -y linux-image-$(uname -r)
        apt install -y linux-headers-$(uname -r)
        apt install -y linux-tools
        
        wget http://mirrors.byted.org/extra-tools/debian/pool/main/v/virtio/virtio_1.1.0_all.debian.deb 
        apt-get install -y ./virtio_1.1.0_all.debian.deb
        rm -rf virtio_1.1.0_all.debian.deb
        
      • 内网安装
        apt install -y dkms fakeroot dh-make
        apt install -y linux-image-$(uname -r)
        apt install -y linux-headers-$(uname -r)
        apt install -y linux-tools
        
        wget https://mirrors.ivolces.com/extra-tools/debian/pool/main/v/virtio/virtio_1.1.0_all.debian.deb
        apt-get install -y ./virtio_1.1.0_all.debian.deb
        rm -rf virtio_1.1.0_all.debian.deb
        

安装LTS-内核与Virtio1.1驱动(可选)

本节仅适用于制作弹性裸金属实例并采用LTS-内核方式使用的Linux镜像,如果您的镜像不用于该规格实例,请跳过此步骤。

说明

  • 如果您的镜像用于为弹性裸金属实例但不采用LTS-内核的方式,请参考在虚拟机上安装Virtio1.1驱动进行操作。
  • 此操作不可以直接在裸金属实例上执行,需要在火山ECS虚拟机上执行,制作自定义镜像后给裸金属实例使用。
  • 本节仅提供一种裸金属实例使用自定义内核的思路与方法。
  • 整体安装流程。
    • 如果存在旧的Virtio1.1驱动需要先将其删除。
    • 在火山ECS虚拟机上安装LTS-内核,并重启到指定版本的LTS-内核。
    • 安装LTS-内核版本指定的Virtio1.1驱动包。
    • 更新initramfs/initrd,并重启虚拟机查看是否正常。
  1. 删除旧的Virtio1.1驱动(可选)。

    • CentOS 7.x 64位:
      依次执行以下命令删除已有的Virtio1.1驱动。

      yum remove -y virtio-1.1.0-1dkms
      
    • Debian 10 64位:
      依次执行以下命令删除已有的Virtio1.1驱动。

      apt remove --purge -y virtio-dkms
      
    • Ubuntu Server 16.04/18.04 64位:
      依次执行以下命令删除已有的Virtio驱动。

      apt remove --purge -y virtio-dkms
      sed -i --follow-symlinks '/v11/d' /etc/initramfs-tools/modules
      rm -fr /etc/initramfs-tools/scripts/init-premount/rebind.sh
      rm -fr /usr/share/initramfs-tools/hooks/flock
      
  2. 安装LTS-内核。

    • CentOS 7.x 64位:

      1. 依次执行以下命令安装LTS-内核。

        • LTS-4.9内核:依次执行以下命令安装LTS-内核。
          wget https://virtio11-drivers.tos-cn-beijing.volces.com/lts-rpm/kernel-4.9.324-1.x86_64.rpm
          wget https://virtio11-drivers.tos-cn-beijing.volces.com/lts-rpm/kernel-devel-4.9.324-1.x86_64.rpm
          wget https://virtio11-drivers.tos-cn-beijing.volces.com/lts-rpm/kernel-headers-4.9.324-1.x86_64.rpm
          yum install -y kernel-headers-4.9.324-1.x86_64.rpm kernel-devel-4.9.324-1.x86_64.rpm
          yum install -y kernel-4.9.324-1.x86_64.rpm
          
        • LTS-4.14内核:依次执行以下命令安装LTS-内核。
          wget https://virtio11-drivers.tos-cn-beijing.volces.com/lts-rpm/kernel-4.14.289-1.x86_64.rpm
          wget https://virtio11-drivers.tos-cn-beijing.volces.com/lts-rpm/kernel-devel-4.14.289-1.x86_64.rpm
          wget https://virtio11-drivers.tos-cn-beijing.volces.com/lts-rpm/kernel-headers-4.14.289-1.x86_64.rpm
          yum install -y kernel-headers-4.14.289-1.x86_64.rpm kernel-devel-4.14.289-1.x86_64.rpm
          yum install -y kernel-4.14.289-1.x86_64.rpm
          
        • LTS-4.19内核:依次执行以下命令安装LTS-内核。
          wget https://virtio11-drivers.tos-cn-beijing.volces.com/lts-rpm/kernel-4.19.253-1.x86_64.rpm
          wget https://virtio11-drivers.tos-cn-beijing.volces.com/lts-rpm/kernel-devel-4.19.253-1.x86_64.rpm
          wget https://virtio11-drivers.tos-cn-beijing.volces.com/lts-rpm/kernel-headers-4.19.253-1.x86_64.rpm
          yum install -y kernel-headers-4.19.253-1.x86_64.rpm kernel-devel-4.19.253-1.x86_64.rpm
          yum install -y kernel-4.19.253-1.x86_64.rpm
          
      2. 依次执行以下命令切换内核并重启到指定的LTS内核版本(以LTS-4.9为例)。

        1. 查看当前系统有几个内核

          cat /boot/efi/EFI/centos/grub.cfg |grep menuentry
          

          回显示例:

          if [ x"${feature_menuentry_id}" = xy ]; then
            menuentry_id_option="--id"
            menuentry_id_option=""
          export menuentry_id_option
          menuentry 'CentOS Linux (4.9.324) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-1127.19.1.el7.x86_64-advanced-bf734ac7-0328-4e7f-8ada-ca0917a32945' {
          menuentry 'CentOS Linux (3.10.0-1127.19.1.el7.x86_64) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-1127.19.1.el7.x86_64-advanced-bf734ac7-0328-4e7f-8ada-ca0917a32945' {
          menuentry 'CentOS Linux (0-rescue-ccc58c7f32cb4030969ada15e4ae0d0f) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-0-rescue-ccc58c7f32cb4030969ada15e4ae0d0f-advanced-bf734ac7-0328-4e7f-8ada-ca0917a32945' {
          
        2. 设置默认的启动内核
          以上一步回显中的“CentOS Linux (4.9.324) 7 (Core)”内核为默认启动。

          grub2-set-default "CentOS Linux (4.9.324) 7 (Core)"
          
        3. 查看默认启动的系统内核。

          grub2-editenv list 
          

          回显示例:

          saved_entry=CentOS Linux (4.9.324) 7 (Core)
          
        4. 重启实例。

          reboot
          
        5. 重启后,查看当前的系统内核。

          uname -r 
          

          回显示例:

          4.9.324
          
    • Debian 10 64位:

      1. 依次执行以下命令安装LTS-内核。
        • LTS-4.9内核:
          依次执行以下命令安装LTS-内核。
          wget https://virtio11-drivers.tos-cn-beijing.volces.com/lts-deb/linux-image-4.9.324_4.9.324-1_amd64.deb
          wget https://virtio11-drivers.tos-cn-beijing.volces.com/lts-deb/linux-headers-4.9.324_4.9.324-1_amd64.deb
          apt install -y ./linux*4.9*.deb
          
        • LTS-4.14内核:
          依次执行以下命令安装LTS-内核。
          wget https://virtio11-drivers.tos-cn-beijing.volces.com/lts-deb/linux-image-4.14.289_4.14.289-1_amd64.deb
          wget https://virtio11-drivers.tos-cn-beijing.volces.com/lts-deb/linux-headers-4.14.289_4.14.289-1_amd64.deb
          apt install -y ./linux*4.14*.deb
          
        • LTS-4.19内核:
          依次执行以下命令安装LTS-内核。
          wget https://virtio11-drivers.tos-cn-beijing.volces.com/lts-deb/linux-image-4.19.253_4.19.253-1_amd64.deb
          wget https://virtio11-drivers.tos-cn-beijing.volces.com/lts-deb/linux-headers-4.19.253_4.19.253-1_amd64.deb
          apt install -y ./linux*4.19*.deb
          
    1. 依次执行以下命令切换内核并重启到指定的LTS内核版本(以LTS-4.9为例)。
      1. 查看当前系统有几个内核。

        cat /boot/grub/grub.cfg | grep menuentry
        

        回显示例:

        if [ x"${feature_menuentry_id}" = xy ]; then
          menuentry_id_option="--id"
          menuentry_id_option=""
        export menuentry_id_option
        menuentry 'Debian GNU/Linux' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-8b9ce818-459e-4024-83f6-a5165ae179f2' {
        submenu 'Advanced options for Debian GNU/Linux' $menuentry_id_option 'gnulinux-advanced-8b9ce818-459e-4024-83f6-a5165ae179f2' {
        menuentry 'Debian GNU/Linux, with Linux 4.19.0-18-amd64' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.19.0-18-amd64-advanced-8b9ce818-459e-4024-83f6-a5165ae179f2' {
        menuentry 'Debian GNU/Linux, with Linux 4.9.324' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.9.324-advanced-8b9ce818-459e-4024-83f6-a5165ae179f2' {
        menuentry 'System setup' $menuentry_id_option 'uefi-firmware' {
        
      2. 设置默认的启动内核。
        以上一步回显中的'Debian GNU/Linux, with Linux 4.9.324'内核为默认启动。

        vim /etc/default/grub
        

        请将文件中GRUB_DEFAULT=0修改为:

        其中Advanced options for Debian GNU/Linux是一级菜单,Debian GNU/Linux, with Linux 4.9.324是二级菜单,两者之间用>符号连接。

        GRUB_DEFAULT="Advanced options for Debian GNU/Linux>Debian GNU/Linux, with Linux 4.9.324"
        
      3. 更新grub文件。

        update-grub
        
      4. 重启实例。

        reboot
        
      5. 重启之后,查看当前的系统内核。

        uname -r 
        

        回显示例:

        4.9.324
        
    • Ubuntu Server 16.04/18.04 64位:
      1. LTS-4.x内核,参考上文Debian 10 64位 安装方式,安装LTS-内核。
      2. 依次执行以下命令切换内核并重启到指定的LTS内核版本(以LTS-4.9为例)。
        1. 查看当前系统有几个内核。

          cat /boot/grub/grub.cfg | grep menuentry
          

          回显示例:

          if [ x"${feature_menuentry_id}" = xy ]; then
            menuentry_id_option="--id"
            menuentry_id_option=""
          export menuentry_id_option
          menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-832b0bb8-00f9-41b6-9d0d-8387e07a4f8c' {
          submenu 'Advanced options for Ubuntu' $menuentry_id_option 'gnulinux-advanced-832b0bb8-00f9-41b6-9d0d-8387e07a4f8c' {
          menuentry 'Ubuntu, with Linux 4.15.0-174-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.15.0-174-generic-advanced-832b0bb8-00f9-41b6-9d0d-8387e07a4f8c' {
          menuentry 'Ubuntu, with Linux 4.9.324' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.9.324-advanced-832b0bb8-00f9-41b6-9d0d-8387e07a4f8c' {
          menuentry 'System setup' $menuentry_id_option 'uefi-firmware' {
          
        2. 设置默认的启动内核。
          以上一步回显中的'Ubuntu, with Linux 4.9.324'内核为默认启动。

          vim /etc/default/grub
          

          将文件中GRUB_DEFAULT=0修改为:

          其中Advanced options for Ubuntu是一级菜单,Ubuntu, with Linux 4.9.324是二级菜单,两者之间用>符号连接。

          GRUB_DEFAULT="Advanced options for Ubuntu>Ubuntu, with Linux 4.9.324"
          
        3. 更新grub文件。

          update-grub
          
        4. 重启实例。

          reboot
          
        5. 重启之后,查看当前的系统内核。

          uname -r 
          

          回显示例:

          4.9.324
          
  3. 成功切换到LTS-内核版本后,安装LTS-Virtio1.1驱动。

    1. 安装依赖的dkms包工具。

      • CentOS 7.x 64位:
        依次执行以下命令安装dkms。
        • 在火山引擎实例中安装。
          yum -y install rpm-build redhat-lsb-core
          yum -y install epel-release
          sed -e 's!^metalink=!#metalink=!g' \
            -e 's!^#baseurl=!baseurl=!g' \
            -e 's!//download\.fedoraproject\.org/pub!//mirrors.ivolces.com!g' \
            -i /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel-testing.repo
          yum -y install --enablerepo=epel dkms
          
        • 在非火山引擎实例中安装。
          yum -y install rpm-build redhat-lsb-core
          yum -y install epel-release
          sed -e 's!^metalink=!#metalink=!g' \
              -e 's!^#baseurl=!baseurl=!g' \
              -e 's!//download\.fedoraproject\.org/pub!//mirrors.volces.com!g' \
              -i /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel-testing.repo
          yum -y install --enablerepo=epel dkms
          
      • Debian 10 64位:
        依次执行以下命令安装dkms。
        apt install -y dkms fakeroot dh-make
        
      • Ubuntu Server 16.04/18.04 64位:
        依次执行以下命令安装dkms。
        apt install -y dkms fakeroot dh-make
        
    2. 依次执行如下命令,安装LTS-Virtio1.1驱动。

      wget https://virtio11-drivers.tos-cn-beijing.volces.com/virtio-1.1.0.dkms.tar.gz
      dkms ldtarball virtio-1.1.0.dkms.tar.gz
      dkms build virtio/1.1.0
      dkms install virtio/1.1.0
      
  4. 添加内核启动参数。

    • Centos 7/8 系列:
      执行以下命令,添加内核启动参数。
      sed -i 's/\(^GRUB_CMDLINE_LINUX=.*\)"/\1 pci=realloc intel_idle.max_cstate=1 processor.max_cstate=1 iommu=pt"/g' /etc/default/grub
      grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg
      dracut --force /boot/initramfs-$(uname -r).img $(uname -r)
      
    • Ubuntu/Debian 系列:
      执行以下命令,添加内核启动参数。
      sed -i 's/\(^GRUB_CMDLINE_LINUX=.*\)"/\1 pci=realloc intel_idle.max_cstate=1 processor.max_cstate=1 iommu=pt"/g' /etc/default/grub
      update-grub
      

安装MLNX驱动(可选)

如需使用网卡Offload特性,请在虚拟机上安装MLNX驱动,操作详情可查看Linux Drivers

说明

若您使用支持网卡Offload特性的规格(例如GPU计算型gni2),需要安装MLNX驱动。

第六步:在虚拟机中安装插件

  • 密码插件
    为实现用于重置、绑定/解绑密码功能,您制作的自定义镜像必须安装密码插件,否则可能导致镜像无法正常使用。安装操作可查看安装密码插件
  • blk-none
    为避免在实例中解压大压缩包时出现I/O问题,火山引擎提供了blk-none工具,该工具会根据实例磁盘类型,将磁盘调度算法置为none或者noop避免该问题出现。安装操作详情可查看解决方案

    注意

    若您制作CentOS 7.x、Ubuntu 16.04、Ubuntu 18.04或Debian 9镜像,且该自定义镜像将用于通用型(g3a/g3i)/计算型(c3a/c3i)/内存型(r3a/r3i)规格实例,必须安装本工具。

  • 云监控插件
    如需从实例内部进行监控,以获取更深层、更准确的实例运行情况,您还可以为自定义镜像安装云监控插件。安装操作可查看安装插件

第七步:在虚拟机中安装个性化软件(可选)

您可以按照业务的需求,自行将个性化软件安装在系统盘中,例如JDK、Linux图形化桌面。

第八步:检测镜像规范

您可以在虚拟机中运行自定义镜像规范检测工具,检测当前操作系统各项配置是否符合创建云服务器实例规范,避免通过自定义镜像创建出功能不齐全的实例,操作详情可查看使用工具检测自定义镜像规范

第九步:导出镜像

  1. 在虚拟机界面顶部选择“Virtual Machine > Shut Down > Shut Down”关闭虚拟机。

  2. 在宿主机中执行如下命令,打开存放镜像的文件夹,通过虚拟机名称即可查看镜像文件。

    xdg-open /var/lib/libvirt/images/
    

说明

目前仅支持上传QCOW2或者RAW两种格式的镜像,如果镜像不满足以下两种格式,则需要在宿主机中执行如下命令将镜像格式进行转换。操作详情可查看转换镜像格式

后续操作

您可以将创建的镜像文件上传至火山引擎作为自定义镜像,上传成功后,即可使用该镜像创建实例,操作详情可查看导入自定义镜像