从完整磁盘映像恢复到单个分区

从完整磁盘映像恢复到单个分区

对于主要版本升级,Tails 推荐这样做复杂的升级路径您可以在新的 USB 驱动器上写入映像,然后将操作系统分区克隆到原始 USB 驱动器上。我正在尝试找出更好的方法来做到这一点:

我有一个 .img 文件,其中包含分区表和单个分区:

$ sudo kpartx -av tails-amd64-5.2.img
add map loop12p1 (253:0): 0 2553856 linear 7:12 2048
$ sudo parted tails-amd64-5.2.img UNIT b print
Model:  (file)
Disk tails-amd64-5.2.img: 1309671424B
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start     End          Size         File system  Name   Flags
 1      1048576B  1308622847B  1307574272B  fat32        Tails  boot, hidden, legacy_boot, esp

以及一个具有两个分区的驱动器:

$  sudo kpartx -av /dev/sdb
add map sdb1 (253:2): 0 16777216 linear 8:16 2048
add map sdb2 (253:3): 0 43655168 linear 8:16 16781312
$ sudo parted /dev/sdb UNIT b print
Model: Kingston DataTraveler 3.0 (scsi)
Disk /dev/sdb: 30943995904B
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start        End           Size          File system  Name       Flags
 1      1048576B     8590983167B   8589934592B   fat32        Tails      boot, hidden, legacy_boot, esp
 2      8592031744B  30943477759B  22351446016B               TailsData

我想恢复该驱动器上第一个分区之上的映像,并保持第二个分区不变。我尝试了这个命令,结果将引导到 GRUB,但不是操作系统:

$ sudo dd if=tails-amd64-5.2.img of=/dev/sdb1 bs=16M

根据fsck的说法,这是因为GPT分区位于起始位置。该命令不执行任何操作:

$ sudo kpartx -d tails-amd64-5.2.img

此命令会导致驱动器甚至无法引导到 GRUB:

$ sudo dd if=tails-amd64-5.2.img of=/dev/sdb1 bs=512 count=2

有没有办法剥离 GUID 分区表并使其工作?

答案1

你几乎已经给出了自己的答案。您已经在使用kpartx但没有利用其结果:

$ sudo kpartx -av tails-amd64-5.2.img
add map loop12p1 (253:0): 0 2553856 linear 7:12 2048 

注意反应add map loop12p1

该命令刚刚/dev/mapper/loop12p1为您创建了一个设备,这将使您可以直接访问映像文件中的分区,跳过 GUID 分区表。

所以你可以这样做:

sudo dd if=/dev/mapper/loop12p1 of=/dev/sdb1 bs=16M

/dev/mapper/loop12p1一旦您不再需要环回设备(或其他设备),此命令将删除它:

sudo kpartx -d tails-amd64-5.2.img

相关内容