出于 QA 的目的,我需要能够通过 bash 脚本为 RHEL 和 SLES 分区多达 30 个或更多分区的驱动器。
我试图通过一个“here document”在 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。据我所知,Parted 和 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
}