シェルスクリプトでディスクを2つの同じパーティションに分割する

シェルスクリプトでディスクを2つの同じパーティションに分割する

ディスクを2つの同じパーティションに分割しようとしています。これまで、fdiskコマンドを使用してすべての操作を手動で実行し、2つのパーティションのUUIDでfstabファイルを変更し、これを実行できるシステムが約70台あります。シェルスクリプトを使用して自動化する方法はありますか?各コンピュータですべての操作を手動で実行したくありません。

Filesystem      Size  Used Avail Use% Mounted on
/dev/vda         30G  1.4G   27G   5% /
none            4.0K     0  4.0K   0% /sys/fs/cgroup
udev             60G   12K   60G   1% /dev
tmpfs            12G  384K   12G   1% /run
none            5.0M     0  5.0M   0% /run/lock
none             60G     0   60G   0% /run/shm
none            100M     0  100M   0% /run/user
/dev/vdb        2.4T   72M  2.2T   1% /mnt

/dev/vdb2つの同じパーティション/ data01と/ data02に分割したいと思います。 1つのシェルスクリプト内のすべてを使用してこれを行う最善の方法は何ですか?私はこれらのすべてのコンピュータにrootアクセス権を持ち、Ubuntu 14.04ボックスを持っています。

答え1

これが純粋にLinux用の場合(KVMの仮想ディスクなのでそうです)、以下を使用してください。左心室容積。 LVMは、基本的なパーティション化よりも使いやすく柔軟性がありますが、Linux以外のオペレーティングシステムでは理解できないという欠点があります。これはエラーチェックなしで必要なもののポイントです。物理ボリュームの作成ディスクの真向かいに、ボリュームグループの作成対応する物理ボリュームのみを含み、2 つの論理ボリュームの作成それぞれにスペースの半分が含まれています(丸めの問題が発生しないように、最後のボリュームのサイズをまだ使用可能なスペースとして表しました)。

pvcreate /dev/vdb
vgcreate mydisk /dev/vdb
lvcreate -n data01 -l 50%VG mydisk
lvcreate -n data02 -l 100%FREE mydisk
echo '/dev/mydisk/data01 /data01 auto defaults' >>/etc/fstab
echo '/dev/mydisk/data02 /data02 auto defaults' >>/etc/fstab

答え2

ディスクセクタサイズが512バイトであると仮定すると、これがうまくいくと思います(sfdiskが必要です)。

#!/bin/bash
DISK=/dev/sdb
OFFSET=2048
SIZE=$(( ($(sfdisk -s $DISK) * 2 - $OFFSET) / 2 ))
POS_MAX_P1=$(( $SIZE + $OFFSET - 1 ))
POS_MIN_P2=$(( $POS_MAX_P1 + 1 ))
PART_TYPE=83     // Here you can change the type of the partitions

LAYOUT="2048,$POS_MAX_P1,$PART_TYPE\n$POS_MIN_P2,,$PART_TYPE"

echo -e $LAYOUT | sfdisk $DISK
partprobe $DISK
echo -e "/dev/sdb1\t/data01\tauto\t0 1\n/dev/sdb2\t/data02\tauto\t0 1\n" >> /etc/fstab

関連情報