如何基于Ubuntu 22.04.2 LTS旧机生成软件包与仓库列表,实现新机环境克隆
如何基于Ubuntu 22.04.2 LTS旧机生成软件包与仓库列表,实现新机环境克隆
刚好我也处理过类似的环境克隆需求,针对Ubuntu 22.04.2 LTS,完全可以通过命令行快速导出旧机的软件包和仓库配置,然后在新机上一键恢复,不用一个个手动装。结合你已经把旧SSD挂载到新机的情况,下面分步骤来操作:
一、从旧机(或挂载的旧SSD)导出关键信息
1. 备份仓库源配置
Ubuntu的软件源配置主要存放在两个地方:主配置文件sources.list和sources.list.d目录下的第三方源配置。直接复制这些文件到新机即可:
# 假设旧SSD挂载在/mnt/old-drive,执行以下命令 sudo cp -ra /mnt/old-drive/etc/apt/sources.list /etc/apt/ sudo cp -ra /mnt/old-drive/etc/apt/sources.list.d/ /etc/apt/
另外,第三方源需要GPG密钥验证,建议同时备份密钥目录:
sudo cp -ra /mnt/old-drive/etc/apt/trusted.gpg.d/ /etc/apt/
2. 导出已安装的Deb软件包列表
要获取旧机所有已安装的Deb包,有两种方式:
- 如果旧机还能正常开机,直接在旧机上运行:
dpkg --get-selections | grep -v deinstall > installed-packages.list - 如果只有挂载的旧SSD,直接读取旧机的dpkg状态文件生成列表:
awk '/^Package:/ {print $2 " install"}' /mnt/old-drive/var/lib/dpkg/status | grep -v deinstall > installed-packages.list
这个命令会过滤掉已卸载的包,只保留当前安装的软件包信息。
3. 导出Snap软件包列表
Ubuntu 22.04里很多默认应用(比如Firefox、VS Code)是用Snap分发的,别忘了备份这部分:
- 旧机开机状态下导出(带版本号,方便恢复到相同版本):
snap list | awk 'NR>1 {print $3 " " $1}' > installed-snaps.list - 挂载旧SSD时,直接读取Snap的安装目录提取包名:
ls /mnt/old-drive/var/lib/snapd/snaps/ | grep -v "^partial" | sed 's/_.*//' | uniq > installed-snaps.list
二、在新机上恢复环境
1. 更新仓库缓存
先让新机识别刚复制的源配置:
sudo apt update
2. 恢复Deb软件包
用之前导出的列表批量安装:
sudo dpkg --set-selections < installed-packages.list sudo apt-get dselect-upgrade -y
dselect-upgrade会自动处理依赖关系,安装所有缺失的包,同时移除不需要的旧包(如果有冲突的话会提示你处理)。
3. 恢复Snap软件包
根据导出的列表安装Snap应用:
- 如果列表带版本号,执行:
while read rev name; do sudo snap install "$name" --revision "$rev" done < installed-snaps.list - 如果只有包名,直接安装最新版:
while read name; do sudo snap install "$name" done < installed-snaps.list
4. 验证恢复结果
可以用以下命令检查是否和旧机一致:
# 对比Deb包列表 dpkg --get-selections | diff installed-packages.list - # 检查Snap包 snap list
一些注意事项
- 硬件适配:Ubuntu 22.04会自动识别新硬件并安装对应驱动,旧机的硬件专属包(比如NVIDIA驱动)如果和新机不兼容,
apt会自动提示冲突,你只需要根据提示选择合适的驱动即可。 - 用户配置:你已经复制了
/home目录,大部分应用的个性化配置都在~/.config、~/.local这些子目录里,恢复软件后直接就能用之前的配置。 - 清理冗余:恢复完成后,可以用
sudo apt autoremove清理不需要的依赖包。
备注:内容来源于stack exchange,提问作者Yasha Karant
相关产品推荐
相关产品推荐

