ディスクを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/vdb
2つの同じパーティション/ 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