I am following @Trajektorijus 's idea to use Windows and finally successfully migrate my Mac OS backup disk to another one.
The tool I am using is EaseUS Todo Backup. The free version does not have the feature to do disk-to-disk copy, but it can backup the disk as an image. I am backing up my original 1TB Mac OS backup to my NAS, which is big enough. My disk has some bad sectors and takes ~24 hours to fully backup as image. Then, I can use the restore feature to restore the image file to a new disk. I use "same as original partition" when doing restore.
After that, if mounting the new disk in Mac OS. It is found the APFS partition is broken, marked with a wrong type. Inspired by this post (you don't need to read it), I can change the partition type by doing this:
sudo gpt -r show disk2
start size index contents
0 1 PMBR
1 1 Pri GPT header
2 32 Pri GPT table
40 409600 1 GPT part - C12A7328-F81F-11D2-BA4B-00A0C93EC93B
411648 1953113480 2 GPT part - 7C3457EF-0000-11AA-AA11-00306543ECAC
1953525135 32 Sec GPT table
1953525167 1 Sec GPT header
Note down the start and size of index=2 partition. Run:
sudo gpt remove -i 2 /dev/disk2
sudo gpt add -i 2 -b 411648 -s 1953113480 -t apfs /dev/disk2
We are recreating the partition at the same position, but mark with
-t apfs. Now, we should be able to see the Mac OS backups.
My new and old disks have both 1TB so I don't need to resize my container, but you should be able to find solutions online to expand a APFS container in your new disk.
Besides, as you can see there is a 2008 empty spaces between my index=1 and index=2 partitions. However, I don't think there is an easy way to claim them back.