我尝试添加标志swap
但parted
得到无效令牌,为什么?
Model: Kingston DataTraveler 3.0 (scsi)
Disk /dev/sda: 15.5GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
1 512B 2000MB 2000MB primary ext4 boot, lba
(parted) set
Partition number? 1
Flag to Invert? swap
parted: invalid token: swap
答案1
虽然help set
(以及手册页)只是为您提供了未注释的标志列表,但它并没有告诉您哪个分区方案支持哪些标志。
无效令牌消息似乎正是当标志不可用时您收到的消息。应该有一个更用户友好的错误消息。
在parted 3.2中,对于GPT分区,标志swap
, root
,lba
不可用:
static int
gpt_partition_is_flag_available (const PedPartition *part,
PedPartitionFlag flag)
{
switch (flag)
{
case PED_PARTITION_RAID:
case PED_PARTITION_LVM:
case PED_PARTITION_BOOT:
case PED_PARTITION_BIOS_GRUB:
case PED_PARTITION_HPSERVICE:
case PED_PARTITION_MSFT_RESERVED:
case PED_PARTITION_MSFT_DATA:
case PED_PARTITION_DIAG:
case PED_PARTITION_APPLE_TV_RECOVERY:
case PED_PARTITION_HIDDEN:
case PED_PARTITION_LEGACY_BOOT:
case PED_PARTITION_PREP:
case PED_PARTITION_IRST:
case PED_PARTITION_ESP:
return 1;
case PED_PARTITION_SWAP:
case PED_PARTITION_ROOT:
case PED_PARTITION_LBA:
default:
return 0;
}
return 0;
}
MSDOS 仅支持这些标志:
static int
msdos_partition_is_flag_available (const PedPartition* part,
PedPartitionFlag flag)
{
switch (flag) {
case PED_PARTITION_HIDDEN:
if (part->type == PED_PARTITION_EXTENDED)
return 0;
else
return 1;
case PED_PARTITION_BOOT:
case PED_PARTITION_RAID:
case PED_PARTITION_LVM:
case PED_PARTITION_LBA:
case PED_PARTITION_PALO:
case PED_PARTITION_PREP:
case PED_PARTITION_IRST:
case PED_PARTITION_ESP:
case PED_PARTITION_DIAG:
return 1;
default:
return 0;
}
}
那么,国旗到底是怎么回事呢swap
?
事实证明它是由 DVH 支持的:
static int
dvh_partition_is_flag_available (const PedPartition* part,
PedPartitionFlag flag)
{
switch (flag) {
case PED_PARTITION_ROOT:
case PED_PARTITION_SWAP:
case PED_PARTITION_BOOT:
return 1;
...以及 MAC 分区:
static int
mac_partition_is_flag_available (
const PedPartition* part, PedPartitionFlag flag)
{
switch (flag) {
case PED_PARTITION_BOOT:
case PED_PARTITION_ROOT:
case PED_PARTITION_SWAP:
case PED_PARTITION_LVM:
case PED_PARTITION_RAID:
return 1;
好消息是 Linux 一开始就不太关心分区类型。因此,您可以使用任何分区进行交换,无论分区表是否这么规定。
根据上面的代码,对于msdos分区标签,hidden
如果分区是扩展的,则不能设置flag。这是测试parted给出的错误消息的好方法:
(parted) mklabel msdos # new dos partition
(parted) mkpart primary 1MiB 2MiB # primary
(parted) mkpart extended 2MiB 10MiB # extended
(parted) mkpart logical 3MiB 4MiB # logical
(parted) set 1 hidden on # OK
(parted) set 2 hidden on # FAIL
parted: invalid token: hidden # very helpful message
Flag to Invert? # I didn't mistype
(parted) set 5 hidden on # OK
所以我们就到了。不受支持的标志只会获得无效的令牌消息,这意味着您输入错误或其他内容,但您没有做任何错误,只是在某些情况下不支持这些标志。
答案2
分区要么包含文件系统(在本例中)ext4
,要么包含交换空间但不包含文件系统。因此将swap
标志添加到文件系统分区是没有意义的。
如果您稍后想在文件系统上创建交换文件,则无需向分区添加该标志。您只需创建该文件并将其用于交换即可。