parted + 在Linux中仅按百分比创建磁盘分区是否正确

parted + 在Linux中仅按百分比创建磁盘分区是否正确

我们想通过parted命令从每个新磁盘创建2个分区

如下例:

sdg                  8:96   0    50G  0 disk
├─sdg1               8:97   0    25G  0 part
└─sdg2               8:98   0    25G  0 part

如上面的示例,磁盘大小为 50G,我们希望为每个磁盘创建 2 个分区

我们通过以下方法做到这一点

parted --script /dev/sdg mklabel msdos
parted --script /dev/sdg mkpart primary 0% 50%
parted --script /dev/sdg mkpart primary  50% 100%

为了创建所请求的 2 个分区,以上是否正确?具有相同尺寸

我问这个是因为我使用值 as0% 50%100%,而不是给出 GB 中的值

注意 - 其他相关链接 https://askubuntu.com/questions/507274/how-to-create-two-partitions-with-exactly-the-same-size

答案1

与往常一样,首先应该从您的计算机上可用的文档开始man parted

mkpart [part-type name fs-type] start end创建一个新分区。part-type只能用msdos和分区表来指定,它应该是、或dvh之一。对于 GPT 分区表是必需的,并且 是可选的。可以是, , , , , , , , , , , ,或之一。primarylogicalextendednamefs-typefs-typebtrfsext2ext3ext4fat16fat32hfshfs+linux-swapntfsreiserfsudfxfs

没有任何内容startend因此我们需要进一步搜索该文档。最终我们发现:

unit unit将单位设置为显示位置和大小时使用的单位,以及在不带有明确单位后缀时解释用户给出的单位。可以是(扇区)、(字节)、、、、、、(设备大小的百分比)、(柱面)、 (柱面、磁头、扇区)或(用于输入的 兆字节,以及人类友好的形式unit之一)用于输出)。sBkBMBMiBGBGiBTBTiB%cylchscompact

这实际上是为了unit而不是mkpart但事实证明它还定义了所有测量的可用单位类型(“解释用户给出的未带有明确单位后缀的内容”)。

您使用磁盘百分比来确定分区大小。我无法使用 0% / 50% / 100% 来给我两个相同大小的分区,因此我建议您将它们指定为精确大小。

# Identify disk OR see the next step for a test scenario
dsk=/dev/sdg

# If you prefer, try with this loopback device
dd if=/dev/zero bs=1M count=1024 >/tmp/img
dsk=$(losetup --show --find /tmp/img)

# Create partition table on target disk/device
parted --script "$dsk" mklabel msdos

# MiB on the disk
mib=$(parted "$dsk" unit MiB print | awk '/^Disk/{print $NF+0; exit}')
printf "Size of %s is %d MiB\n" "$dsk" $mib

# Two identically sized partitions using the entire disk
psz=$((mib/2 -1))
printf "Partition size is %d MiB\n" $psz

parted "$dsk" unit MiB mkpart primary 1 $((1+psz))
parted "$dsk" unit MiB mkpart primary $((1+psz)) $((1+psz +psz))

# Show what we have (change "s" to "MiB" for better readability)
parted "$dsk" unit s print

顺便说一句,这是我使用基于百分比的分配的结果。如您所见,分区是几乎大小相同,但不精确:

dd if=/dev/zero bs=1M count=1024 >/tmp/img
dsk=$(losetup --show --find /tmp/img)
parted --script "$dsk" mklabel msdos
parted "$dsk" mkpart primary 0% 50%      # Notice 0% isn't sector zero
parted "$dsk" mkpart primary 50% 100%
parted "$dsk" unit s print               # Count by sectors

Model: Loopback device (loopback)
Disk /dev/loop0: 2097152s
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:

Number  Start     End       Size      Type     File system  Flags
 1      2048s     1048575s  1046528s  primary
 2      1048576s  2097151s  1048576s  primary

相关内容