对于主要版本升级,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