VM やクラウドをいじっているとき、インスタンスに割り当てるディスクを増やしたものの起動したイメージでドライブサイズが決まってしまい後ろが未使用のまま空いているという場面に良く出会います。
このような時の解決方法は環境によってさまざまなのですが、最近私がよくやっている手順が
- fdisk で新しいパーティションを作り後ろの空きをすべて割り当てる
- 作成した新しいパーティションを LVM にする
- 既存の LVM に新しいパーティションをくっつける
というものです。
あまりにもよくやる手順なのでシェルスクリプトにまとめてみました。
# !/bin/bash
DEVICE=/dev/sda
ADDDEVICE=debian-vg
ADDDRIVE=/dev/debian-vg/root
SMAX=`fdisk -l ${DEVICE} | awk '$0 ~ /sectors$/ {print $7-1}'`
SMIN=`fdisk -l ${DEVICE} | awk '$0 ~ /^\/dev/ {if(m<$3) m=$3} END{print m+1}'`
echo 'free area '${SMIN}' - '${SMAX}
parted -s -a optimal ${DEVICE} -- mkpart P${PART} ${SMIN}s ${SMAX}s
PART=`parted -s ${DEVICE} print | awk '$1 ~ /^([0-9]+)/ {if(m<$3) m=$3;n=$1} END{print n}'`
parted -s ${DEVICE} set ${PART} lvm on
echo 'create device '${DEVICE}${PART}
pvcreate ${DEVICE}${PART}
vgextend ${ADDDEVICE} ${DEVICE}${PART}
lvextend -l +100%FREE ${ADDDRIVE}
resize2fs ${ADDDRIVE}
ADDDEVICE が追加先の LVM VG 名、ADDDRIVE が追加先のドライブデバイス名になります。
これらはあらかじめ編集して指定しておきます。