별도: 잘못된 토큰: 교환

별도: 잘못된 토큰: 교환

플래그를 추가하려고 시도했지만 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

그래서 여기 있습니다. 지원되지 않는 플래그는 유효하지 않은 토큰 메시지를 받게 됩니다. 즉, 잘못 입력했거나 잘못한 것이 아니라 어떤 경우에는 플래그가 지원되지 않는다는 의미입니다.

답변2

파티션은 파일 시스템(이 경우)을 포함 ext4하거나 스왑 공간을 포함하지만 파일 시스템은 포함하지 않습니다. 따라서 swap파일 시스템 파티션에 플래그를 추가할 필요가 없습니다.

나중에 파일 시스템에 스왑 파일을 생성하려는 경우 이 플래그를 파티션에 추가할 필요가 없습니다. 파일을 생성하여 교환에 사용하면 됩니다.

관련 정보