通过 bash 格式化磁盘并使用最大数量的柱面创建分区

通过 bash 格式化磁盘并使用最大数量的柱面创建分区

通常我们会使用 parted 或 fdisk 来创建新分区,但在本例中,我想在脚本中以非交互方式执行此操作。交互式 fdisk 会话如下所示:

# fdisk /dev/sdb
Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-13054, default 1): [[ENTER]]
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-13054, default 13054): [[ENTER]]
Using default value 13054

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
# fdisk -l /dev/sdb

Disk /dev/sdb: 107.4 GB, 107374182400 bytes
255 heads, 63 sectors/track, 13054 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x7a0ce571

    Device Boot      Start         End      Blocks   Id  System
/dev/sdb1                1       13054   104856223+  83  Linux

我能得到的最接近的结果如下,其中圆柱体没有排列到指定的最大值 13054:

# parted -s -- /dev/sdb mklabel msdos
# parted -s -- /dev/sdb mkpart primary ext3 1 -1
# fdisk -l /dev/xvdb

Disk /dev/sdb: 107.4 GB, 107374182400 bytes
255 heads, 63 sectors/track, 13054 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000d3807

    Device Boot      Start         End      Blocks   Id  System
/dev/sdb1                1       13055   104856576   83  Linux

因此,执行此操作的标准方法是使用 parted、向 fdisk 回显命令或使用传递给 sfdisk 的此处文档。还有其他方法可以使用最大数量的柱面创建单个分区吗?

编辑:看起来传递“-a cylinder”会导致 parted 的行为与 fdisk 完全相同。但是传递“-a optimal”是……基于磁盘拓扑最佳地?有人能解释一下吗?为什么 fdisk 与柱面对齐而不是“最佳地”对齐?

答案1

你可以通过输入重定向来实现。将所有指令放在一个文件中,像在 fdisk 中一样输入,然后像下面这样运行 fdisk

fdisk "$DISK" < 指令文件

我应该警告,这很有可能出错,要格外小心。

相关内容