出于QA的目的,我需要能够通过bash脚本为RHEL和SLES划分多达30个或更多的分区。
我试图通过一个“这里的文档”在BASH和fdisk中实现这一点,这个文档可以工作,但是您可以猜到在不同的步骤中爆炸。我认为这是因为输入命令在错误的时间发生和不同步所致。我的脚本每10次就有1次工作正常。
我看过parted和sfdisk,并不真正理解如何使用这些工具。
我只使用过fdisk。
我的问题是,使用fdisk,您可以一次又一次地声明“新分区+1gb”之类的内容,这对我来说是有效的,因为在我的脚本中,我不需要跟踪以前的分区或剩余空间,也不需要做任何计算。每次运行此函数时,都会从任何未使用的空间中生成一个额外的1gb分区。
是否有一种方法可以使用parted或sfdisk (或任何其他已经成为这些发行版一部分的工具),这样我就可以编写从1到x操作的循环,而不必计算剩余的空间了吗?有谁有他们可以分享的例子吗?
更新
这里是我的一个函数的例子。在脚本开始时,我们向用户询问要创建的分区的数量、分区的大小(对于所有人来说都是静态的)以及FS的类型(如果有的话)。这个函数创建分区1到3,然后一个不同的函数处理扩展(4),另一个处理5到nn。
正如我前面所说的,这个脚本是完全可用的;我的问题是,有时发送到fdisk的命令似乎到达了错误的时间,然后破坏了整个脚本,从而破坏了任何自动化。
所以命令是这样发送的:
n
p
1
+1M
w我一直在阅读fdisk,并且已经了解到它不适合编写脚本,所以我看到的是,在脚本模式下,fdisk可能会请求p,我的脚本已经认为是时候发送1了。
对我起作用的fdisk的问题是,在您指定分区号之后,已经计算出了下一个空闲扇区,所以现在我所要做的就是为我的开始发送一个空行,然后为我的总大小发送+1M。从我所能看出的情况来看,拆分和sfdisk似乎并不是这样工作的,我在这方面仍然非常新,以了解如何在此时自动化这些工具。
Create1to3Primary_Func() {
Size=\+$partSize\MB
for i in {1..3}
do
echo " this loop i= $i"
echo "Creating Partition $i on $targetFull as $targetFull$i using Create1to3Primary_Func()"
rm -f /tmp/myScript
echo -e "n" >> /tmp/myScript
echo -e "p" >> /tmp/myScript
echo -e "$i" >> /tmp/myScript
echo -e " " >> /tmp/myScript
echo -e "$Size" >> /tmp/myScript
echo -e "w" >> /tmp/myScript
echo -e "EOF" >> /tmp/myScript
fdisk $targetFull < /tmp/myScript
echo " sleeping Create1to3Primary_Func()"
sleep 4s
if [ "$RawOrFs" == "f" ]; then
mkfsCMD="mkfs.$fsType"
mkfsFullTarget="$targetFull$i"
cmdline="$mkfsCMD $mkfsFullTarget -L 'Partition$i'"
echo "Creating $fsType File System on $mkfsFullTarget"
$cmdline
fi
void="/mnt/mymnt$i"
if [ ! -d $void ] ; then
echo "Creating Mount Point /mnt/mymnt$i"
void="/mnt/mymnt$i"
mkdir $void
fi
echo "Part Probe on $targetFull "
partprobe $targetFull ; sleep 4s
done
}发布于 2012-08-28 11:55:34
不一定能得到真正想要的东西,但您可能感兴趣的是,sfdisk可以转储分区布局,并使用此布局对其他磁盘进行分区。例如:
sfdisk -d /dev/sda > mydiskpartitionslayout然后在脚本中(当然要注意),您可以指定
sfdisk /dev/sdx < mydiskpartitionslayout发布于 2016-10-08 17:55:55
sfdisk
sfdisk是fdisk的脚本版本
util-linux和fdisk一样,所以可用性应该是相同的。
可以使用以下方法创建包含整个磁盘的单个分区的分区表:
echo 'type=83' | sudo sfdisk /dev/sdX下面将解释更复杂的分区表。
若要生成示例脚本,请获取磁盘的设置:
sudo sfdisk -d /dev/sda > sda.sfdisk我的联想T430 Windows 7/ Ubuntu双引导的示例输出:
label: dos
label-id: 0x7ddcbf7d
device: /dev/sda
unit: sectors
/dev/sda1 : start= 2048, size= 3072000, type=7, bootable
/dev/sda2 : start= 3074048, size= 195430105, type=7
/dev/sda3 : start= 948099072, size= 28672000, type=7
/dev/sda4 : start= 198504446, size= 749594626, type=5
/dev/sda5 : start= 198504448, size= 618891264, type=83
/dev/sda6 : start= 940277760, size= 7821312, type=82
/dev/sda7 : start= 817397760, size= 61437952, type=83
/dev/sda8 : start= 878837760, size= 61437500, type=83将脚本保存到文件中后,可以使用以下方法将其应用于sdX:
sudo sfdisk /dev/sdX < sda.sfdisk对于sfdisk输入,可以省略设备名称,并使用类型行:
start= 2048, size= 3072000, type=7, bootable如果存在,它们就会被忽略,设备名称将从命令行参数中获取。
一些解释:
label:分区表的类型。(MBR)是旧的,被广泛支持的,gpt是新的闪亮的东西。unit:只支持sector。1扇区通常等于512字节。在cat /sys/block/sda/queue/hw_sector_size中查找也请参阅:https://unix.stackexchange.com/questions/2668/finding-the-sector-size-of-a-partitiondevice:我认为信息丰富
- `start`: offset inside the disk at which the partition starts.start具有非常好的缺省值,并且通常可以:
- on the first line, `start` is 2048, i.e. 1Mb (2048 + 512), which is a sane default for disk compatibility
- further `start` default to the first unallocated position
- `size`: `man sfdisk` says: `The default value of size indicates "as much as possible"`. So to fill the disk with a single partition use: `/dev/sda : start=2048, type=83`
- `type`: magic byte stored on the boot sector for each [partition entry](https://en.wikipedia.org/wiki/Master_boot_record#PTE). Possible values: [https://en.wikipedia.org/wiki/Partition\_type](https://en.wikipedia.org/wiki/Partition_type) On this example we observe:
- `7` (`sda1`, `2` and `3`): filesystems that Windows supports. Preinstalled Windows stuff and Lenovo recovery partitions. `sudo blkid` labels help identify them.
- `5` (`sda4`): extended primary partition, which will contain other logical partitions (because we can only have 4 primary partitions with MBR)
- `83`(`sda5`, `7`, and `8`): partitions which Linux supports. For me one `home`, and two roots with different Ubuntu versions
- `82` (`sd6`): swap
fdisk还可以使用I命令读取sfdisk脚本,该命令在交互式fdisk会话期间“源”它们,允许您在编写分区之前进行进一步的定制。
在Ubuntu16.04,sfdisk 2.27.1上测试。
在没有sudo的情况下,格式化并填充图像文件的分区
这是一个学习使用sfdisk而不炸毁硬盘的好方法:如何创建没有根权限的多分区SD磁盘映像?
发布于 2015-09-29 17:56:37
我喜欢的一种方法(我在这篇文章中看到过)是直接“编写”fdisk输入的脚本,因为它比sfdisk更聪明地创建分区“直到磁盘的末尾”或“2GB大”。示例:
echo "d
1
d
2
d
3
n
p
1
+2G
n
p
2
w
" | fdisk /dev/sda该脚本删除最多3个现有分区,创建一个2GB分区(例如交换),然后创建一个将扩展到剩余磁盘空间的分区。
相反,如果在sfdisk中创建并使用分区布局,则如果有更多的空间可用,脚本将不会覆盖整个磁盘。
https://stackoverflow.com/questions/12150116
复制相似问题