Product SiteDocumentation Site

3.2. 如何迁移

为了业务连续性,每台计算机的迁移都应该事先规划、按计划实施。每种操作系统都要遵守这个原则。

3.2.1. 调查和识别所有服务

这是必要的步骤。严谨的管理员本来清楚每部服务器的确切角色,但是,服务器的角色也会变化,而且有时还会有用户安装额外的服务。你至少要知道这些情况和新服务的存在,而不是简单粗暴地删除。
因此,迁移服务器前先告知用户是明智之举。为了让用户参与,你可以在迁移前先为他们安装最常见的自由软件(例如 LibreOffice 、Mozilla 套件),在 Debian 中也会有这些软件。

3.2.1.1. 网络与进程

nmap 工具 (在同名软件包中) 可以在未登录的前提下,快速地探测一台线上机器上运行着哪些互联网服务。只需在连接到同一网络的另一台计算机上调用以下命令:
$ nmap mirwiz
Starting Nmap 7.93 ( https://nmap.org ) at 2024-05-20 00:15 CEST
Nmap scan report for mirwiz (192.168.1.104)
Host is up (0.00062s latency).
Not shown: 992 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
25/tcp   open  smtp
80/tcp   open  http
111/tcp  open  rpcbind
139/tcp  open  netbios-ssn
445/tcp  open  microsoft-ds
5666/tcp open  nrpe
9999/tcp open  abyss

Nmap done: 1 IP address (1 host up) scanned in 0.06 seconds
如果服务器向用户提供 shell 帐号的 Unix 系统,就还需要搞清楚用户是否在登出之后继续执行后台进程。ps auxw 指令可以显示所有进程及其所属用户的列表。再对比 whow 命令输出的登录用户名单,就可以找到在后台运行的流氓程序、未声明的服务或程序。使用 crontabs (显示用户定期执行程序的时程表)可以查看服务器提供的服务信息(cron 的完整说明在 第 9.7 节 “使用 cronatd运行计划任务”)。
任何状况下,都应该先备份你的服务器:如果用户在迁移后报告问题,该备份可以用于恢复信息。

3.2.2. 备份配置

明智的做法是,为每个明确的服务保留一份配置,以便在服务器升级之后安装同等的服务。最低限度是要制作配置文件的副本。
Unix 机器的配置文件,通常在 /etc/ 文件夹内,有时也放在 /usr/local/ 的子文件夹里。比如源码安装的程序,配置档就会放在前述的子文件夹内,有时候也被放在 /opt/
对于数据管理服务(比如数据库),强烈建议以标准格式导出数据,以便由新软件导入。标准格式通常是带有文档的文本格式,比如一个从 SQL 数据库 dump 出的文件,或者一个从 LDAP 服务器导出的 LDIF 格式文件。
备份数据库

图 3.2. 备份数据库

每个服务器软件都有所不同,不可能穷尽细节。应当比较新旧软件的文档,找到可导出(因此可以重新导入)的部分,以及需要人工处理的部分。此书阐述 Linux 服务器主要程序的配置。

3.2.3. 接手现有的 Debian 服务器

先分析正在运行 Debian 的机器,才能有效地接管维护工作。
首先要查看的文件是 /etc/debian_version,它通常包括 Debian 系统的版本号 (它是 base-files 软件包的一部分)。若该文件以 代码/sid 方式呈现,则表示此系统从开发版本(测试版或不稳定版)发行版获取软件包更新。
apt-show-versions 程序 (来自 Debian 同名软件包) 检查已安装软件包的列表并标识可用的版本。aptitude 程序可以做到同样的工作,但是不是特别系统化。
查看 /etc/apt/sources.list 文件(以及 /etc/apt/sources.list.d/ 目录)可看到已安装 Debian 软件包的来源。若出现不明来源,管理员可能要选择重新安装电脑系统确保其软件与 Debian 兼容。
The sources.list file is often a good indicator: the majority of administrators keep, at least in comments, the list of APT sources that were previously used. But you should not forget that sources used in the past might have been deleted, and that some random packages grabbed on the Internet might have been manually installed (with the help of the dpkg command). In this case, the machine is misleading in its appearance of being a “standard” Debian system. This is why you should pay attention to any indication that will give away the presence of external packages (appearance of deb files in unusual directories, package version numbers with a special suffix indicating that it originated from outside the Debian project, such as ubuntu or lmde, etc.). Below are two examples, showcasing unusual version suffixes and a third-party package without a source.
$ dpkg -l
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name                          Version                        Architecture Description
+++-=============================-==============================-============-===================
[..]
ii  docker-buildx-plugin          0.14.0-1~debian.12~bookworm    amd64        Docker Buildx cli plugin.
ii  docker-ce                     5:26.1.3-1~debian.12~bookworm  amd64        Docker: the open-source application container engine
ii  docker-ce-cli                 5:26.1.3-1~debian.12~bookworm  amd64        Docker CLI: the open-source application container engine
ii  docker-ce-rootless-extras     5:26.1.3-1~debian.12~bookworm  amd64        Rootless support for Docker.
[..]
$ apt-show-versions | grep No
hc-utils:all 0.0.4-1 installed: No available version in archive
类似的,也要分析 /usr/local/ 目录的内容,这里应当存放手动编译和安装的程序。这里安装的软件列表值得考究,出于某种原因使用者没有选择对应的 Debian 软件包。

3.2.4. 安装 Debian

知道当前服务器的必要信息后,就可以关闭它并开始安装 Debian。
依照电脑的架构,选择适当的版本。近几年的 PC,很可能是 amd64 (稍旧的是 i386)。其他的情况,则依照安装的旧系统来判断。
表 3.1 不是完整的,但相当有用。注意,它列出了当前稳定发布中不再支持的 Debian 架构。任何情况下,电脑的原始文档是最有用的数据源。

表 3.1. 操作系统与架构对照表

操作系统架构
DEC Unix (OSF/1)alpha, mipsel
HP Unixia64, hppa
IBM AIXpowerpc
Irixmips
OS Xamd64, powerpc, i386
z/OS, MVSs390x, s390
Solaris, SunOSsparc, i386, m68k
Ultrixmips
VMSalpha
Windows 95/98/MEi386
Windows NT/2000i386, alpha, ia64, mipsel
Windows XP / Windows Server 2003-2008i386, amd64, ia64
Windows RTarmel, armhf, arm64
Windows Vista / Windows 7-8-10-11 / Windows Server 2010-amd64

3.2.5. 安装与配置选定的服务

Debian 安装之后,我们需要各自安装并配置每台计算机上托管的服务。新的配置必须参考过去的配置才能确保转换的顺利。前述两个步骤的搜集信息对于完成此部分极为重要。
安装指定的服务

图 3.3. 安装指定的服务

全面进入此练习前,强烈建议您阅读本书其他部分。才能够较精准地了解对预期服务的配置方式。