別途:間違ったトークン:交換

別途:間違ったトークン:交換

フラグを追加しようとしましたが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できません。rootlba

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パーティションが拡張されるとフラグを設定できません。これは 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

だからここにあります。サポートされていないフラグは無効なトークンメッセージを受け取ります。言い換えれば、間違った入力や間違ったものではなく、場合によってはフラグがサポートされていません。

おすすめ記事