我想克隆现有的 Debian 安装并在具有不同大小硬盘的新计算机上恢复。
分区非常简单 - EFI 为 /dev/sda1,Linux 为 /dev/sda2,swap 为 /dev/sda3。
在我创建图像的机器上,我主要这样做:
fsarchiver savefs /images/${BACKUP_FILE_NAME}.fsa /dev/sda1 /dev/sda2 -e *.fsa -v -j4 -A -z 9
我还保存了输出:
sfdisk -J /dev/sda
也
bklid
在我想要恢复的机器上,我基本上这样做:
echo "label: gpt" | sfdisk /dev/sda
FULL_DISK_SIZE=`sfdisk -s /dev/sda`
let VARIABLE_SIZE=$FULL_DISK_SIZE/1024/1024-10
cat <<EOT > /tmp/sfdisk.txt
size=512M, type=${SFDISK_TYPE_BOOT}, uuid=${SFDISK_UUID_BOOT}
size=${VARIABLE_SIZE}G, type=${SFDISK_TYPE_LINU}, uuid=${SFDISK_UUID_LINU}
type=${SFDISK_TYPE_SWAP}, uuid=${SFDISK_UUID_SWAP}
EOT
sfdisk /dev/sda < /tmp/sfdisk.txt
其背后的主要思想是保留原始分区类型以及部分 uuid,但在 Linux 分区的大小方面保持灵活性。我在这里粗略地说全尺寸减去 10 GB。
然后我像这样恢复一切:
fsarchiver restfs sourceimage.fsa id=0,dest=/dev/sda1 id=1,dest=/dev/sda2
这适用于具有完全相同硬盘驱动器的机器。如果硬盘驱动器不同,我无法从它启动。
如果我定期在这些机器上安装 Linux,保存分区信息,擦除它们,然后再次尝试上面的过程,旧分区信息仍然会失败(这并不奇怪),但如果我使用新磁盘,它会立即开始工作EFI 驱动器的 uuid 部分。这让我相信这些部分 uuid 都参与其中。
然后我回到旧机器并恢复了其上的映像,但我将其 EFI 分区的 uuid 部分更改了一个字母,只是为了看看这是否会弄乱它 - 确实如此。此外,让 sfdisk 自动生成部分 uuid 并不会使驱动器在恢复映像后可启动。
我不太关心部分 uuid 是保留的还是新的,但我确实想自动化此操作。知道我需要改变什么才能使这项工作正常进行吗?
答案1
我想我已经明白了。这部分最后缺失了:
mount -o rw,remount /sys/firmware/efi/efivars
efibootmgr -c -g --disk /dev/sda --part 1 -l \\EFI\\debian\\grubx64.efi