首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sfdisk:从右边创建一个分区

sfdisk:从右边创建一个分区
EN

Ask Ubuntu用户
提问于 2022-02-22 16:18:22
回答 1查看 852关注 0票数 0

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

代码语言:javascript
复制
echo -en 'g\nw' | fdisk "$2" #create gpt table
echo -en ',1331200\n,,U' | sudo sfdisk "/dev/sda" -W always

最后一个命令创建左分区650 as,右分区占据磁盘的其余部分,但正如我已经指定的,这不是我所需要的。要创建650‘d的右分区和占据磁盘其余部分的左侧分区,我想我应该这样做:

代码语言:javascript
复制
echo -en ',-1331200\n,,U' | sudo sfdisk "/dev/sda" -W always

认为负值是从右边开始的,但是相反,-符号被完全忽略了,并且命令具有与没有-符号的命令相同的效果。

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

EN

回答 1

Ask Ubuntu用户

回答已采纳

发布于 2022-02-24 00:19:09

sfdisk文档中,我没有看到任何表明它支持负相对值的东西。计算分区起始位置是否有效?

我将使用一个模拟2GB磁盘的稀疏回送文件演示

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

通过从磁盘末尾减去650 by,可以找到650 by分区的起始位置。$(blockdev --getsize64 /dev/loop6) / 1024提供KiB中磁盘的大小。650 * 1024是KiB中的650 KiB。把它放在一起,找出第一个分区要使用多少个KiB。

代码语言:javascript
复制
root@ubuntu:~# echo $(( $(blockdev --getsize64 /dev/loop6) / 1024 - (650 * 1024) ))
1431552

当使用sfdisk创建分区时,可以直接使用此值。

代码语言:javascript
复制
root@ubuntu:~# sfdisk /dev/loop6 < 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
...

您还可以动态地计算值。

代码语言:javascript
复制
root@ubuntu:~# wipefs -a /dev/loop6
...
root@ubuntu:~# sfdisk /dev/loop6 < 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
...

前面的示例首先创建了650 The分区。这可能有点混乱,因为分区不是按照典型的顺序排列的。您可以首先创建“磁盘的其余部分”分区,以避免混淆。

代码语言:javascript
复制
root@ubuntu:~# wipefs -a /dev/loop6
...
root@ubuntu:~# sfdisk /dev/loop6 < 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
...
票数 1
EN
页面原文内容由Ask Ubuntu提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://askubuntu.com/questions/1394337

复制
相关文章

相似问题

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