分开的有效参数

时间:2012-05-09 15:44:58

标签: disk-partitioning

我一直在阅读 parted man page,但似乎无法找到有关有效参数的任何文档。我正在尝试将具有特定分区大小的USB CompactFlash分区(无论CF大小如何)。但我想确保我的对齐完全正确和最佳。

例如,当我使用以下命令时:

parted -s -a optimal $DEV mkpart primary ext3 1 1600
parted -s -a optimal $DEV mkpart primary ext3 1600 3200
parted -s -a optimal $DEV mkpart primary ext3 3200 3600

目前尚不清楚第一个分区是否应为1或0?我得到的唯一提示是它应该从1开始而不是从0开始:

parted /dev/sdc align-check optimal 1

这告诉我它在从1开始时是对齐的而在从0开始时没有对齐。但是当我从1开始并且我做'打印'时,开始是1049kB ......这是正常的吗?当我转储由其他工具创建的打印分区时,我发现它们从32kB开始。如果我使用0的开头,它会输出512kB的开头。哪个是对的,我不知道!

此外,我在网络上看到很多例子,他们使用第二个和第三个分区的起始值作为它前面分区的结束值(即:1600和3200值)。我们假设重叠或增量为1吗?手册页对此没有任何说明。我已经看过一些网页,他们说这个网页的错误与最后一次的价值相同。

当我使用'-a optimal'时,它似乎甚至不会影响我的分区。不使用对齐标志似乎产生相同的结果。这是为了什么目的?有什么我想念的吗?

我真的希望分手会更聪明,不需要一个开始,而是可以推断自己。实际上很多人似乎都需要这个确切的功能,所以我不是唯一有这种需求的奇怪球。希望那里的一些极客会看到这种需求,并实际将其添加为一个功能。

请注意,我正在使用自动构建脚本,这就是我使用'-s'标志的原因。

如果有人能在这方面给我启发,我将非常感谢...提前感谢!

1 个答案:

答案 0 :(得分:18)

我认为你在这里提出了几个有趣的问题,可惜之前没有人回答过,所以我会试着去做。


  

目前尚不清楚第一个分区是否应为1或0?

第一个分区start必须为1,因为磁盘的第一个字节包含主引导记录和某些磁盘标签的结构,例如MS-DOS。因此,如果您使用值0作为第一个分区启动,libparted将在磁盘的开头留下几个字节以允许此内容,将分区的开头紧接在第一个扇区之后。


  

起点是1049kB ......这是正常的吗?

这很正常。为了解释这一点,首先你必须知道,对于libparted,千字节不等于1024字节,而是等于1000字节。

KB = KiloByte = 1000Bytes
KiB = KibiByte = 1024Bytes

更多信息:
http://en.wikipedia.org/wiki/Kilobyte
http://www.gnu.org/software/parted/manual/html_node/unit.html

如果将单位更改为字节,则分区偏移量以KB(千字节)为单位,其值为近似值:

parted /dev/sdf unit b print

你会看到真正的价值:1048576B这是1MiB(1048576B~ = 1049KB),正是你想要的。


  

我看到他们从32kB开始

是的,分区的起始频率为32KB,因为您使用的工具可能太旧,并且您正在使用512字节扇区大小的磁盘。分区的实际起始偏移量可能是32256,对应于扇区63。多年前,分区工具将第一个分区的起点放在第63个扇区,以使其与旧的CHS几何体对齐。这太长了,无法解释,但我建议您阅读此链接以获取更多详细信息:

https://superuser.com/questions/352572/why-does-the-partition-start-on-sector-2048-instead-of-63 http://lwn.net/Articles/377895/


  

如果我使用0的开头,它会打印一个512kB的开始

我认为它打印的开头是512B,而不是KB,我错了吗? 在你的512字节扇区的磁盘中,第一个扇区以偏移511结束,所以就像我上面告诉你的那样,第一个分区在第一个扇区之后开始。


  

我们假设重叠或增量为1?

我将单位更改为字节,您将看到分区的实际位置,并可以检查它们是否重叠。


  

这是为了什么目的?有什么我想念的吗?

这是因为,默认情况下,parted适用于MiB。当您输入:

parted -s -a optimal $DEV mkpart primary ext3 1 1600

您要求分开在MiB#1和#1600对应的偏移之间创建分区。与MiB对齐的偏移始终对齐以获得最佳性能,因此无需指定-a optimal。如果将单位更改为字节,则可以创建不对齐的分区:

parted $DEV unit b mkpart primary 1000000 160MB
parted $DEV align-check optimal 1

它显示错误:The resulting partition is not properly aligned for best performance.

因此,尝试对-a none选项执行相同的操作:

parted -a none $DEV unit b mkpart primary 1000000 160MB

现在没有错误,这是此选项的目的。


  

我真的希望分手会更聪明,不需要   开始,但可以自己推断它。

我认为该功能将由任何使用libparted的工具实现,但我认为在库中没有必要......但谁知道呢?也许一些libparted开发人员正在听...你试图发送错误报告吗? bug-parted@gnu.org