Parted

parted:無效令牌:交換

  • August 26, 2018

我正在嘗試添加標誌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

雖然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 一開始並不真正關心分區類型。因此,您可以使用任何分區進行交換,無論分區表是否如此。


hidden根據上面的程式碼,對於msdos分區標籤,如果分區被擴展,則不能設置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

所以我們到了。不受支持的標誌只會得到無效的令牌消息,並且有點暗示您輸入錯誤或其他什麼,但您沒有做錯任何事情,只是在某些情況下不支持這些標誌。

引用自:https://unix.stackexchange.com/questions/464919