如何避免用parted命名分区?

如何避免用parted命名分区?

如果我运行这些命令:

parted -s /dev/sda \
    mklabel gpt \
    mkpart primary 1MiB 261MiB \
    set 1 esp on \
    mkpart primary 261MiB 50GiB \
    mkpart primary 50GiB 550GiB \
    mkpart primary 550GiB 100%

mkfs.fat -F32 /dev/sda1
yes | mkfs.ext4 /dev/sda2
yes | mkfs.ext4 /dev/sda3
yes | mkfs.ext4 /dev/sda4

我得到的primary所有这些分区的名称如下:

Model: ATA ST2000LM003 HN-M (scsi)
Disk /dev/sda: 2000GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Disk Flags: 

Number  Start   End     Size    File system  Name     Flags
 1      1049kB  274MB   273MB   fat32        primary  boot, esp
 2      274MB   53.7GB  53.4GB  ext4         primary
 3      53.7GB  591GB   537GB   ext4         primary
 4      591GB   2000GB  1410GB  ext4         primary

我不想要这些名称,如何避免这种自动命名?


编辑

如果我mkpart像这样更改该部分:

parted -s /dev/sda \
    mklabel gpt \
    mkpart 1MiB 261MiB \
    set 1 esp on \
    mkpart 261MiB 50GiB \
    mkpart 50GiB 550GiB \
    mkpart 550GiB 100%

并运行脚本,我得到这些:

Error: Invalid number.
mkfs.fat 4.1 (2017-01-24)
mkfs.fat: unable to open /dev/sda1: No such file or directory
mke2fs 1.45.3 (14-Jul-2019)
The file /dev/sda2 does not exist and no size was specified.
mke2fs 1.45.3 (14-Jul-2019)
The file /dev/sda3 does not exist and no size was specified.
mke2fs 1.45.3 (14-Jul-2019)
The file /dev/sda4 does not exist and no size was specified.

编辑

gparted可以这样做:

在此输入图像描述

在这里,我从最后一个分区中删除了标签,gparted但它没有显示命令它是如何做到这一点的!

答案1

分开的文档:

命令:mkpart[部分类型 fs 类型名称] 开始 结束
...
零件类型primary是“ ”、“ extended”或“ ”之一,并且只能用“ ”或“ ”分区表logical指定。 A msdosdvh姓名必须指定为 'gpt。两者都不零件类型也不姓名可以与“ sun”分区表一起使用。

使用parted时,您必须为GPT分区设置名称。

答案2

parted您可以通过提供空字符串来避免在使用时命名分区。
我将使用相同的引用官方文档:

命令:mkpart[部分类型名称 fs-type] 开始 结束
...
零件类型primary是“ ”、“ extended”或“ ”之一,并且只能用“ ”或“ ”分区表logical指定。 A msdosdvh姓名必须为“ ”分区表指定gpt。两者都不零件类型也不姓名可以与“ sun”分区表一起使用。

现在,让我们剖析一下(强调我的):

零件类型primary是“ ”、“ extended”或“ ”之一logical,并且只能指定' msdos' 或 ' dvh' 分区表。

所以,当你创建gpt分区表时你不使用 part-type(出于显而易见的原因:只有一种类型的分区)。这意味着对于gpt磁盘,命令变为

mkpart [name fs-type] start end  

这意味着第一个参数mkpartname.让我们回到引用:

A姓名 必须指定对于“ gpt”分区表。

换句话说,第一个参数是强制性的,因此mkpart命令后面的任何字符串都将被解释为分区的指定名称。现在,parted在交互模式下使用时如何创建一个没有名称的新分区?您使用空字符串"",例如

(parted) mkpart "" 0% 100% 

当您在脚本模式下运行该命令时,您必须避免这些引号被 shell 扩展(什么都没有),它们需要按字面传递,因此parted您必须转义/引用它们,例如

parted -a optimal -s /dev/sda mklabel gpt mkpart '""' 0% 100%

也就是说,在您的特定情况下,而不是使用“基本的”它将用作分区的名称,您可以使用空字符串:

parted -s /dev/sda \
    mklabel gpt \
    mkpart '""' 1MiB 261MiB \
    set 1 esp on \
    mkpart '""' 261MiB 50GiB \
    mkpart '""' 50GiB 550GiB \
    mkpart '""' 550GiB 100%

答案3

您可以使用fdisk

您可以使用fdiskutil-linux 2.31.1,也可能使用其他一些相当新的版本。

我使用以下脚本文件进行了测试,其中 X 应替换为目标驱动器的实际设备盘符。当然,您必须设置正确的分区数量及其大小。您可以通过交互运行来了解要使用的语法fdisk

#!/bin/bash

LANG=C

echo "g
n


+256m

n


+1g

n




w" | fdisk /dev/sdX

解释

以下列表不起作用(fdisk 不接受注释),但它有助于理解上面的脚本。

#!/bin/bash

LANG=C

echo "g     # gpt, GUID partition table
n           # new partition
            # default partition number
            # default start location
+256m       # size
            # default answer to partition name
n           # new partition
            # default partition number
            # default start location
+1g         # size
            # default answer to partition name
n           # new partition
            # default partition number
            # default start location
            # default end location at the drive's tail end
            # default answer to partition name
w           # write to the drive" | fdisk /dev/sdX

验证不会有“名称”

$ sudo partprobe;sleep 1;LANG=C sudo parted /dev/sdc p
Model: Kingston DataTraveler G3 (scsi)
Disk /dev/sdc: 4010MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End     Size    File system  Name  Flags
 1      1049kB  269MB   268MB
 2      269MB   1343MB  1074MB
 3      1343MB  4010MB  2667MB

相关内容