VirtualBox 制作自定义的阿里云镜像方法

1 应用场景

  1. 当我们在日常环境中频繁用到一种特定环境的镜像,而云上通用镜像版本不满足我们的要求的时候,需要我们制作一个经过特殊初始化并制作成为特定环境的镜像,上传到云上,然后在云上创建虚拟机的时候可以选择此镜像快速创建应用部署环境;
  2. 当我们的项目环境在云上提供的镜像源不满足要求的时候(比如目前国产化系统的使用场景),需要我们通过下载一些定向系统来制作镜像,然后在云上创建相关虚拟机来满足使用场景等。

        为了满足以上的场景,当然还会有其它的一些特殊场景,我们可以通过用VirtualBox来制作镜像并上传的云上,然后根据我们的需要创建需要的虚拟机来作为测试环境。

接下来我们用一款国产系统BCLinux-Euler21.10来制作一个镜像文件并上传到云上,然后通过此镜像来创建ECS

2  制作Linux镜像文件

2.1 创建虚拟机并安装操作系统

2.1.1 创建虚拟机

1) 打开virtualBox,然后点击菜单栏的【控制】-->【新建】

2)配置虚拟机的基本信息

名称: 自定义系统的名称

文件夹:虚拟机安装的路径

虚拟光盘:安装系统的iso文件路径,暂不指定

版本:由于iso文件未选择,版本无法判断

类型: 选择系统类型

版本:选择系统版本

3)选择虚拟机的CPU和内存大小--2c/4GB

4)选择虚拟机磁盘大小

5)确认后点击完成,虚拟机已创建,接下来需要安装操作系统

2.1.2 安装操作系统

磁盘存储类型配置

1)在虚拟机界面,选择【存储】-->选择添加盘片

2)点击有侧小光盘图标,并选择iso文件路径,点击确定

3)由于阿里云的镜像文件格式:虚拟机磁盘类型为VHD(虚拟硬盘),所以我们需要配置虚拟机的磁盘类型为VHD格式;选择原来的vdi类型的磁盘,然后找到右侧小光盘图标,选择或创建一个虚拟硬盘;

4)选择磁盘类型为VHD

5)继续选择磁盘的分配方法

6)设定磁盘大小

7)选择新创建的磁盘并点击选择

8)这时看磁盘类型已经切换为vhd类型格式,点击确定退出此界面

虚拟机网络预配置

1)选择【网络】,并在网卡1选择网络地址转换(NAT)

2)网卡2选择仅主机网络模式

安装操作系统

1)点击主界面的启动按钮

2) 通过键盘上下键选择第一个安装系统

3)语言选择为英文,并点击继续

初始root密码:VirtualBox1234

4)按照图中的顺序依次对系统安装进行相关配置

keyboard

INSTALLTION SOURCE

INSTALLTION DESTINATION:选择系统磁盘分区策略

a.在存储配置下选择自定义配置

b.选择页面的+后选择挂载点为根"/",期望存储为磁盘存储大小,点击增加挂载点

c. 选择设备类型为:标准分区(standard)

LANGUAGE SUPPORT:选择系统语言

SOFTWARE SELECTION:选择需要安装的工具及服务

SECURITY ENHANCEMENT :修改系统安装策略

TIME & DATE :修改系统时区

NETWORK & HOSTNAME  : 配置网络开启自启

ROOT PASSWORD:输入root初始密码  VirtualBox1234(可以根据自定义来设置)

重启系统

以上启动会重新进入安装系统,安装顺序选择关闭

修改BIOS启动顺序;点击系统将硬盘的启动顺序上调为第一,然后确当,点击虚拟机启动按钮

输入用户名和密码系统登录完成

查看分区情况:确认根分区挂载,否则后面会导致指向失败

2.2 系统环境初始化

网络配置:

将nat网卡和主机模式网卡分别修改为开机自启动,然后重启网络

[root@localhost ~]# cd /etc/sysconfig/network-scripts
[root@localhost network-scripts]# ls
ifcfg-enp0s3  ifcfg-enp0s8
[root@localhost network-scripts]# vi ifcfg-enp0s3
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=dhcp
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=enp0s3
UUID=133d7209-6310-49a1-9e01-07b922188a6d
DEVICE=enp0s3
ONBOOT=yes    #将no改为yes,开机自启

