debian系统从32位(i386)平滑升级到64位(amd64),不中断服务

debian从32位i386,更换到64位amd64的步骤, 过程很容易损坏系统, 要实现对整个目录进行备份。
最好在一个空的分区, 建立一个root分区的备份, 然后chroot到备份目录,进行操作, 成功后, 选择从新的root分区启动。 
 
debian支持i386/amd64   multiarch  共存, 先添加amd64支持,然后用amd64的包,替换掉i386的包,在取消i386架构。 
 
0. 用debootstrap和chroot建立一个debian10的amd64基本系统, 用于下载amd64的deb包,sources.list要跟原系统保持一致
 
1.增加amd64架构支持
  dpkg --add-architecture  amd64
 
2.安装基本包
 apt update
 apt install libc6:amd64 libncurses5:amd64 libstdc++6:amd64
 apt install linux-image-5.10-amd64:amd64
 dpkg --print-foreign-architectures
3.重启到amd64内核
 
4.修改 /etc/apt/sources.list , 增加 [arch=amd64]
   deb [arch=amd64] http://deb.debian.org/debian buster main
   deb [arch=amd64] http://deb.debian.org/debian buster-backports main
   apt update
 
5.列出所有i386的软件
  dpkg --get-selections |grep :i386 |grep -v deinstall >/home/i386.list
 
6.目前amd64不是主架构, 所有有些包不能直接安装, 可以在同版本的debian10(sources.list也要相同)系统, 下载对应的amd64的deb版本
   chroot .....
   apt update
   cd /home/deb
   cat i386.list |awk -F: '{print "apt-get download "$1":amd64"}' |bash
   exit
   cd /chroot/home/deb
 
7.在amd64的deb目录下, 先安装基础系统deb包:
   dpkg -i --force-all gcc-*-base*.deb libgcc*.deb libc*.deb libselinux*.deb libbz2*.deb
8.再安装一次所有的deb包
   dpkg -i *.deb
 
9.清理i386
  apt remove $(cat /home/i386.list |awk -F: '{printf " "$1":i386"}')
  apt --fix-broken install
  apt autoremove
10. 反复执行5-9, 然后确认i386的数量降到0
11. dpkg --remove-architecture i386