sfdisk:从右侧创建分区

sfdisk:从右侧创建分区

我想创建具有指定大小的分区 2,而分区 1 占用磁盘的剩余部分:

echo -en 'g\nw' | fdisk "$2" #create gpt table
echo -en ',1331200\n,,U' | sudo sfdisk "/dev/sda" -W always

最后一个命令创建了 650MB 的左分区和占用剩余磁盘空间的右分区,但正如我已经指出的,这不是我需要的。要创建 650MB 的右分区和占用剩余磁盘空间的左分区,我想我应该这样做:

echo -en ',-1331200\n,,U' | sudo sfdisk "/dev/sda" -W always

认为负值从右边开始,但实际上符号-被完全忽略,该命令与没有符号的命令具有同样的效果-

如何使用从右侧开始创建分区sfdisk

答案1

我在文档中没有看到任何内容sfdisk表明它支持负相对值。它可以计算分区起始位置吗?

我将演示如何使用稀疏环回文件模拟 2GB 磁盘

root@ubuntu:~# fallocate -l 2G filesystem.img
root@ubuntu:~# losetup -f filesystem.img
root@ubuntu:~# losetup -a | grep filesystem.img
/dev/loop6: [2049]:20 (/root/filesystem.img)

可以通过从磁盘末尾减去 650MB 来找到 650MB 分区的起始位置。 $(blockdev --getsize64 /dev/loop6) / 1024提供磁盘大小(以 KiB 为单位)。 650 * 1024以 KiB 为单位为 650MiB。将其放在一起即可找出第一个分区要使用多少 KiB。

root@ubuntu:~# echo $(( $(blockdev --getsize64 /dev/loop6) / 1024 - (650 * 1024) ))
1431552

创建分区时可直接使用此值sfdisk

root@ubuntu:~# sfdisk /dev/loop6 <<EOF
> label: gpt
> 1431552KiB,,,-
> ,,,-
> EOF
...
New situation:
Disklabel type: gpt
Disk identifier: 77816CA7-8A39-974B-A78D-CFCB2A5D66EC

Device         Start     End Sectors  Size Type
/dev/loop6p1 2863104 4194270 1331167  650M Linux filesystem
/dev/loop6p2    2048 2863103 2861056  1.4G Linux filesystem
...

你也可以动态计算值

root@ubuntu:~# wipefs -a /dev/loop6
...
root@ubuntu:~# sfdisk /dev/loop6 <<EOF
> label: gpt
> $(( $(blockdev --getsize64 /dev/loop6) / 1024 - (650 * 1024) ))KiB,,,-
> ,,,-
> EOF
...
New situation:
Disklabel type: gpt
Disk identifier: 661C7E48-3342-3842-81BE-1AF4CB51BC6E

Device         Start     End Sectors  Size Type
/dev/loop6p1 2863104 4194270 1331167  650M Linux filesystem
/dev/loop6p2    2048 2863103 2861056  1.4G Linux filesystem
...

前面的示例首先创建了 650MB 分区。这可能会有点令人困惑,因为分区的顺序并不典型。您可以先创建“剩余磁盘”分区以避免混淆。

root@ubuntu:~# wipefs -a /dev/loop6
...
root@ubuntu:~# sfdisk /dev/loop6 <<EOF
> label: gpt
> ,$(( $(blockdev --getsize64 /dev/loop6) / 1024 - (650 * 1024) ))KiB,,-
> ,,,-
> EOF
...
New situation:
Disklabel type: gpt
Disk identifier: 3EF08C46-AF4F-1F48-B8AF-A65D67C438B7

Device         Start     End Sectors  Size Type
/dev/loop6p1    2048 2865151 2863104  1.4G Linux filesystem
/dev/loop6p2 2865152 4194270 1329119  649M Linux filesystem
...

相关内容