QA の目的で、RHEL と SLES の両方で、bash スクリプトを使用してドライブを最大 30 以上のパーティションに分割できる必要があります。
「ヒアドキュメント」を介してfdiskを使用してBASHでこれを実行しようとしましたが、これは機能しますが、さまざまな手順で失敗すると推測できます。これは、入力コマンドのタイミングが間違ったタイミングで発生し、同期がずれているためだと思います。私のスクリプトは 10 回に 1 回は正しく動作します。
parted と sfdisk を見てきましたが、これらのツールの使い方がよくわかりません。
私は fdisk しか使ったことがありません。
私の問題は、fdisk を使用すると、「新しいパーティション +1gb」のようなものを何度も指定できることです。スクリプトでは、以前のパーティションや残りのスペースを追跡したり、計算を行ったりする必要がないため、これはうまくいきます。この関数を実行するたびに、未使用のスペースから追加の 1 GB パーティションが作成されます。
parted または sfdisk (またはこれらのディストリビューションに既に含まれているその他のツール) を使用して、残りのスペースを計算しなくても 1 から x までのループをスクリプト化する方法はありますか? 共有できる例はありますか?
アップデート
これは私の関数の1つの例です。スクリプトの開始時に、作成するパーティションの数、それらのサイズ (これはすべて静的です)、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
}