如何从旧硬盘迁移已安装软件包至新Ubuntu系统?
兄弟我太懂你这种糟心处境了——老Ubuntu用得好好的,突然根分区罢工,重装系统后之前装的一堆软件全没了,手动拷可执行文件又怕搞出各种兼容问题对吧?别慌,你提到的dpkg --root=/mountpoint -l就是关键突破口,咱们可以用这个命令导出旧系统的已安装包列表,然后在新系统里批量安装,具体步骤如下:
第一步:挂载旧系统的分区
先找到旧系统分区的设备名(可以用lsblk或者fdisk -l命令查看),然后把它挂载到一个临时目录,比如/mnt/oldroot:sudo mount /dev/sdXn /mnt/oldroot注意把
/dev/sdXn替换成你实际的旧分区设备名,比如/dev/sda2之类的。第二步:导出旧系统的已安装包列表
直接用dpkg --root=/mnt/oldroot -l会输出很多冗余信息,咱们可以过滤出真正已安装的包名,生成一个干净的列表文件:dpkg --root=/mnt/oldroot -l | grep '^ii' | awk '{print $2}' > /tmp/old_packages.txt这个命令里,
grep '^ii'是筛选出已安装的包(dpkg输出里ii开头的就是已安装状态),awk '{print $2}'是提取包名,最后把结果存到/tmp/old_packages.txt里。第三步:在新系统批量安装软件包
先更新一下新系统的软件源(如果你的旧Ubuntu版本已经停止支持,记得把新系统的sources.list换成旧版本归档源,比如把源地址改成http://old-releases.ubuntu.com/ubuntu/,不然apt会找不到包),然后用下面的命令批量安装:sudo xargs apt-get install -y < /tmp/old_packages.txt这个命令会自动读取列表里的所有包名,批量下载安装,省得你一个个手动输入。
额外提醒
如果旧系统里有一些第三方源的包或者你自己编译安装的软件,这种方法可能没法直接迁移——第三方源的包需要你在新系统里先添加对应的源,自己编译的软件可能得重新编译或者拷对应的文件。但大部分官方仓库里的软件都能通过这种方法快速恢复。
备注:内容来源于stack exchange,提问作者Edward Falk




