首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >parted:无效令牌:交换

parted:无效令牌:交换
EN

Unix & Linux用户
提问于 2018-08-26 13:11:23
回答 2查看 3.2K关注 0票数 5

我正在尝试用swap添加标志parted,但是得到了无效的令牌,为什么?

代码语言:javascript
复制
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
EN

回答 2

Unix & Linux用户

回答已采纳

发布于 2018-08-26 14:39:38

虽然help set (以及手册页)只是给出了一个未注释的标志列表,但它并没有告诉您哪个分区方案支持哪些标志。

当一个标志不可用时,无效的令牌消息似乎就是您得到的。应该有一条更友好的错误消息。

在Part3.2中,对于GPT分区,标志swaprootlba不可用:

代码语言:javascript
复制
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只支持以下标志:

代码语言:javascript
复制
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的支持:

代码语言:javascript
复制
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;

...as良好的MAC分区:

代码语言:javascript
复制
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提供的错误消息的好方法:

代码语言:javascript
复制
(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

所以我们到了。不受支持的标志只会得到无效的令牌消息,某种程度上意味着您输入错了它或其他东西,但是您没有做任何错误的事情,只是在某些情况下它不支持这些标志。

票数 4
EN

Unix & Linux用户

发布于 2018-08-26 13:24:20

分区要么包含文件系统(在本例中为ext4 ),要么包含交换空间而不包含文件系统。因此,将swap标志添加到文件系统分区是没有意义的。

如果以后要在文件系统上创建交换文件,则不需要将标志添加到分区。您只需创建该文件并将其用于交换。

票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/464919

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档