[root@localhost network-scripts]# vi ifcfg-enp0s8
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=dhcp
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=enp0s8
UUID=9b0fc4e2-df7a-428a-ac99-ff0ed04bb55e
DEVICE=enp0s8
ONBOOT=yes  #将no改为yes,开机自启

重启网络:

[root@localhost ~]# nmcli con reload ; nmcli con up enp0s3
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/5)
[root@localhost ~]# nmcli con reload ; nmcli con up enp0s8
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/6)
[root@localhost ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 08:00:27:61:9e:03 brd ff:ff:ff:ff:ff:ff
    inet 10.0.2.15/24 brd 10.0.2.255 scope global dynamic noprefixroute enp0s3
       valid_lft 86395sec preferred_lft 86395sec
    inet6 fe80::ce4b:d74e:2fa6:9376/64 scope link noprefixroute
       valid_lft forever preferred_lft forever
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 08:00:27:ed:60:23 brd ff:ff:ff:ff:ff:ff
    inet 192.168.56.102/24 brd 192.168.56.255 scope global dynamic noprefixroute enp0s8
       valid_lft 598sec preferred_lft 598sec
    inet6 fe80::3d2e:7a05:6714:cbc/64 scope link noprefixroute
       valid_lft forever preferred_lft forever

网络测试:ping www.baidu.com

[root@localhost ~]# ping www.baidu.com
PING www.a.shifen.com (110.189.38.150) 56(84) bytes of data.
64 bytes from 110.189.38.150 (110.189.38.150): icmp_seq=1 ttl=46 time=7.48 ms
64 bytes from 110.189.38.150 (110.189.38.150): icmp_seq=2 ttl=46 time=10.7 ms
64 bytes from 110.189.38.150 (110.189.38.150): icmp_seq=3 ttl=46 time=11.3 ms
64 bytes from 110.189.38.150 (110.189.38.150): icmp_seq=4 ttl=46 time=9.50 ms
64 bytes from 110.189.38.150 (110.189.38.150): icmp_seq=5 ttl=46 time=9.53 ms
64 bytes from 110.189.38.150 (110.189.38.150): icmp_seq=6 ttl=46 time=18.9 ms
64 bytes from 110.189.38.150 (110.189.38.150): icmp_seq=7 ttl=46 time=9.74 ms

自定义配置

开启IPV6

vi /etc/modprobe.d/disable_ipv6.conf
options ipv6 disable=0

开启ipv6网络配置

vi /etc/sysconfig/network
NETWORKING=yes
NETWORKING_IPV6=yes

开启IPV4和IPV6转发

vi /etc/sysctl.conf
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv6.conf.all.disable_ipv6 = 0
net.ipv6.conf.default.disable_ipv6 = 0
net.ipv6.conf.lo.disable_ipv6 = 0
net.ipv6.conf.all.forwarding = 1
net.ipv6.conf.enp0s3.disable_ipv6 = 0

开启网络依赖内核

#以下是开启“iptables”模式需要加载的内核模块
#需要加载的内核列表
cat > /etc/modules-load.d/iptables.conf <<EOF
br_netfilter
nf_conntrack
ip_tables
ip6_tables
ip_set
xt_set
ipt_rpfilter
ip6t_rpfilter
ip6t_REJECT
ipt_REJECT
ip6t_NPT
EOF


#创建加载内核模块脚本来开启
cat > /etc/sysconfig/modules/ip6_tables.modules << EOF
#!/bin/bash
/sbin/modprobe br_netfilter
/sbin/modprobe nf_conntrack
/sbin/modprobe ip_tables
/sbin/modprobe ip6_tables
/sbin/modprobe ip_set
/sbin/modprobe xt_set
/sbin/modprobe ipt_rpfilter
/sbin/modprobe ip6t_rpfilter
/sbin/modprobe ip6t_REJECT
/sbin/modprobe ipt_REJECT
/sbin/modprobe ip6t_NPT
EOF

#加可执行权限后,系统启动后会自动加载
chmod +x /etc/sysconfig/modules/ip6_tables.modules

#立即生效
/etc/sysconfig/modules/ip6_tables.modules

2.3 安装cloud-init

cloud-init提供了ECS实例在启动阶段完成系统初始化配置的能力。如果您的自定义镜像未安装cloud-init,请手动安装,保证运行该镜像的ECS实例能成功完成初始化配置。本文介绍如何安装并配置cloud-init。

2.3.1 操作场景

阿里云所有公共镜像默认安装cloud-init。为保证使用自定义镜像创建的ECS实例能自动初始化系统配置,建议您在以下场景中为Linux服务器安装阿里云版cloud-init。

  • 准备迁移上云的,但未安装cloud-init的Linux服务器。

    说明

    不准备迁移上云的服务器需谨慎安装。

  • 已安装cloud-init,但版本低于0.7.9的Linux服务器。

  • 已在阿里云运行的,但未安装cloud-init的ECS实例。

2.3.2 检查是否需要升级安装cloud-init

  1. 登录源服务器。

  2. 运行以下命令检查是否已安装cloud-init。

    CentOS系列

    Ubuntu系列

    rpm -qa | grep -i cloud-init 
    pip list | grep -i cloud-init
    • 若无任何输出或版本低于社区0.7.9版本:您需要步骤二:安装cloud-init

      说明

      0.7.9版本初期的社区版cloud-init,不适用于初始化ECS实例,必须升级至较高版本。

    • 若版本为18或高于18版本:无需安装cloud-init,但cloud-init在初始化实例时可以自动配置网络,如果默认配置不符合您的需求,您可按需自定义网络配置

    • 其他:无需再安装cloud-init,可直接执行后续步骤

2.3.2 安装cloud-init

  • 阿里云版cloud-init 19.1.21:推荐,依赖于Python 3.6。

  • 阿里云版cloud-init 0.7.6a:若操作系统为CentOS 6、Debian 9及SUSE Linux Enterprise Server 12等,请选择该版本,依赖于Python 2.7。

    说明

    由于Python社区停止对Python 2.7的技术支持,建议您尽量使用高版本cloud-init,避免依赖库隐患。

  • 社区版本cloud-init:社区版cloud-init由社区维护。阿里云cloud-init的最新版本为19.1.21,如果您需要使用更高版本的cloud-init,可以安装社区版本cloud-init。

社区版的cloud-init是cloud-init项目的官方版本,而阿里云版的cloud-init是针对阿里云平台进行优化的版本,可以更好地支持阿里云的平台服务,因此推荐您使用阿里云版cloud-init。

重要

为避免误操作导致数据丢失,建议您先备份源服务器数据(例如创建快照)。

(推荐)安装阿里云版cloud-init

安装阿里云版cloud-init 0.7.6a15

安装社区版cloud-init

阿里云cloud-init的最新版本为19.1.21,数据源为Aliyun。您可以在cloud-init官方网站自行下载其他版本的cloud-init。

1. 确保源服务器已安装Python PIP依赖库。

以安装Python3-pip依赖库为例,Linux部分发行版的安装命令如下。

CentOS/Red Hat Enterprise Linux:

yum -y install python3-pip

Ubuntu/Debian:

apt-get -y install python3-pip

OpenSUSE/SUSE:

zypper -n install python3-pip

2 运行以下命令下载阿里云版cloud-init

wget https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/cloud-init-19.1.21.tgz

3. 运行以下命令解压cloud-init安装包到当前目录。

tar -zxvf cloud-init-19.1.21.tgz

4. 进入cloud-init目录下,并安装依赖库

cd ./cloud-init-19.1.21
pip3 install -r ./requirements.txt

5. 进入cloud-init的tools目录

cd ./tools

6. 运行以下命令执行安装cloud-init的脚本deploy.sh

bash ./deploy.sh <issue> <major_version>

deploy.sh脚本的参数说明和取值示例如下:

参数

说明

示例

<issue>

操作系统平台类型。取值范围:centos | redhat |rhel | debian | ubuntu | opensuse | sles。参数取值均大小写敏感,其中sles表示SUSE/SLES。

centos

<major_version>

操作系统平台主要版本号。

说明

Ubuntu 14不支持安装阿里云版cloud-init 19.1.21。

CentOS 7.6的主要版本号为7

例如,您当前的操作系统为CentOS 7,则需要运行的命令为bash ./deploy.sh centos 7

7. 确认cloud-init是否安装成功。

若返回"description": "success",表示安装成功

阿里云cloud-init安装成功

2.3.4 适配当前实验移动欧拉系统的操作步骤

[root@localhost ~]# yum -y install python3-pip

[root@localhost ~]# wget https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/cloud-init-19.1.21.tgz

[root@localhost ~]# ls
anaconda-ks.cfg  cloud-init-19.1.21.tgz

[root@localhost ~]# tar -zxf cloud-init-19.1.21.tgz

[root@localhost ~]# cd ./cloud-init-19.1.21

[root@localhost cloud-init-19.1.21]# pip3 install -r ./requirements.txt


[root@localhost cloud-init-19.1.21]# cd ./tools


#由于阿里云的适配系统版本还没有欧拉系统系列,所以这里我用centos 7来代替,因为本身欧拉是基于linux开开发的新版系统,而且基础命令与centos基本相同
[root@localhost tools]# bash ./deploy.sh centos 7
{
"status_code": 0,
"description": "success"
}

2.4 安装Virtio驱动

自定义镜像的操作系统内核需支持virtio驱动,镜像才能被导入阿里云云平台,正常启动云服务器。制作或导入自定义镜像时,请确保自定义镜像已安装virtio驱动且已将virtio驱动添加到临时文件系统,否则请手动操作。

您可以按照以下步骤,检查当前操作系统内核是否支持virtio驱动,并执行相关操作。

  1. 检查服务器内核是否支持virtio驱动

  2. 根据检查结果,选择需要执行的操作。

2.4.1 检查服务器内核是否支持virtio驱动

执行以下命令:

grep -i virtio /boot/config-$(uname -r)

根据回显信息判断:

根据输出信息中的参数CONFIG_VIRTIO_BLK和CONFIG_VIRTIO_NET的取值判断:

  • 取值为y:已正确安装virtio驱动,可直接执行后续步骤

  • 没有这两个参数:未安装virtio驱动,需要手动安装。具体操作,参见安装virtio驱动

  • 取值为m:支持virtio驱动,还需运行以下命令,判断virtio驱动是否已添加到临时文件系统。

lsinitrd /boot/initramfs-$(uname -r).img | grep virtio

2.4.2 将virtio驱动添加到临时文件系统

通过检查,发现源服务器内核支持virtio驱动,但是未添加到临时文件系统中时,需要手动添加。本章节以CentOS、Debian、Ubuntu等操作系统为例。

CentOS 6/Anolis OS 7/AlmaLinux 8/Fedora 33及以上版本,且内核版本高于2.6.24(通过uname -r查询)时,安装如下操作修复临时文件。

  • 运行以下命令,打开dracut.conf文件
vim /etc/dracut.conf
  • 按i进入编辑模式,然后添加如下内容。
add_drivers+="virtio_blk virtio_scsi virtio_net virtio_pci virtio_ring virtio"
  • 执行以下命令,重新生成initrd
dracut -f

说明

RedHat和CentOS 5系统的内核版本建议升级到5.11版本,再安装virtio驱动。具体操作,请参见如何将RedHat和CentOS 5系统升级到5.11版本

临时文件修复完成后,操作结束,您可以根据需要将镜像文件导入到阿里云。

Debian/Ubuntu系列

  • 运行以下命令,打开modules文件
vim /etc/initramfs-tools/modules
  • 按i进入编辑模式,然后添加如下内容
virtio_blk
virtio_scsi
virtio_net
virtio_pci
virtio_ring
virtio
  • 执行以下命令,重新生成initrd
update-initramfs -u

临时文件修复完成后,操作结束,您可以根据需要将镜像文件导入到阿里云

SUSE/OpenSUSE系列

        版本低于SUSE 12 SP1或低于OpenSUSE 13

  • 运行以下命令,打开kernel文件
vim /etc/sysconfig/kernel
  • 按i进入编辑模式,然后添加如下内容
INITRD_MODULES="virtio_blk virtio_scsi virtio_net virtio_pci virtio_ring virtio"
  • 执行以下命令,重新生成initrd。
update-initramfs -u

临时文件修复完成后,操作结束,您可以根据需要将镜像文件导入到阿里云

2.4.3 安装virtio驱动

下载内核安装包

运行以下命令,安装编译内核的必要组件

yum install -y ncurses-devel gcc make wget

运行以下命令查询当前系统使用的内核版本

uname -r

前往Linux内核列表页面查看对应的内核版本源码的下载地址。

如下图示例中的4.19.90开头的linux-4.19.90.tar.gz的下载地址为https://mirrors.edge.kernel.org/pub/linux/kernel/v4.x/linux-4.19.90.tar.gz 

运行以下命令,切换目录

cd /usr/src/

运行以下命令,下载安装包

wget "https://mirrors.edge.kernel.org/pub/linux/kernel/v4.x/linux-4.19.90.tar.gz"

运行以下命令,解压安装包

tar -xzf linux-4.19.90.tar.gz

运行以下命令,建立软链接

ln -s linux-4.19.90 linux

运行以下命令,切换目录

cd /usr/src/linux
编译内核

依次运行以下命令,编译内核

yum -y install bison flex
make mrproper
symvers_path=$(find /usr/src/ -name "Module.symvers")
test -f $symvers_path && cp $symvers_path .
cp /boot/config-$(uname -r) ./.config
make menuconfig

如果运行make menuconfig后报错,您可以根据报错提示进行修复。例如缺少ncurses-devel、bison、flex组件时,需要依次运行以下命令,安装相关组件。

yum install  ncurses-devel
yum install  bison
yum install  flex

出现以下界面时,开始打开virtio相关配置

说明: 选*配置表示编译到内核,选m配置表示编译为模块

a. 配置Virtualization项

i.使用空格键选择Virtualization项,并按Enter键进入详细列表

ii.确认是否选择了KVM(Kernel-based Virtual Machine)项

b.配置Processor type and features项

i. 返回到主界面,通过上下键选择Processor type and features项,并按Enter键进入详细列表

ii.使用空格键选择Paravirtualized guest support项,并按Enter键进入详细列表

guest_support

iii. 确认是否选择了KVM paravirtualized clockKVM Guest support

KVM

c. 配置Device Drivers项

i. 返回到主界面,通过上下键选择Device Drivers项,并按Enter键进入详细列表

ii. 使用空格键选择Block devices项,并按Enter键进入详细列表

iii.确认是否选择了Virtio block driver

iv.回到上一级Device Drivers详细列表,通过上下键选择Network device support项,并按Enter键进入详细列表

v. 确认是否选择了Virtio network driver

d.选择load和save保存,并选择exit退出内核配置界面

e.检查virtio相关配置是否已经正确配置

f.可选:如果检查后发现暂未设置virtio相关配置,依次运行以下命令自动触发编辑.config文件

make oldconfig
make prepare
make scripts
make
make install

g.运行以下命令,查看virtio驱动的安装情况

find /lib/modules/"$(uname -r)"/ -name "virtio*" | grep -E "virtio*"
grep -E "virtio*" < /lib/modules/"$(uname -r)"/modules.builtin

如下图所示,如果任一命令输出virtio_blk、virtio_pci、virtio_console等文件列表,表明您已经正确安装了virtio驱动。

确认结果

2.5 检查镜像是否符合规范

使用镜像规范检查工具,检测镜像中的操作系统是否符合的导入条件,例如是否能创建出功能齐全的ECS实例。

1. 登录您制作镜像文件的源服务器、虚拟机或者其他云平台的云主机

2. 依次运行以下命令,下载并解压检测工具

wget https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/imagecheck/ecsgo-helper.tar.gz
tar -xf ecsgo-helper.tar.gz

3. 执行以下命令,运行检测工具

./ecsgo-helper.sh  image-online-diagnostic

等待检测工具检测系统配置,检测结果类似如下信息。各检测结果说明,请参见检测项说明

------------------------------------------------------------

            OS: CentOS 7.9.2009   Kernel: 3.10.0-1160.76.1.el7.x86_64
            Arch: x86_64       RTC-Mode: utc       Boot-Mode: Legacy

------------------------------------------------------------
Image Check Result
Virtio                                                                                 [OK]
Nvme                                                                                   [OK]
Fstab                                                                                  [OK]
Grub                                                                                   [OK]
Dhcp                                                                                   [OK]
Selinux                                                                                [OK]
OnlineResizeFS                                                                         [OK]
CloudAssistant                                                                         [OK]
CloudInit                                                                              [OK]
SecurityCenterAgent                                                                    [OK]
SupportMocInstanceTypes                                                                [OK]
DiskUsage                                                                              [OK]
InodeUsage                                                                             [OK]
SystemFileAttribute                                                                    [OK]
CriticalUser                                                                           [OK]
QemuGuestAgent                                                                         [OK]
SshConfig                                                                              [OK]
Firewall                                                                               [OK]
LibDirectory                                                                           [OK]

         Total case Count                19
            Successes:                   19
            Failures:                    0
            Warnings:                    0

------------------------------------------------------------
检测项说明

检测工具会根据检测项的等级给出OKFAILED或者WARNING检测结果。

  • OK:检测项均符合要求。

  • FAILED:检测项不符合要求,使用该自定义镜像创建的ECS实例会出现无法正常启动、网络异常等严重问题,建议您立即修复报错项后再导入镜像。

  • WARNING:检测项不符合要求,使用该自定义镜像创建的ECS实例缺少云安全中心保护、无法使用云助手自动化运维等问题,建议您修复报错项后再导入镜像,以提高您云上运维的效率。

检测工具主要检查源服务器中以下配置项:

检测项

等级

检测项说明

不合规后果

合规建议

Virtio

检测镜像中是否安装virtio驱动。

阿里云ECS通常为基于KVM的虚拟机,因此依赖镜像中安装虚拟磁盘的virtio驱动。

ECS启动异常

安装virtio驱动

Nvme

检测镜像中是否安装NVMe驱动。

ECS部分规格使用NVMe协议云盘,例如ecs.g7se,要求镜像包含NVMe协议的相关驱动。NVMe相比SCSI、virtio-blk等传统驱动协议速度更快、传输带宽更高,因此建议您在镜像中安装NVMe驱动,以支持相关实例规格。更多信息,请参见NVMe协议介绍

无法使用NVMe协议云盘的实例规格,例如ecs.g7se

Linux自定义镜像如何适配NVMe系统盘?

Fstab

检测/etc/fstab配置是否正常。

错误的配置会导致系统启动异常,例如配置的挂载设备信息不存在、设备UUID错误等。

系统启动异常

如何配置正确的/etc/fstab,请参见如何在fstab文件中配置文件磁盘标识方式为UUID

Grub

检测grub配置文件是否正常。

grub引导内核的加载和启动,是系统的重要配置。错误的配置将导致系统启动异常,建议您检查系统中的配置文件是否正确,例如grub文件中不要使用设备名来指定启动分区,如root=/dev/sda1,在不同的环境中设备名称可能发生变化,建议您使用UUID来指定启动分区。

系统启动异常

如何为镜像生成正确的配置grub文件,请参见如何修改Linux镜像Grub文件中的文件磁盘标识符为UUID

Dhcp

检测网络配置是否为DHCP。

建议您为网络设备配置DHCP的方式,static静态方式会导致失利网络配置失败,连接异常。我们还建议您在grub内核启动参数中增加配置选项net.ifnames=0来禁用内核网络接口重命名行为,使网卡名称为eth0。

系统网络异常

如何设置镜像网络配置模式为DHCP,请参见如何在Linux镜像中配置网络为DHCP

Selinux

检测是否禁用SELinux,阿里云建议您关闭SELinux。

无法正常启动ECS实例

如何关闭SELinux,请参见开启或关闭SELinux

OnlineResizeFS

检测镜像是否支持在线扩容文件系统。

例如您的镜像虚拟磁盘空间大小为10 GB,您购买ECS实例的系统盘为100 GB,如果您安装了cloud-init、growpart等组件,相关组件在实例初始化时会将根分区及文件系统扩容,扩容至您系统盘的大小100 GB。更多信息,请参见扩容分区和文件系统(Linux) 。

实例根分区无法扩容

CloudInit

检测是否安装cloud-init服务。

cloud-init能在ECS实例启动阶段完成系统初始化配置,包括NTP、软件源、主机名和SSH密钥对等,同时执行实例自定义数据(User data)脚本。

系统初始化配置缺失

安装cloud-init

DiskUsage

检测磁盘空间使用率是否正常。

您可以执行df -h命令来检查您磁盘空间的使用率,确保有充足空间。

系统启动异常

删除不必要文件

InodeUsage

检测磁盘inode使用率是否正常。

您可以执行df -i命令来检查磁盘inode的使用率。

系统启动异常

删除不必要文件

SystemFileAttribute

检测系统中关键配置文件的文件属性是否正常。

实例启动异常、功能异常

不要使用chattr命令锁定/etc/shadow等文件

CriticalUser

检测系统中关键用户(例如root)是否存在。

关键用户的缺失会导致系统启动异常,实例功能使用异常,例如无法使用用户名和密码远程连接ECS实例。

实例启动异常、功能异常

保留root账号

QemuGuestAgent

检测系统中是否安装qemu-guest-agent。

该软件是运行在虚拟机上,和宿主机交互通信,会导致ECS所需要的部分服务不可用,实例功能不全。

实例功能异常

卸载qemu-guestos-agent

SshConfig

检测sshd服务的配置文件(通常是/etc/ssh/sshd_config)是否正常。

sshd配置文件异常会导致sshd服务启动失败,进而导致SSH连接ECS失败,检查sshd配置文件的正确性和有效性很有必要。通常您可以执行以下命令:

  • 执行sshd -T命令展示您所有的sshd配置选项。

  • 执行sshd -t 命令验证sshd配置文件的合法性。

实例SSH连接失败

检查sshd配置文件

Firewall

检测防火墙服务是否开启。

阿里云建议您关闭系统中的防火墙服务,使用ECS安全组统一管理您云上实例的出入流量。更多信息,请参见安全组概述

系统防火墙应用可能导致您访问实例失败等

关闭系统防火墙服务

LibDirectory

在RedHat系列Linux系统中,/lib和/lib64通常为一个链接文件,指向/usr/lib及/usr/lib64中,请不要随意修改该链接文件,否则可能导致系统异常。

系统功能异常

链接文件/lib和/lib64的指向位置不能为绝对路径,修改指向位置为相对路径

SupportMocInstanceTypes

检测镜像是否支持阿里云ECS神龙规格。

阿里云最新的ECS实例通常为神龙规格,例如ecs.g6、ecs.g7等,镜像的系统和内核版本如果过低,在相关规格上启动会有异常。具体的实例规格信息,请参见实例规格族

不能使用ecs.g6、ecs.g7等神龙规格族

不支持神龙规格的系统通常是已经EOL不再维护的低版本系统,阿里云建议您尽早更新升级,使用各发行厂商正在维护更新的操作系统版本

CloudAssistant

检测镜像是否安装云助手。

云助手是专为云服务器ECS打造的原生自动化运维工具,阿里云建议您为镜像安装云助手服务,实现云上ECS高效运维。更多信息,请参见云助手概述

云上运维不便

安装云助手Agent

SecurityCenterAgent

检测是否安装云安全中心Agent。

安装云安全中心的Agent插件后,您的服务器才能受到云安全中心的保护。

无法识别实例中的漏洞问题,缺少云安全中心的保护

我当前系统由于不在阿里云的适配范围导致有些检测失败,但是不影响使用

[root@localhost ~]# ./ecsgo-helper.sh  image-online-diagnostic
------------------------------------------------------------

            OS: BigCloud Enterprise Linux 21.10   Kernel: 4.19.90-2107.6.0.0192.8.oe1.bclinux.x86_64
            Arch: x86_64       RTC-Mode: utc       Boot-Mode: Legacy

------------------------------------------------------------
Image Check Result
Virtio                                                                                 [OK]
Nvme                                                                                 [FAIL]
>> Kernel module nvme.ko is neither compiled into kernel image
>> /boot/vmlinuz-4.19.90-2107.6.0.0192.8.oe1.bclinux.x86_64 of
>> 4.19.90-2107.6.0.0192.8.oe1.bclinux.x86_64 nor packed into initramfs
>> /boot/initramfs-4.19.90-2107.6.0.0192.8.oe1.bclinux.x86_64.img (missing);
Fstab                                                                                  [OK]
Grub                                                                                   [OK]
Dhcp                                                                                   [OK]
Selinux                                                                                [OK]
OnlineResizeFS                                                                         [OK]
CloudAssistant                                                                         [OK]
CloudInit                                                                              [OK]
SecurityCenterAgent                                                                  [WARN]
>> Aegis is not installed;
SupportMocInstanceTypes                                                                [OK]
DiskUsage                                                                              [OK]
InodeUsage                                                                             [OK]
SystemFileAttribute                                                                    [OK]
CriticalUser                                                                           [OK]
QemuGuestAgent                                                                         [OK]
SshConfig                                                                            [FAIL]
>> Sshd service is not installed to provide remote secure shell;
Firewall                                                                               [OK]

         Total case Count                18
            Successes:                   15
            Failures:                    2
            Warnings:                    1

------------------------------------------------------------

2.6 获取Linux镜像文件

操作步骤

  1. 打开Oracle VM VirtualBox管理器,选择虚拟机,例如centos VM。
  2. 单击设置。

    设置

  3. 依次选择存储 > BCLinux-Euler21.10-x86_64_1.vhd。
  4. 在右侧明细列表中,查看磁盘文件的存储位置,例如C:\Users\maomao\VirtualBox VMs\BCLinux-Euler21.10-x86_64\BCLinux-Euler21.10-x86_64_1.vhd。
  5. 打开此路径,获取生成的Linux镜像文件。

3 创建虚拟机方法

3.1 镜像上传

操作步骤

1. 把以上获取到的镜像文件上传到云上OSS的bucket中,并且生成下载链接

2. 登录阿里云控制台,选择ECS-->镜像-->导入镜像

3.创建镜像导入任务,如果oss都已经准备完成,点击下一步

在弹出窗口中依次配置:

        i.镜像文件URL: oss下载镜像文件的url

        ii. 镜像名称:根据自定义需求起一个镜像的名称

        iii.操作系统:根据系统来选择

        iv.操作系统版本:根据系统选择

        v.系统架构:根据系统选择

        vi.镜像检测~许可证类型:采用默认

        vii.云盘配置:调整系统盘为512GB存储

        viii.镜像描述:自定义镜像的使用场景

等待镜像上传完成即可开始虚拟机创建

上传完成后:

3.2 创建虚拟机

1.选择北京区域-->按量付费-->专有网络&交换机

2. 选择规格-->并选择上传好的镜像

3. 选择存储

4. 选择开启公网IPV4-->选择安全组-->选择开启IPV6

5. 选择使用镜像密码

说明:由于此版本镜像对于阿里云兼容性不太完善,所以此处使用默认镜像密码,如果系统与阿里云兼容性较好,则可以自定义创建密码

6. 修改主机名,并创建虚拟机

此系统在首次创建成功后,由于与阿里云不兼容导致网络自启动异常,需要登录VNC后自行配置网络

总结: 到此就从虚拟机创建,安装操作系统,制作镜像,上传镜像到云上,云上创建虚拟机完整步骤,请各位同行大佬有问题在评论区留言交流沟通!谢谢大家

参考链接:

制作Linux镜像文件_云服务器 ECS-阿里云帮助中心

  • 6
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值