努力
加油

如何在云服务器中手动安装Ubuntu系统(非镜像方式)?

首先得纠正一个核心概念:在主流公有云(阿里云、腾讯云、华为云、AWS 等)上,你无法像操作本地物理机那样,“手动”从 ISO 镜像文件开始安装 Ubuntu 系统。

为什么?因为云计算的底层架构是虚拟化技术(KVM, Xen, Hyper-V 等)。你的“服务器”本质上是一个运行在宿主机上的虚拟机实例。云厂商通过 API 和 Hypervisor 管理这些实例的生命周期。当你点击“创建实例”时,云厂商已经帮你完成了最耗时的硬件抽象层适配和网络初始化工作,并直接挂载了一个预配置好的根文件系统(Rootfs)。

如果你坚持要“非镜像方式”重装或安装,通常只有以下几种合法且可行的路径,但它们的本质都不是传统意义上的“从光盘引导安装”:

路径一:使用“自定义镜像”或“自定义镜像导入”(最接近手动安装)

这是唯一能实现“自己准备系统环境”的方式,但不是从零开始编译内核和驱动,而是基于一个已存在的系统进行封装。

  1. 本地/私有环境准备:

    • 在一台本地虚拟机(如 VMware/VirtualBox)或裸金属服务器上,手动安装好 Ubuntu(可以是任意版本,甚至定制过内核模块、预装软件)。
    • 确保系统支持 UEFI 或 Legacy BIOS(取决于你要导入的云格式)。
    • 卸载所有云厂商特定的XX程序(如 cloud-init,除非你希望在新实例中重新触发它)、SSH 密钥对、MAC 地址绑定信息等。
    • 清理日志、临时文件。
  2. 导出为镜像:

    • 将虚拟磁盘文件(如 .qcow2, .vmdk, .raw)转换为云厂商支持的格式(通常是 qcow2 或 raw)。
    • 使用云厂商提供的工具(如阿里云的 aliyun-ossutil + 镜像导入服务,腾讯云的 QEMU 转换工具)将镜像上传到对象存储(OSS/COS),然后通过控制台或 CLI 发起“镜像导入”任务。
  3. 从自定义镜像创建实例:

    • 导入成功后,你会得到一个“自定义镜像”。
    • 使用该镜像创建新实例。此时,你得到的就是你“手动”构建的系统环境。

⚠️ 注意:这种方式依然依赖云厂商的虚拟化环境,只是替换了操作系统内容。它不能解决“没有初始引导加载器”的问题,因为镜像本身必须包含完整的 /boot 分区和引导记录。

路径二:使用 cloud-init + 用户数据(User Data)进行自动化部署

这不是“安装系统”,而是“初始化系统”。适用于你已经有一个基础 Ubuntu 镜像实例,想快速变成另一个特定配置的系统。

  1. 创建实例时:

    • 选择一个标准的 Ubuntu 官方镜像。
    • 在“高级选项”或“用户数据”字段中,写入 YAML 格式的脚本。
  2. 示例 User Data 脚本:

    #cloud-config
    hostname: my-custom-server
    users:
      - name: admin
        sudo: ALL=(ALL) NOPASSWD:ALL
        ssh_authorized_keys:
          - ssh-rsa AAAAB3... your-public-key
    packages:
      - nginx
      - docker.io
    runcmd:
      - systemctl enable nginx
      - apt-get update && apt-get upgrade -y
      - echo "Custom setup complete" > /var/log/setup.log
  3. 效果:

    • 实例启动后,cloud-init 会自动执行这些命令,修改主机名、添加用户、安装软件包。
    • 这比手动 SSH 进去敲命令更可靠,尤其适合大规模部署。

路径三:通过网络引导(PXE/iPXE)—— 仅限部分云平台或自建私有云

公有云不支持! 阿里云、腾讯云等不允许普通用户开启 PXE 网络引导,这是出于安全和隔离考虑。

但在以下场景可能可行:

  • 自建私有云(OpenStack/Kubernetes):你可以搭建自己的 PXE 服务器,让新创建的 VM 通过网络加载内核和 initrd,然后从 HTTP/NFS 服务器下载 rootfs 并完成安装。
  • 某些支持“裸金属服务器”(Bare Metal)的云平台:部分云厂商提供物理机租赁服务,这类机器允许你通过 BMC/IPMI 接口远程挂载 ISO 并进行传统安装。但这不属于“云服务器(ECS/CVM)”范畴,而是物理机租赁。

❌ 常见误区澄清

误区 真相
“我可以用 USB 启动盘插入云服务器” 云服务器没有物理 USB 接口,也无法外接设备。
“我可以把 ISO 文件传到服务器里,然后用 GRUB 引导” 不行。虚拟机启动时由 Hypervisor 控制引导流程,Guest OS 内部无法改变这一过程。ISO 只能作为“第二块硬盘”挂载,不能作为引导源。
“我可以 SSH 进去后删除整个系统重装” 可以删除文件,但不能“重装”。你无法在不重启的情况下重建内核、引导加载器和根文件系统结构。最终仍需通过上述“自定义镜像”或“重置系统”功能完成。

✅ 推荐做法总结

  1. 如果你只是想换系统版本:
    → 直接使用云控制台中的 “更换操作系统” 功能。选择 Ubuntu 20.04/22.04/24.04 等官方镜像,一键完成。这是最安全、最高效的方式。

  2. 如果你有特殊定制需求(预装软件、特定内核模块):
    → 采用 路径一:自定义镜像导入。
    步骤:本地装好 → 清理冗余 → 转换格式 → 导入云镜像服务 → 从镜像创建实例。

  3. 如果你需要批量部署相同环境:
    → 采用 路径二:cloud-init 用户数据。
    基础镜像 + 自动化脚本 = 标准化交付。


附加建议:如何验证系统是否“干净”?

无论哪种方式,安装完成后建议执行以下检查:

# 1. 检查内核版本
uname -r

# 2. 检查 cloud-init 状态(应正常运行)
cloud-init status --wait

# 3. 检查网络配置(确保 DHCP 正确获取 IP)
ip addr show

# 4. 检查是否有残留的旧 SSH 密钥
cat ~/.ssh/authorized_keys

# 5. 清理历史命令(可选)
history -c && rm ~/.bash_history

记住:在云上,“手动安装”不是一个正确的思维模型。正确的思维是 “镜像化 + 自动化初始化”。云厂商的设计哲学就是消除重复性手工操作,提升资源利用率。遵循这个范式,才能高效、稳定地使用云服务。