分开:无效令牌:交换

分开:无效令牌:交换

我尝试添加标志swapparted得到无效令牌,为什么?

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标志添加到文件系统分区是没有意义的。

如果您稍后想在文件系统上创建交换文件,则无需向分区添加该标志。您只需创建该文件并将其用于交换即可。

相关内容