本文编写于 138 天前,最后修改于 53 天前,其中某些信息可能已经过时。

今天偶然想起来自己以后似乎要用上一些Windows下的专业软件,而这些软件在Linux/Wine下几乎是不可能跑起来的,于是打算装回Windows。但是我的Arch Linux root分区为f2fs,并不支持缩小分区大小,于是只好备份系统,重新分区。正好之前在一块HDD上有一个装好的Win10 Pro,直接迁移过来就可以了。
鉴于本次只是备份系统然后立刻恢复以进行系统迁移,故备份时并未考虑压缩率问题,直接上pigz多线程压缩。
首先确保自己安装了pigz:

sudo pacman -S pigz

关于备份,可以进入archiso进行,笔者作死在Arch下直接备份也没出什么问题。其中/run/media/mx/hdd是我外接的一块移动硬盘。 --exclude代表排除的文件/目录。当然,必须排除备份文件本身,避免循环打包翻车。

sudo tar --use-compress-program=pigz -cvpf arch-backup.tgz --exclude=/proc --exclude=/lost+found --exclude=/var/cache/pacman/pkg --exclude=/mnt --exclude=/sys --exclude=/run/media /

现在我是使用的tar+zstd压缩,压缩比要好一些,而且速度依旧很快:
sudo tar -I 'zstd -T8 -14' -cvpf archbak.tar.zst --exclude=/proc --exclude=/lost+found --exclude=/var/cache/pacman/pkg --exclude=/mnt --exclude=/sys --exclude=/run/media --exclude=/home/mx/.cache/yay /

备份完成后,由于我是要重新装系统,故进入archiso后,重新分区。个人习惯使用cfdisk。目前archiso中已经包含了pigz,无需手动安装,如果没有的话手动联网装一下就好。

#archiso
fdisk -l #查看分区列表
cfdisk /dev/sda #对/dev/sda进行操作,此处为笔者的SSD,记得改好分区类型(EFI/Linux/MS Basic Data)
mkfs.vfat -F32 /dev/sda1 #创建EFI分区
mkfs.f2fs /dev/sda2 #创建Linux Root分区
mkfs.ntfs /dev/sda3 -Q #创建Windows NTFS分区,执行快速格式化
mount /dev/sda2 /mnt #挂载Linux Root
mkdir -p /mnt/boot #创建ESP挂载点
mount /dev/sda1 /mnt/boot #挂载ESP
mkdir -p /run/media/externalhdd #为我的移动硬盘创建挂载点
mount /dev/sdc1 /run/media/externalhdd #挂载我的移动硬盘
#tar --use-compress-program=pigz -xvpf arch-backup.tgz -C /mnt #恢复系统/pigz压缩
tar -I 'zstd -T8' -xvpf archbak.tar.zst -C /mnt #恢复系统/zstandard压缩
mkdir /mnt/proc /mnt/lost+found /mnt/sys /mnt/run/media /mnt/mnt #创建之前排除的目录(pacman软件包缓存就无所谓啦)

由于之前并没有排除/boot,因此grub应该还在。但是由于我重新分了区,uuid有所改变,需要重新修改/etc/fstab。当然,这里我已经重装好了Windows,而且之前也安装了os-prober和ntfs-3g,索性重新装一下GRUB吧。

#archiso
genfstab -U /mnt >> /mnt/etc/fstab #重新生成fstab
arch-chroot /mnt #切换到chroot
#arch-chroot
grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id="Arch Linux" #安装GRUB
grub-mkconfig -o /boot/grub/grub.cfg #生成GRUB主配置文件

至此Arch已经还原完成,剩下的就是好好调♂教♀Windows了:) 可能会单独写一篇
参考:Arch上的备份还原-简书
GRUB(简体中文)-ArchWiki