我曾见过其他超级用户问题,但它并没有真正回答我的问题。
运行blkid
可以列出磁盘上的分区和分区标签:
ubuntu@ubuntu:~$ sudo lsblk -o NAME,FSTYPE,SIZE,MOUNTPOINT,LABEL
...
sda 111.8G
├─sda1 vfat 350M SYSTEM
├─sda2 ntfs 50G Windows
├─sda3 ntfs 1.5G Recovery
├─sda4 1K
├─sda5 ext4 20G ubuntu
├─sda6 ntfs 30G extra
└─sda7 swap 9.9G [SWAP]
正如链接的帖子所述(也可在此处找到信息),我可以使用 sfdisk 备份此磁盘上的分区表/dev/sda
:
sudo sfdisk -d /dev/sda > sda.partition.table.txt
然后可以使用它来恢复分区表:
sudo sfdisk /dev/sda < sda.partition.table.txt
但是,打印此文件时显示没有分区标签(在我的示例中为:SYSTEM、Windows、Recovery、ubuntu、extra):
$ cat sda.ljuttpx220.partition.table.txt
label: dos
label-id: 0x5e4a12da
device: /dev/sda
unit: sectors
sector-size: 512
/dev/sda1 : start= 2048, size= 716800, type=ef, bootable
/dev/sda2 : start= 718848, size= 104857600, type=7
/dev/sda3 : start= 231292928, size= 3145728, type=27
/dev/sda4 : start= 105578494, size= 125714434, type=5
/dev/sda5 : start= 105578496, size= 41943040, type=83
/dev/sda6 : start= 147523584, size= 62914560, type=7
/dev/sda7 : start= 210440192, size= 20852736, type=82
那么,是否有一个命令或程序可以让我一次性备份分区及其标签?
您有一个 DOS (MBR) 分区表。它不支持存储分区标签。
LABEL
“lsblk”和“blkid”中的列包含文件系统元数据标签,而不是分区标签(可以在PARTLABEL
GPT 分区磁盘中找到)。(此外,
lsblk
和blkid
不是一回事。虽然它们最终都从 libblkid 获取数据,但获取方式不同 - blkid 直接调用 libblkid 从磁盘设备中提取元数据,而 lsblk 显示已从 udev 提取的数据。因此,blkid 通常需要以 root 身份运行,但 lsblk 则不需要,因为它依赖于 udev 来保持其缓存为最新。)可以通过制作该分区的完整映像(使用 dd/cp/etc 或使用 ntfsclone/partclone)来备份文件系统标签,或者在创建新文件系统的过程中或之后使用文件系统专用工具(e2label、fatlabel 等)手动设置。
因此,如果您的目标是克隆现有磁盘及其数据和元数据,您可以:
使用 sfdisk 克隆分区表,然后使用一些适当的工具(、、)以 1:1 的比例克隆每个分区的内容,并且
partclone
文件系统标签将与文件系统的其余部分一起克隆;ntfsclone
dd/ddrescue/cp/pv
(请记住,由于您的磁盘似乎已设置为 BIOS 启动,因此您还需要克隆 MBR启动代码,该代码与 MBR 分区表共存于扇区 0,但不会被 sfdisk 转储。可以使用 进行克隆
head -c 440 $old > $new
。)或者使用/ / /一次克隆整个
/dev/sda
磁盘( → ) ,并且分区表也将与其余部分一起克隆,文件系统元数据和 BIOS 引导代码也将一起克隆。/dev/sdb
dd
ddrescue
cp
pv
如果您的目标是创建新的、空白的分区,您可以执行以下操作:
请注意,大多数文件系统的标头中也有一个 UUID(或类似信息),并且有一些东西会跟踪 UUID 而不是标签。各种 mkfs 工具都有一个选项可以指定您之前从
UUID
“lsblk”中的列中获得的自定义 UUID(再次不要与 GPT 混淆PARTUUID
)。