介绍
Ubuntu 有两种类型的版本,标准和长期支持(或“LTS”)。 标准更新每六个月发布一次,并从 Ubuntu 接收安全更新至少九个月,而 LTS 更新每两年发布一次,并且支持至少五年。
如果您当前使用的是 Ubuntu 12.04,那么您将至少在 2017 年 10 月之前获得安全更新。 如果您想延长支持时间并获得新功能和更新,您可以将您的服务器升级到最新的 LTS 版本。 在本指南中,我们将介绍如何安全地将 Ubuntu 12.04 服务器升级到 14.04,注意保留我们现有的配置。
警告: 与操作系统的主要版本之间的几乎所有升级一样,此过程存在失败、数据丢失或软件配置损坏的固有风险。 强烈建议进行全面备份和广泛测试。
为了避免这些问题,我们建议尽可能迁移到新的 Ubuntu 14.04 服务器,而不是就地升级。 升级时您可能仍需要查看软件配置的差异,但核心系统可能会具有更高的稳定性。 您可以关注我们的如何迁移到新的Linux服务器系列,学习如何在服务器之间迁移。
第一步——备份现有数据
由于您可能使用 12.04 服务器来处理敏感任务或数据,因此备份服务器配置和文件的当前状态非常重要。 虽然我们将介绍的过程是执行版本升级的推荐方法,但无法保证版本升级不会导致软件或配置问题。 事先备份您的数据将使您在升级后出现问题时更容易恢复。
在此步骤中,我们将介绍多种备份方法。 如果您使用的是 DigitalOcean,建议您除了将文件同步到本地计算机外,还可以通过控制面板制作快照。 这样,您可以恢复单个文件或恢复整个快照,具体取决于需要恢复的场景的性质。
将文件同步到本地计算机
有几种有效的方法可以在 Ubuntu 服务器上备份文件。 在此示例中,我们将使用 rsync
将我们服务器的文件复制到本地计算机上的备份文件夹中。 我们将无法备份文件系统中的每个文件夹,因为其中一些是正在运行的进程的临时存储。 幸运的是,我们可以从备份中排除这些文件夹。
您可以使用以下命令复制服务器的文件系统,注意更改标记为 red 的服务器凭据。 如果您在服务器上使用基于 SSH 密钥的身份验证,则默认情况下您的 root 用户不会设置密码,因此您需要将 rsync
指向您的私钥文件。 该文件通常位于 /home/username/.ssh/id_rsa
。 由于我们在本地下载服务器文件,因此该命令必须在我们的本地计算机上运行,而不是在我们正在备份的服务器上。
sudo rsync -aAXv --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"} -e 'ssh -i /path/to/private_key' root@SERVER_IP_ADDRESS:/* ~/backup/
aAX
标志告诉 rsync
保留重要的文件属性,例如权限、所有权和修改时间。 如果您使用 Docker 或其他虚拟化工具,则应添加 S
标志,以便 rsync
正确处理稀疏文件,如虚拟存储。
笔记: rsync
is only available for Unix-based operating systems like Linux and OS X. If your local computer is running Windows, you can copy your server’s files using an SFTP client like Filezilla: 如何使用 Filezilla 在您的 VPS 上安全地传输和管理文件
如果您稍后需要恢复部分服务器文件,您可以再次使用 rsync
并将源和目标参数颠倒过来,如下所示: sudo rsync -aAXv -e 'ssh -i /path/to/private_key' ~/backup/ root@SERVER_IP_ADDRESS:/*
制作 DigitalOcean Droplet 快照
如果您使用的是 DigitalOcean,您可以创建 Droplet 的快照,如果出现任何问题,您可以轻松恢复。 从 2016 年 10 月开始,快照的费用为每月每 GB 0.05 美元,具体取决于文件系统内的已用空间量。 如果您可以使用此选项,最好同时使用两种备份方法以实现冗余,而不是选择一种方法而不是另一种方法。 确认升级已顺利完成后,您可以删除快照。
首先,关闭服务器电源,以便为快照保留其当前状态。 虽然可以对正在运行的系统进行快照,但为了确保数据在磁盘上的一致性,最好关闭电源:
sudo poweroff
接下来,登录到您的 DigitalOcean 控制面板并选择您要升级的 Droplet。 转到 Snapshots 面板,为您的新快照填写名称,然后选择 Take Snapshot。
快照过程完成后,您的服务器将自动重新启动,因此您可以通过 SSH 重新连接到它以继续升级。
如果您稍后需要将服务器恢复到此快照,您可以在 Droplet 控制面板的 Destroy 部分中从该图像重建。
第二步——准备升级
在开始版本升级之前,我们需要确保已经安装的软件是最新的。 现在更新我们已安装的软件使许多软件包的版本升级不再是飞跃,这将减少出错的可能性。
我们将使用 apt
来更新我们的本地包索引,然后升级当前安装的软件:
sudo apt-get update sudo apt-get upgrade
我们将使用 update-manager-core
来管理版本升级。 在大多数 Ubuntu 12.04 安装中默认安装了这个包,但是我们可以使用 apt-cache
来验证它是否安装在服务器上:
apt-cache policy update-manager-core
如果该命令未返回已安装的版本号(即 如果显示 Installed: (none)
),则使用 apt
从 Ubuntu 的软件存储库下载更新管理器:
sudo apt-get install update-manager-core
一旦我们确认安装了更新管理器,我们就可以开始升级过程了。
第三步——升级到 14.04
我们现在可以使用 root 权限运行 do-release-upgrade
命令。 这是一个自动脚本,它将从 Ubuntu 的存储库中提取最新版本的软件,并将各种升级应用到您的服务器。 此升级可能需要几分钟时间,并且会不时提示您,因此在升级过程中请密切注意您的 SSH 会话。
sudo do-release-upgrade
虽然更新管理器将处理迁移到下一个 LTS 版本所涉及的大部分细节,但我们仍然需要在提示出现时做出一些决定。 这些提示中的大多数都会询问是否覆盖现有的配置文件。 默认操作是保留已经存在的配置,这通常是确保稳定性的最佳选择。 但是,请务必在选择选项之前仔细阅读每个提示,并且不要害怕查看有问题的包以确保您做出正确的选择。
在升级过程即将结束时,系统将提示您重新启动服务器。 按“y”确认以启动重新启动。
您的 SSH 会话将断开连接,因此您需要重新连接以确认升级按预期进行。 重新连接后,使用 lsb_release
验证您的新 Ubuntu 版本号:
lsb_release -a
您应该会看到类似于以下内容的输出:
No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 14.04.1 LTS Release: 14.04 Codename: trusty
如果 Release:
显示 14.04,那么您已经成功升级了您的 Ubuntu LTS 服务器!
第四步——升级内核
即使您已经下载了一个新内核以配合您的更新版本,该内核也可能不会被用于托管您的服务器的软件激活。 如果您使用的是 DigitalOcean,则托管软件(称为 KVM)在服务器映像之外维护内核,并且需要单独更新。
您可以通过 uname
查看您的服务器当前使用的内核版本:
uname -ri
您的输出将如下所示:
3.2.0-24-virtual i686
如果内核版本低于 3.13,则意味着您的服务器尚未使用 Ubuntu 14.04 的内核。 虽然较旧的内核不太可能出现软件问题,但您可能会看到较新内核的性能有所提高或有用的新功能。
在升级过程中,您的服务器下载了一个新内核以供在 Ubuntu 14.04 上使用。 通过查看/lib/modules
目录的内容可以看到下载的是哪个内核版本:
ls /lib/modules
您将看到一个类似于以下内容的列表:
3.13.0-39-generic 3.2.0-24-virtual
为了使用新安装的内核,您必须在 Droplet 的控制面板中更新内核选择,然后关闭并启动您的 Droplet。
首先,登录到您的 DigitalOcean 控制面板并选择您要升级的服务器。 在 Settings 面板中,选择 Kernel 选项卡。
在这里,您将看到可用内核的下拉列表。 选择与您下载的发行版、发行版和版本号相匹配的内核(上例中的 3.13.0-39-generic
):
选择内核后,单击 Change 将该内核加载到您的服务器上。 要开始使用新内核,您需要关闭服务器电源。 虽然您可以在控制面板中执行此操作,但这类似于从计算机上拔下电源,因此建议您通过终端关闭电源:
sudo poweroff
服务器完全关闭后,您可以在控制面板中重新启动它。 在 Power 面板中,选择 Boot。
现在您可以通过 SSH 重新连接到您的服务器并使用 uname
确认新内核正在使用中:
uname -ri
您应该会看到类似于以下内容的输出:
3.13.0-39-generic i686
如果内核版本与您在控制面板上加载的内核匹配,则您已成功更新内核。
结论
您现在已将您的 Ubuntu 服务器升级到最新的 LTS 版本,至少可以在 2019 年之前访问最新的软件更新和安全更新。 如果您在升级后遇到程序的兼容性问题,请检查该程序的文档以查看是否有任何需要更改其配置的重大更改。