Parted
parted:無效令牌:交換
我正在嘗試添加標誌
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
雖然
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
所以我們到了。不受支持的標誌只會得到無效的令牌消息,並且有點暗示您輸入錯誤或其他什麼,但您沒有做錯任何事情,只是在某些情況下不支持這些標誌。