如何编写使用整个设备的单个分区的脚本?


9

我专门使用它在Amazon EC2实例上分区和挂载EBS卷,但实际上,这通常应适用于初始化任何新驱动器。

如问题所述,我想编写一个脚本来创建单个主分区,该分区使用给定设备上的所有可用空间。我不会提前知道设备有多大,而且可能会非常大(即几TB)。

在研究这方面,似乎parted是用于脚本编写的最佳命令。我认为parted /dev/sdf mkpart primary 0 END是我想要的东西,但是我很难确定一种优雅的方法来确定END应该是什么。有人知道这样做的简单方法吗?

Answers:



5

尝试使用其他答案时遇到了问题。对我有用的是改用这样的百分比方法:

$ parted /dev/sdf --script -- mkpart primary 0% 100%

parted分区对齐问题及其处理方式。这2篇文章讨论了这个问题:

这些文章中概述的数学在我的情况下根本行不通。埋在第二个注释中的一个注释中,链接使用百分比建议的某人,但确实起作用。

顺便说一句,您通常也需要标记HDD。要通过CLI通过parted以下方式做到这一点:

$ parted /dev/sde --script -- mklabel msdos

-要么-

$ parted /dev/sde --script -- mklabel gpt

取决于您的硬盘。


gdisk正确对齐。我认为parted是一团糟。它做的太多了-它所做的事情只是松散地联系在一起。它是如何一起创建文件系统和分区表的,这很奇怪-它写入的数据的磁盘位置与在同一社区中的情况完全不同。当我意识到分区表是一个位于表头的小映射时,我才开始理解磁盘是如何工作的,它告诉os如果愿意,它会在哪里寻找文件系统。当点击时,我理解了超级街区和超人以及所有这些。好吧,我还是这么想。
mikeserv

谢谢,在这个领域中工具的位置对我而言始终是一团糟。我经常混用sfdisk,fdisk,cfdi​​sk,parted等。我将尝试使用fdisk,看看是否更简单。主要是从cli选项中寻找易于运行的脚本,以使其包含在脚本中。
slm

基本上[gf]disk不区分标准输入-他们不在乎是否来自termInal。因此,您将以交互方式输入以获取所需内容的任何命令序列都可以直接翻译为printf脚本。我回答中的所有换行符只是(or press enter for default)选项。很简单 当我玩瓦特/他们,我只是去/tmpfallocate -l1g img,然后只用我的新/tmp/img文件作为我的磁盘-他们根本不在乎。他们只想写一个分区表。如果执行相同操作,请查看strings -1 img偶尔发生的情况。
mikeserv

但是我之前在撒谎-超人对我来说仍然很神秘。也许他总是会的。
mikeserv

1
parted /dev/sdf --script -- mkpart primary 0 -1我得到一个警告不以获得最佳性能一致。它的百分比很好
nachoparker

2

你可以做...

printf 'n\n\n\n\n\nw\n' | fdisk /dev/disk

...对于msdos类型。几乎相同的东西适用于gpt ...

printf 'n\n\n\n\n\nw\ny\n' | gdisk /dev/disk

您可以在文件系统创建期间标记磁盘。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.