ECS 实例与操作系统镜像 FAQ
Linux 操作系统内核回写时出现 softlockup 异常如何解决?
部分低版本的 Linux 操作系统内核在回写(writeback)文件缓存时,会出现 softlockup 异常。具体的解决方案。
问题现象
在内核版本低于 4.15 的 Linux 实例中,内核回写文件缓存时会出现 softlockup 异常,并产生与如下所述类似的调用栈信息:
说明:Linux 内核版本可以通过 uname -r 命令查看,例如查看结果为
3.10.0-514.26.2.el7.x86_64,则其中的 3.10.0 为内核版本。
本文所述的 4.15 版本指4.15.0 版本。
[3507707.671883] |
[<ffffffff8127cf7a>] redirty_tail+0x3a/0x40 |
[3507707.671884] |
[<ffffffff81280ea4>] __writeback_inodes_wb+0x64/0xc0 |
[3507707.671885] |
[<ffffffff81281238>] wb_writeback+0x268/0x300 |
[3507707.671887] |
[<ffffffff812819f4>] wb_workfn+0xb4/0x380 |
[3507707.671889] |
[<ffffffff810a5dc9>] process_one_work+0x189/0x420 |
[3507707.671890] |
[<ffffffff810a625b>] worker_thread+0x1fb/0x4b0 |
[3507707.671891] |
[<ffffffff810a6060>] ? process_one_work+0x420/0x420 |
[3507707.671893] |
[<ffffffff810ac696>] kthread+0xe6/0x100 |
[3507707.671894] |
[<ffffffff810ac5b0>] ? kthread_park+0x60/0x60 |
[3507707.671897] |
[<ffffffff81741dd9>] ret_from_fork+0x39/0x50 |
问题原因
当实例中的内存紧缺时,系统内核会频繁调用 wakeup_flusher_threads 函数,调用该函数时会创建大量的回写任务(wb_writeback_work),从而导致回写线程一直在处理回写任务,最终引发系统 softlockup 异常。
解决方案
您需要把内核版本更新为高于 4.15 的版本以解决该问题。Alibaba Cloud Linux 操作系统的内核版本均为 4.19,不会出现该问题。以下解决方案主要适用于非 Alibaba Cloud Linux 操作系统的其他Linux 发行版。
注意:在操作前,建议您为 ECS 实例创建快照备份数据,避免因误操作造成的数据丢失。
- 远程连接 Linux 实例。
- 运行以下命令查看内核版本信息。
uname -r
- 如果内核版本不高于 4.15,则需要运行以下命令更新内核版本。
如果内核版本高于 4.15,则表示系统不会出现 softlockup 异常。您无需再进行后续操作。
yum update kernel
- 更新内核版本后,需要重启 Linux 实例。
reboot
- 待 Linux 实例重启后,再次运行以下命令,确认内核版本已高于 4.15。
uname -r
部分低版本的 Linux 内核如果无法通过 yum update kernel 命令更新内核版本,则需要您自行下载高于 4.15 版本的内核 RPM 包手动升级。
为什么我无法使用 ssh-rsa 签名算法的 SSH 密钥对远程连接 Fedora 3364 位系统的实例?
当您使用 Fedora 33 64 位操作系统的 ECS 实例时,如果登录凭证设置的是 ssh-rsa 签名算法的 SS
H 密钥对,可能无法顺利使用 SSH远程连接实例。您可以通过以下任一方式解决该问题:
- 将 ssh-rsa 签名算法的 SSH 密钥对替换为 ECDSA 签名算法等其他签名算法的 SSH 密钥对。
- 在系统中运行 update-crypto-policies --set LEGACY 命令,将加密策略 POLICY 切换为 LEGACY,即可继续使用 ssh-rsa 签名算法的 SSH 密钥对。
为什么有的 ECS 实例无法选择 Windows 操作系统?
使用 Windows 操作系统创建ECS 实例时,需要确保实例内存大于等于 1GiB。内存低于1GiB 的ECS 实例(例如, 512MiB)只能选择 Linux 镜像和 Windows Server 1709 镜像。
阿里云是否支持 Windows Server 2008 和 Windows Server 2008 R2 操作系统?
微软已经于 2020 年 1 月 14 日停止对 Windows Server 2008 和 Windows Server 2008 R2 操作系统提供支持。因此阿里云不再对使用上述操作系统的 ECS 实例提供技术支持。如果您有使用上述操作系统的 ECS 实例,请尽快更新至 Windows Server 2012 或以上版本。
实例的操作系统为 Windows Server,现在提示 Windows 副本不是正版怎么办?
激活 Windows 操作步骤:
- 单击开始>运行,输入 cmd,然后按回车键后进入命令行窗口。
- 执行以下命令,更换 KMS 域名。
slmgr -skms kms.cloud.aliyuncs.com
说明:
- 如果执行失败,则先检查您使用的 DNS 服务器是否为阿里的 DNS 服务器,若使用了非阿里 DNS 之后,会导致 kms.cloud.aliyuncs.com 解析不到,建议从 VPC 创建出来的 ECS 实例需要将缺省 DNS 服务器设置为100.100.2.136 或 100.100.2.138。
- 如果您的 ECS 实例是经典网络,您需要执行 slmgr -skms kms.aliyun-inc.com 命令进行更改。
系统显示类似如下,表示设置成功,然后单击确定。
- 执行以下命令,激活 KMS 服务。
slmgr -ato
系统显示类似如下,表示激活成功。
如果在激活中遇到问题,请参见 Windows系统ECS实例激活失败。
ECS 实例使用操作系统需要付费吗?
使用公共镜像 Windows Server 和 Red Hat 需付费,计费与实例规格大小有关,其余公共镜像均免费。
我能自己安装或者升级操作系统吗?
您可以通过以下方式安装或者升级操作系统:
- 更换系统盘重新选择操作系统。
- 从本地导入自己的镜像后使用自定义镜像创建 ECS 实例。
- 为操作系统打补丁。
操作系统是否有图形界面?
除 Windows Server 半年渠道实例以外,Windows 操作系统是桌面管理形式。
Linux 操作系统是命令行形式,您可以根据需要安装图形化桌面。
公共镜像自带 FTP 上传吗?
不自带,需要您自己安装配置。
阿里云支持哪些 SUSE 版本?
目前,公共镜像支持的 SUSE 版本。
- SUSE Linux Enterprise Server 15 SP2 64 位
- SUSE Linux Enterprise Server 15 SP1 64 位
- SUSE Linux Enterprise Server 12 SP5 64 位
- SUSE Linux Enterprise Server 12 SP4 64 位
- SUSE Linux Enterprise Server 12 SP2 64 位
- SUSE Linux Enterprise Server 11 SP4 64 位
SUSE 操作系统提供哪些服务支持?
阿里云线上售卖的 SLES(SUSE Linux Enterprise Server)操作系统会与 SUSE 更新源保持定时同步。使用 SLES 公共镜像创建的实例,其操作系统的支持服务涵盖在阿里云的企业级别支持服务中。如果您购买了企业级支持服务,可以提交工单获取帮助,阿里云工程师团队会协助您解决 SLES 操作系统上发生的问题。
ECS 实例到期释放后,如果这个实例之前手动制作了镜像快照,能不能找回之前实例的数据?
可以。您可通过以下任一方式找回实例数据:
- 使用之前制作的镜像创建新实例。
- 使用之前制作的镜像为当前实例更换系统盘。
注意:更换系统盘操作须注意以下两点:
- 当前实例系统盘的内容会全部丢失,恢复为镜像的状态。
- 镜像必须和您当前实例位于同一地域。
我先有一台 ECS 实例,想再买一台 ECS 实例并使用现有这台 ECS 实例的镜像部署,应该如何操作?
您可以为之前的 ECS 实例创建自定义镜像,然后使用该自定义镜像创建 ECS 实例即可。
我已经购买了新的 ECS 实例,如何把我的共享镜像恢复到这台新购 ECS 服务器上?
请确保您已将镜像共享给新购服务器的账号,并根据实际情况选择下列方法之一进行操作。
- 如果共享镜像和新购服务器在同一个地域,可以更换系统盘,更换时选择您共享的镜像即可。
- 如果共享镜像和新购服务器不在同一个地域,需要先复制镜像到目标地域,再通过更换系统盘来更换镜像。
注意:更换系统盘存在如下风险:
- 原系统盘会被释放,建议您提前创建快照备份数据。
- 更换系统盘需要停止实例,因此会中断您的业务。
- 更换系统盘完成后,您需要在新的系统盘中重新部署业务运行环境,有可能会对您的业务造成长时间的中断。
- 更换系统盘是重新为您的实例分配一个系统盘,磁盘 ID 会改变,所以基于旧的系统盘创建的快照将不能用于回滚新的系统盘。
我在阿里云有多个账号,想把账号 A 的一台 ECS 实例转移到账号 B,或者用账号A 购买一台 ECS 实例,把实例运行环境、应用迁移到账号 B。怎么操作?
您可以通过下列步骤操作:
- 使用账号 A 的实例创建自定义镜像。
- 共享镜像给账号 B。
- 账号 B 使用共享镜像创建实例。
ECS 实例之间如何迁移?
ECS 实例间迁移步骤如下:
- 为源 ECS 实例创建自定义镜像。
- 根据源 ECS 实例与目标 ECS 实例的归属地域和归属账号,迁移分为以下几种情况。
- 源实例与目标实例属于同地域同账号,可直接进入下一步。
- 源实例与目标实例属于不同地域,需复制镜像至目标实例所在地域。
- 源实例与目标实例属于不同账号,需共享镜像给目标实例的账号。
- 源实例与目标实例属于不同地域和不同账号,需先复制镜像到目标地域,再分享给目标实例的账号。
- 使用镜像创建新的 ECS 实例,或为现有目标 ECS 实例更换镜像。
说明:为现有目标 ECS 实例更换镜像时,源镜像中不能包含数据盘快照。
如何处理 CentOS DNS 解析超时?
处理 CentOS DNS 解析超时的详情如下:
- 原因分析
因CentOS 6 和 CentOS 7 的 DNS 解析机制变动,导致 2017 年 2 月 22 日以前创建的 ECS 实例或使用 2017 年 2 月 22 日以前的自定义镜像创建的 CentOS 6 和 CentOS 7 实例可能出现 DNS解析超时的情况。
- 解决方法
请按下列步骤操作修复此问题:
- 下载脚本fix_dns.sh。
- 将下载的脚本放至 CentOS 系统的/tmp目录下。
- 运行 bash /tmp/fix_dns.sh 命令,执行脚本。
- 脚本作用
判断DNS 解析文件/etc/resolv.conf 中是否存在 options>single-request-reopen 配置。详情请参见 resolv.conf文件说明。
CentOS 6 和 CentOS 7 的 DNS 解析机制,使用相同的网络五元组发送 IPV4 DNS 请求和 IPV6DNS请求,此时应开启 single-request-reopen配置。开启该配置后,一旦需要处理同一 socket 发送的两次请求时,解析端会在发送第一次请求后关闭 socket,并在发送第二次请求前打开新的socket。配置成功后,无需重启实例即可生效。
- 脚本逻辑
- 判断实例系统是否为 CentOS。
- 如果实例为非 CentOS 系统(如Ubuntu 和 Debian):脚本停止工作。
- 如果实例为 CentOS 系统:脚本继续工作。
- 查询解析文件/etc/resolv.conf 中 options 的配置情况。
- 如果不存在 options 配置:
options timeout:2 attempts:3 rotate single-request-reopen。 |
默认使用阿里云 options配置
如果存在 options 配置:
不存在 single-request-reopen配置,则在 options 配置中追加该项。
存在 single-request-reopen 配置,则脚本停止工作,不更改 DNS nameserver 的配置。
为什么 ECS 默认没有启用虚拟内存或 Swap 说明?
Swap 分区或虚拟内存文件,是在系统物理内存不够用的时候,由系统内存管理程序将那些很长时间没有操作的内存数据,临时保存到 Swap 分区或虚拟内存文件中,以提高可用内存额度的一种机制。
但是,如果在内存使用率已经非常高,而同时 I/O 性能也不是很好的情况下,该机制其实会起到相反的效果。阿里云 ECS 云盘使用了分布式文件系统作为云服务器的存储,对每一份数据都进行了强一致的多份拷贝。该机制在保证用户数据安全的同时,由于 3 倍增涨的 I/O 操作,会降低本地磁盘的存储性能和 I/O 性能。
综上,为了避免当系统资源不足时进一步降低 ECS 云磁盘的 I/O 性能,所以 Windows 系统实例默认没有启用虚拟内存,Linux 系统实例默认未配置 Swap 分区。
RHEL(Red Hat Enterprise Linux)镜像中如何获取 dump 文件?
当前部分 RHEL 镜像默认未开启 kdump,您可以提交工单获取 dump 文件。请注意,通过提交工单获取 dump 文件时,内存大于 16 GiB 的实例规格可能出现无法获取 dump 文件的情况,详情请以工单内信息为准。
如何在 RedHat 8.1 系统的 ECS 实例中开启 kdump?
RedHat 8.1 v1 版本镜像中 kdump 服务默认未开启。如果您需要使用 kdump,请运行以下命令开启 kdump 服务。
systemctl enable kdump systemctl start kdump
如何解决 RedHat 8.1/8.2 镜像在弹性裸金属服务器实例规格族的 ECS 实例下启动慢的问题?
console=ttyS0 console=ttyS0,115200n8 |
修改为 |
console=tty0 console=ttyS0,11520 |
在弹性裸金属服务器实例规格族的 ECS 实例中,RedHat 8.1/8.2 镜像相较于 RedHat 7 镜像启动时长多 1~2 分钟。为解决该问题,您可以在 RedHat 8.1/8.2 系统的/boot/grub2/grubenv 文件中,将内核启动参数
0n8
,然后重启服务器使配置生效。
如何设置 Linux 系统的 ECS 实例的静态 IP 地址?
您需要远程连接 ECS 实例进行设置。查看并记录 Linux 实例的 IP 地址和网关信息
- 登录 Linux 系统的 ECS 实例,执行以下命令,查看实例的 IP 地址和子网掩码。
ifconfig
- 执行以下命令,查看实例的网关信息。
route -n
- 或者您也可以参考以下方式,通过阿里云的 MetaServer 获取相关信息。依次执行以下命令,获取实例的子网掩码、网关信息、IP地址。
curl http://100.100.100.200/latest/meta-data/network/interfaces/macs/[$MAC_ID]/netmask curl http://100.100.100.200/latest/meta-data/network/interfaces/macs/[$MAC_ID]/gateway curl http://100.100.100.200/latest/meta-data/network/interfaces/macs/[$MAC_ID]/private-ip v4s
修改 ECS 实例的网络类型
- 编辑以下文件,将 BOOTPROTO 的值修改为 static,并将以上步骤中记录的 IP 地址、网关信息、子网掩码填写到该配置文件中,保存并退出。
/etc/sysconfig/network-scripts/ifcfg-eth0
- 执行以下命令,重启网络服务。
systemctl restart network
CentOS/RedHat 7.x 升级 Systemd 重启进入救援模式如何处理?
CentOS 7 或 RedHat 7 系列的系统在升级 Systemd 至systemd-219-71.el7 版本后,重启实例会进入救援模式,这样会导致系统网络服务和一般的应用软件服务异常。
问题原因
在 CentOS 7 或RedHat 7 系列的系统中,Systemd 程序包被升级至systemd-219-71.el7 版本时会触发旧版程序包中存在的缺陷,导致 ECS 实例重启后进入救援模式。满足以下条件的 ECS 实例会存在此问题:
- ECS 实例系统版本是 CentOS 7 或 RedHat 7 系列。
- 升级 Systemd 至 systemd-219-71.el7 版本,并重启。可能触发 Systemd 升级的场景如下:
- 自主升级 Systemd。例如通过 yum update 命令升级所有软件包或 Systemd 软件包。
- 使用云安全中心修复漏洞。云安全中心修复漏洞时可能会升级 Systemd 软件包。
- ECS 实例为单 CPU 规格。单CPU 的 ECS 实例规格如下:
- ecs.s6-c1m1.small
- ecs.s6-c1m2.small
- ecs.s6-c1m4.small
- ecs.xn4.small
- ecs.n1.small
- ecs.n4.small
- ecs.e4.small
- ecs.e3.small
- ecs.mn4.small
- ecs.n1.tiny
- ecs.n2.small
- ecs.t5-lc2m1.nano
- ecs.t5-lc1m1.small
- ecs.t5-lc1m2.small
解决方案
如果您的 ECS 实例是 CentOS 7 或 Red Hat 7 系列的系统,同时 ECS 实例规格是单 CPU,请您从以下两种场景中选择符合实际情况的一种进行处理:
- 已经升级 Systemd 程序并且 ECS 实例处于救援模式
如果 ECS 实例已经进入救援模式,请参考以下步骤进行操作:
- 对 ECS 实例的系统盘进行快照备份。
- 通过阿里云 VNC 工具以 root 用户身份登录 ECS 实例。
- 执行以下命令,重新生成 grub 配置。
dracut --force --regenerate-all
- 重启 ECS 实例。
- ECS 实例处于正常状态并且准备升级 Systemd 程序
在做任何可能会触发 Systemd 升级的操作或安装更新应用软件之前,请做好系统快照备份。
在部署业务时如何让程序区分不同的 ECS 实例?
当您在 Linux 系统上部署业务时希望程序能够区分不同的 ECS 实例,可能会通过 systemd-machine-id-setup 命令重置/etc/machine-id的方式来实现,但该方式需要您在每台 ECS 实例上重新生成 m achine ID。为免去繁琐的操作,阿里云推荐您通过/sys/class/dmi/id/product_uuid文件来区分不同的 ECS 实例,该文件作为实例对外的唯一标识之一,可完全取代/etc/machine-id 的作用,并且操作简便,只需要获取实例对应的 UUID 即可。您可以运行以下命令查看 ECS 实例的/sys/class/dm i/id/product_uuid 信息:
cat /sys/class/dmi/id/product_uuid
返回结果示例: