You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Ubuntu 16.04服务器完整复制到另一台Ubuntu服务器

Hey Ricky, 刚好我之前帮朋友搞定过几乎一模一样的Ubuntu服务器迁移需求——从一台配置好的16.04机器把整个Node应用环境搬到全新服务器。下面给你整理几个最实用的方案,你可以根据自己的情况挑:

方案一:全量系统同步(最省心,1:1复刻旧环境)

这个方法适合你想完全复制旧服务器的所有配置,包括系统设置、软件、应用,一步到位。

步骤如下:

  1. 确保新服务器能通过SSH访问旧服务器,两边都安装rsync和sshpass(如果需要密码登录的话):
    在两台机器上执行:sudo apt-get update && sudo apt-get install rsync sshpass -y
  2. 在新服务器上运行同步命令(注意替换成你的旧服务器用户名和IP):
    sudo rsync -avz --delete --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"} old_user@192.168.x.x:/ /
    
    解释一下参数:
    • -avz:归档模式+显示详细信息+压缩传输
    • --delete:删除新服务器上旧服务器没有的文件,保持完全一致
    • --exclude:排除虚拟文件系统和临时目录,这些目录不需要同步
  3. 同步完成后需要调整几个关键配置:
    • 修改主机名:sudo hostnamectl set-hostname new-server-name
    • 调整网卡配置:编辑/etc/network/interfaces,把旧服务器的IP换成新服务器的IP
    • 更新/etc/fstab:如果旧服务器有特殊挂载项,确保新服务器的磁盘路径匹配
    • 重启新服务器:sudo reboot,然后检查所有服务是否正常启动
方案二:分模块迁移(更灵活,只迁移必要内容)

如果不想同步整个系统,只想迁移Node应用相关的环境和配置,这个方案更合适,分成几个模块操作:

1. 迁移已安装的软件包

先导出旧服务器的软件包列表,再在新服务器批量安装:

  • 旧服务器执行:dpkg --get-selections > installed_packages.txt
  • 把文件传到新服务器:scp installed_packages.txt new_user@192.168.x.x:/tmp/
  • 新服务器执行:
    sudo dpkg --set-selections < /tmp/installed_packages.txt
    sudo apt-get dselect-upgrade -y
    

2. 迁移Node.js环境与应用

  • Node.js本身:如果是用nvm安装的,直接复制nvm目录到新服务器:
    scp -r old_user@192.168.x.x:~/.nvm new_user@192.168.x.x:~/
    然后在新服务器执行source ~/.nvm/nvm.sh,验证版本:node -v
    如果是系统级安装的,上面的软件包同步已经包含了,直接用就行
  • 应用代码与配置:
    复制应用目录:rsync -avz old_user@192.168.x.x:/path/to/your/node/app new_user@192.168.x.x:/opt/your-app/
    复制环境变量文件(比如.env)、反向代理配置(比如Nginx的/etc/nginx/sites-available/your-app.conf)
  • 应用依赖:推荐在新服务器重新执行npm install(避免跨平台二进制包冲突),如果赶时间也可以直接复制node_modules目录
  • 进程管理配置:如果用systemd管理Node进程,复制服务文件:scp old_user@192.168.x.x:/etc/systemd/system/your-app.service new_user@192.168.x.x:/etc/systemd/system/,然后执行sudo systemctl daemon-reload && sudo systemctl start your-app.service

3. 迁移数据库(如果你的Node应用用到了)

比如常用的MySQL/MariaDB:

  • 旧服务器导出数据库:mysqldump -u root -p your-db-name > db-backup.sql
  • 传到新服务器:scp db-backup.sql new_user@192.168.x.x:/tmp/
  • 新服务器先创建空数据库:mysql -u root -p -e "CREATE DATABASE your-db-name;"
  • 导入数据:mysql -u root -p your-db-name < /tmp/db-backup.sql

如果是MongoDB,用mongodump和mongorestore操作类似,这里就不展开了。

方案三:磁盘镜像克隆(适合物理机/虚拟机)

如果你的旧服务器是虚拟机,直接用虚拟化平台(比如VMware、VirtualBox)的克隆功能就行,一步到位。如果是物理机,可以用dd命令做磁盘镜像:

  1. 在旧服务器的Live CD环境下(避免文件系统被占用)执行:
    sudo dd if=/dev/sda of=/mnt/usb/backup.img bs=4M(/dev/sda是旧服务器的系统盘,/mnt/usb是外接存储)
  2. 把镜像文件传到新服务器,同样在Live CD环境下恢复:
    sudo dd if=/path/to/backup.img of=/dev/sda bs=4M
    ⚠️ 这个方法要特别小心,会覆盖新服务器的整个磁盘,操作前一定要确认磁盘路径正确!
关键注意事项
  • 备份优先:操作前一定要备份旧服务器的应用代码、数据库、配置文件,比如用tar -czf backup.tar.gz /path/to/app /etc/nginx /var/lib/mysql
  • 版本一致:确保新服务器也是Ubuntu 16.04,否则软件包可能会有兼容性问题
  • 验证服务:迁移完成后,逐个检查服务状态,比如systemctl status nginx、systemctl status your-app.service,查看日志排查问题:journalctl -u your-app.service
  • 防火墙规则:如果旧服务器用ufw,导出规则:ufw show added > ufw-rules.txt,传到新服务器后逐个添加,或者直接在新服务器重新配置

内容的提问来源于stack exchange,提问作者Ricky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:07:40