はじめに
ESXiホスト上で特定のVMを別のディレクトリにコピーし,元のVMを削除するシェルスクリプトを紹介します.このスクリプトは,システム管理者がVMの管理を効率的に行うために役立ちます.
必要なツール
・ESXiホスト
・シェルスクリプト
シェルスクリプトの概要
このスクリプトは,以下の手順で特定のVMを処理します.
1. 指定されたVMの電源状態を確認し,必要に応じて電源をオフにします.
2. VMのディレクトリをコピー先にコピーします.
3. コピーが完了したらコピー元のVMを登録解除して削除します.
スクリプト
以下は,特定のVMを処理するシェルスクリプトです.
#!/bin/bash
# 引数の確認
if [ $# -ne 1 ]; then
echo "使用法: $0 <VM名>"
exit 1
fi
# VM名の取得
VM_NAME=$1
# コピー先ディレクトリ
COPY_DEST="コピー先ディレクトリ指定"
VM_SOURCE_DIR="コピー元ディレクトリ指定"
echo "VMの処理中: $VM_NAME"
# VMの状態をチェック
VM_ID=$(vim-cmd vmsvc/getallvms | grep -w "$VM_NAME" | awk '{print $1}')
if [[ -z "$VM_ID" ]]; then
echo "VMが見つかりません: $VM_NAME"
exit 1
fi
POWER_STATE=$(vim-cmd vmsvc/power.getstate $VM_ID | tail -1)
if [[ "$POWER_STATE" == "Powered on" ]]; then
echo "VMが起動しているため,今から電源を切断します: $VM_NAME"
vim-cmd vmsvc/power.off $VM_ID
if [[ $? -ne 0 ]]; then
echo "VMの電源をオフにできませんでした: $VM_NAME"
exit 1
fi
fi
# VMディレクトリをコピー先にコピー
VM_DIR="$VM_SOURCE_DIR/$VM_NAME"
DEST_DIR="$COPY_DEST/$VM_NAME"
echo "コピー中 $VM_DIR から $DEST_DIR へ"
cp -r $VM_DIR $DEST_DIR
if [[ $? -ne 0 ]]; then
echo "VMディレクトリをコピーできませんでした: $VM_NAME"
exit 1
fi
echo "正常にコピーされました: $VM_NAME"
# コピー元VMを削除する
echo "コピー元のVMを削除中: $VM_NAME"
rm -rf $VM_DIR
if [[ $? -ne 0 ]]; then
echo "VMを削除できませんでした: $VM_NAME"
exit 1
fi
echo "VMのコピーと削除が完了しました。"
使い方
スクリプトをファイルに保存します.例えば,vm_copy.shという名前にします.
注意 これをしないと実行できません.
実行権限を付与します:
chmod +x vm_copy.sh
VM名を引数にしてスクリプトを実行します:
./vm_copy.sh VM名
実行結果
VMの処理中: exampleVM
VMが起動しているため,今から電源を切断します: exampleVM
Powering off VM: exampleVM
コピー中 /vmfs/volumes/datastore1/exampleVM から /backup/exampleVM へ
正常にコピーされました: exampleVM
コピー元のVMを削除中: exampleVM
VMのコピーと削除が完了しました。
exampleVMというVMを処理を行った場合このように実行されます.
まとめ
このシェルスクリプトを使うことで,ESXiホスト上の特定のVMを効率的に管理できます.不要になった元のVMを自動で削除することで,ストレージの最適化にも貢献します.