我想创建具有指定大小的分区 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
...