つぶねこ

@もじらもーど。
↑recent | ↓old | 20 index | 100 index | 300 index | 記事5件 | 記事10件 | 記事20件 |最新5件 |FAQ | カテゴリ一覧 | Index |
2009/11/17 0:24
さいきんのESX4用バックアップスクリプトメモ

 いろいろ溜まってきたのでメモ。
ds2fullpath (){
sed -e 's/\[\([^]]\+\)\] \([^[ ]\+\)/\/vmfs\/volumes\/\1\/\2/'
}
get_ds_from_path (){
sed -e 's/\/vmfs\/volumes\/\([^\/]\+\)\/.*/\1/'
}
inner_quote (){
sed -e 's/[^"]*"\(.*\)".*/\1/'
}
get_allvms_vmid_name (){
vim-cmd vmsvc/getallvms | sed -e 's/\[.*\] .*//' -e 's/ \+$//' -e 's/\([0-9\]\+\) \+\(.*\)/\1 "\2"/' |
awk 'NR!=1'
}
get_allvms_vmid_datastore (){
vim-cmd vmsvc/getallvms | sed -e 's/\([0-9\]\+\) \+.* \+\[\(.*\)\] \(.*\/.*\.vmx\) \+.*/\1 "\2" "\3"/' |
awk 'NR!=1'
}
get_allvms_vmid_vmxpath (){
vim-cmd vmsvc/getallvms | sed -e 's/\([0-9\]\+\) \+.* \+\[\(.*\)\] \(.*\/.*\.vmx\) \+.*/\1 "[\2] \3"/' |
ds2fullpath |
awk 'NR!=1'
}
get_vmid_from_name (){
get_allvms_vmid_name | grep \"$1\" |awk '{print $1}'
}
get_vmxpath_from_vmid (){
get_allvms_vmid_vmxpath | awk '/^'$1' /{print $2}' | sed -e 's/^\"//' -e 's/\"$//'
}
get_vmxpath_from_name (){
vmid=`get_vmid_from_name $1`
get_vmxpath_from_vmid ${vmid}
}
get_vmsdpath_from_vmid (){
get_vmxpath_from_vmid $1 | sed -e 's/\.vmx$/.vmsd/'
}
get_datastore_from_vmid (){
get_allvms_vmid_datastore | awk '/^'$1' /{print $2}' | sed -e 's/^\"//' -e 's/\"$//'
}
get_vmname_from_vmid (){
get_allvms_vmid_name | grep "^$1 " | sed -e 's/.*"\(.*\)".*/\1/'
}
get_vmdk_data_file_from_vmdk (){
test -f "$1" || return
f=$(grep " \".*\.vmdk\"$" $1 | grep -v parentFileNameHint | sed -e 's/.* "\(.*\)"$/\1/')
echo "$f"|grep ^/ >/dev/null && echo "$f"
echo "$f"|grep ^/ >/dev/null || echo "`dirname "$1"`/$f"
}
is_there_snapshot (){
vmid=$1
snapshot_name=$2
vim-cmd vmsvc/snapshot.get $vmid | grep "\-\-Snapshot Name" | sed -e 's/-\+Snapshot Name \+: //' |
grep "$snapshot_name" >/dev/null
}
remove_last_snapshot (){
vmid=$1
if [ "`get_vmxpath_from_vmid $vmid`" = "" ] ; then return 255 ; fi
lv=`vim-cmd vmsvc/snapshot.get $vmid |grep CHILD |wc -l`
vim-cmd vmsvc/snapshot.remove $vmid 0 $lv
}
get_alltaskids (){
vim-cmd vimsvc/task_list | grep vim.Task: | sed -e 's/.*vim.Task://' -e 's/,//' -e "s/'//"
}
get_taskids_from_vmid (){
vim-cmd vimsvc/task_list | grep vim.Task:haTask-$1 | sed -e 's/.*vim.Task://' -e 's/,//' -e "s/'//"
}
filter_running_taskids (){
while read taskid ; do
is_task_running $taskid && echo $taskid
done
}
get_running_alltaskids (){
get_alltaskids | filter_running_taskids
}
get_running_taskids_from_vmid (){
get_taskids_from_vmid $1 | filter_running_taskids
}
get_taskname_from_taskid (){
vim-cmd vimsvc/task_info $taskid | grep "name = " | sed -e 's/.*"\(.*\)".*/\1/'
}
is_there_running_task_vmid (){
get_running_taskids_from_vmid $1 | grep .
}
is_task_running (){
taskid=$1
vim-cmd vimsvc/task_info $taskid | grep 'state = "running",' >/dev/null
}
wait_while_task_running_vmid (){
while : ; do
taskid=`get_running_taskids_from_vmid $1 | head -1`
if [ "$taskid" == "" ] ; then break ; fi
echo waiting `get_vmname_from_vmid $1` `get_taskname_from_taskid $taskid`
sleep 3
done
}
path_r2a (){
echo `cd "$1" && pwd`
}
path_cut (){
src_dir=`path_r2a "$1"`
file=$2
basedir=$(dirname "$src_dir")
c=$(echo "$basedir" | wc -c)
echo "$file" | cut -c ${c}- | sed -e 's/^\///'
}
cp_dir_sparse (){
cp_prog=$1
SRC=`path_r2a "$2"`
DST=`echo "$3" | sed -e 's/\/$//'`
find "$SRC" -type f | while read a ; do
$cp_prog "$a" $DST/`path_cut "$SRC" "$a"`
done
}
get_datafiles_from_filelayout_with_vmdk_data (){
get_datafiles_from_filelayout $1 |
while read a ; do
echo "$a"
echo "$a"|grep \.vmdk$ >/dev/null && get_vmdk_data_file_from_vmdk "$a"
done
}
get_datafiles_from_filelayout (){
vim-cmd vmsvc/get.filelayout $1 |
grep "\"\[.*\] .*\..*\"" |
inner_quote |
ds2fullpath
}
get_vmx_dir (){
d=`get_vmxpath_from_vmid $1`
dirname "$d"
}
get_logfile_dir (){
vim-cmd vmsvc/get.filelayout $1 |sed -e 's/^ \+//'| grep "^logDirectory *=" | inner_quote | ds2fullpath
}
get_logfiles_from_filelayout (){
d=`get_logfile_dir $1`
vim-cmd vmsvc/get.filelayout $1 | sed -e ':a;$!N;$!b a;s/\n//g' |
sed -e 's/.*,.*logFile *=[^\[]\+\[\([^]]*\)\].*/\1/' -e 's/",/"\n/g' |
inner_quote |
while read a ; do
echo "$d/$a"
done
}
get_configfiles_from_filelayout (){
d=`get_vmx_dir $1`
vim-cmd vmsvc/get.filelayout $1 |
sed -e ':a;$!N;$!b a;s/\n//g' |
sed -e 's/.*,.*configFile *=[^\[]\+\[\([^]]*\)\].*/\1/' -e 's/",/"\n/g' |
inner_quote |
while read a ; do
echo "$d/$a"
done
}
get_allfiles_from_filelayout (){
sub (){
get_configfiles_from_filelayout $1
get_logfiles_from_filelayout $1
get_datafiles_from_filelayout_with_vmdk_data $1
}
sub $1 | sort | uniq
}
vmname="$1"
backupdir="$2"
copy_p="python -u cp_sparse.py"
vmid=`get_vmid_from_name "$vmname"`
vmx="`get_vmxpath_from_vmid $vmid`"
vmsd="`get_vmsdpath_from_vmid $vmid`"
vim-cmd vmsvc/snapshot.create $vmid __backup __backup 1 1
wait_while_task_running_vmid $vmid
vim-cmd vmsvc/snapshot.get $vmid
dupfile=0
get_allfiles_from_filelayout $vmid | while read a ; do
basename "$a"
done | sort | uniq -d | grep . >/dev/null && dupfile=1
get_allfiles_from_filelayout $vmid | while read a ; do
dst="$backupdir/$vmname"
if [ "$dupfile" = "1" ] ; then
ds="`echo "$a" | get_ds_from_path`"
dst="$backupdir/$vmname/$ds"
fi
$copy_p "$a" "$dst/`basename "$a"`"
done
remove_last_snapshot $vmid
wait_while_task_running_vmid $vmid
get_datafiles_from_filelayout $vmid | grep \.vmdk$ | while read a ; do
dst="$backupdir/$vmname"
if [ "$dupfile" = "1" ] ; then
ds="`echo "$a" | get_ds_from_path`"
dst="$backupdir/$vmname/$ds"
fi
$copy_p "$a" "$dst/`basename "$a"`"
done
get_datafiles_from_filelayout $vmid | sort | uniq | grep \.vmdk$ | while read a ; do
if [ "$dupfile" = "1" ] ; then
continue
fi
parent_path=`grep "^parentFileNameHint *=" "$a" |inner_quote`
echo "$parent_path" | grep "^/" >/dev/null || continue
vmdk=`basename "$parent_path"`
cat $a | sed -e 's/^\(parentFileNameHint *= *\)".*"/\1"'"$vmdk"'"/' > "$backupdir/$vmname/`basename $a`"
done
 分散datastoreに対応しようと思ったけどめどくにゃっていい加減にゃ対応のまま放置してあります状態(笑)
 ま、そのままコピーするだけで、一応バックアップにはにゃるわけだし、複雑にゃことしにゃい方が良いんだけど、やっぱりそのままインポートしてrevert押せばすぐ起動ってのはバックアップとして有用だと思うわけで。

▼ ESX 関連記事
▼ ESX 関連記事     一覧メニュー    (全105件表示)
pyvisdkで遊ぶ / vm鯖変更 / HostStorageSystem.ComputeDiskPartitionInfo / NFSデータストア上限 / ESXi5.0でhostdが肥大化 / hpのSmartArrayをESXi5から / Linux vmのディスクタイムアウト / ESX用BIOS設定 / ESXのネットワークを冗長化 / vmの大量クローンでWinのホスト名を自動で変える / vmの大量クローン / 無償版ESXi5でvmのバックアップ方法再考 / ESXi用vCLIのセットアップ / ESX鯖作成 / hpのRAID板をESXiから / ESXi5.0 関連作業まとめ / ESXi5 でMegaCliが動かにゃい / vmware converterで選択したマシンのハードウェア情報を取得できません / ESX, NexentaでRAIDカード監視 / vmでL2スイッチしにくい / ESXi 5 / ESXi 5 / ESXiのコマンド / ESX再起動したらnasがmountできにゃい / ESX終了時にVMを自動シャットダウンさせる / ESX上のut-vpnが不安定 / 負荷をかけると落ちるNAS / nfs鯖のファイルをバックアップしたい7 / ESXのUbuntuでVMXNET3を安定動作させる / ESXのUbuntuにVMXNET2が入らにゃい / ESXのVMでVMXNET3にゃLinuxのネットワークが不安定 / ESXのVMでネットワークのダウンロード帯域を広げる / Ubuntu鯖のVMでNICが高負荷で行方不明 / nfs鯖のファイルをバックアップしたい6 / nfs鯖のファイルをバックアップしたい5 / nfs鯖のファイルをバックアップしたい4 / nfs鯖のファイルをバックアップしたい3 / nfs鯖のファイルをバックアップしたい2 / nfs鯖のファイルをバックアップしたい1 / ESXでスナップショット失敗 / ESXiで設定が通らにゃい / esxのバックアップを改善する / ESXiでサービスコンソールが重い / esxiでLSIのMegaRAID / ESXi 4.1 u1 / ESX不調 / ESXクライアントが重い / nfsメモ / ut-vpn鯖をESX上で / nfs鯖がbusy過ぎるとESXがこける / ESX4.1でクリップボードが使えるようにvmxを変更 / ESXでvmkapimodがCPUを食う3 / ESX4.1でコンソールのマウスが遅延 / ESX鯖にはSSDがおすすめ / ESXi4.1関連作業まとめ / ESXi4.1の設定のバックアップ / ESXi4.1にsshのauthorized_keysを置く / ESXiにssh / ESXでvmkapimodがCPUを食う2 / ESXのsnapshotの場所 / ESXのsnapshotで高負荷 / ESXでvmkapimodがCPUを食う / OpenSolarisのidmapdがメモリリーク / ESX4u1でThe lock protecting vmdk has been lost / ESXにserver 2008 R2を入れたらVGA driverが入らにゃい / ESX4のメモリ共有速度 / ESX4u1関連作業まとめ / NexentaStorのidmapdがメモリリーク / ESX4u1のsfcbdがメモリリーク / opensolarisでnfs鯖 / vmwareでpfsense / ソフト試用 Nexenta Stor / iSCSIとESXと再接続 / ソフト試用 ESX 4 update 1 / ESX鯖のバックアップ先 / ESX4メモまとめ / ESX鯖にSSDでsnapshotが強い / ESX4用バックアップスクリプトメモ / freenasのiSCSIやnfsが遅いのでubuntuに乗り換えてみる / freenasのiSCSIがやっぱり遅い / ESX4のswapファイルを改善してみた / freenasが遅いのだが?? / ESX4のswapファイル / ESX4のdatastoreをNFSに / ESXi4のバックアップ用にnfsマウント / ESX4はESX4iのラインセンスで / ESXi4のsshが遅い / ESXi4のSSH認証を自動化 / ESXi4でrsyncdが使いたい / ESXi4でrsyncが使いたい / ESXi4のpythonでsparseにゃファイルコピー / vmware server 1.xからESX4へvm移行 / CPUキャッシュとvm / vmware ESX4iのメモリ共有 / ESXi4でsshが使いたい / ESXi4にSSHで入れるようにする / ESXi4の2008 R2が不安定 / ESXi4のWinにゃvmのvmdkを圧縮 / ソフト試用 ESXi4からメール送信 / ESXi4のvmバックアップ / ソフト試用 vmware vifs.pl / ソフト試用 VMware vCenter Converter / ソフト試用 VMware vSphere CLI / ソフト試用 vmware ESXi4をUSBからboot / ソフト試用 vmware ESXi 4.0 vSphere 4
▼ vmware 関連記事
▼ vmware 関連記事     一覧メニュー    (全110件表示)
firefoxでフォーム自動送信 / vmの反応が遅い / vmdkを分割してパフォーマンス維持 / vmdkサイズと分割 / vmにvmdkを追加するとbootしにゃい / nfs over ubuntu zfsとesxi6.5でvm毎snapshotは使えるか / esxでweb clientのログインが阻害される / esxのvmで異常にゃレイテンシ / ESXiでSSDのWriteが遅い / vmware NIC数が足りにゃい / vmware ESXi 6.5 / Veeam Backup Free Edition試用 / Unitrends Enterprise Backup試用 / Trilead VM Explorer試用 / Thinware vBackup試用 / Foglight for Virtualization, Free Edition試用 / OpenDedup試用 / パススルーとRDMで仮想化NAS / ESX4u1のsfcbdがメモリリーク / ソフト試用 SmoothWall / vmwareでpfsense / ソフト試用 Nexenta Stor / iSCSIとESXと再接続 / ソフト試用 ESX 4 update 1 / vmは安易に巻き戻せにゃい / ESX鯖のバックアップ先 / ESX4メモまとめ / ESX鯖にSSDでsnapshotが強い / ESX4用バックアップスクリプトメモ / freenasのiSCSIやnfsが遅いのでubuntuに乗り換えてみる / freenasのiSCSIがやっぱり遅い / ESX4のswapファイルを改善してみた / ESX4のswapファイル / ESX4のdatastoreをNFSに / ESXi4のバックアップ用にnfsマウント / ESX4はESX4iのラインセンスで / ESXi4のsshが遅い / ESXi4のSSH認証を自動化 / ESXi4でrsyncdが使いたい / ESXi4でrsyncが使いたい / ESXi4のpythonでsparseにゃファイルコピー / vmware server 1.xからESX4へvm移行 / CPUキャッシュとvm / vmware ESX4iのメモリ共有 / にゃんでも仮想化 / ESXi4でsshが使いたい / ソフト試用 vmware player / ESXi4にSSHで入れるようにする / ESXi4の2008 R2が不安定 / ESXi4のWinにゃvmのvmdkを圧縮 / ソフト試用 ESXi4からメール送信 / ESXi4のvmバックアップ / ソフト試用 vmware vifs.pl / ソフト試用 VMware vCenter Converter / ソフト試用 VMware vSphere CLI / ソフト試用 vmware ESXi4をUSBからboot / ソフト試用 vmware ESXi 4.0 vSphere 4 / vmホスト落ち / vmware Server 1.xのCPU / vmware Server 1.xのキャッシュ関連 / vm雛形設定 / linuxでvmware server 1.xが遅すぎる / vmware server 1.xのNATでreject / vmware server @linuxとオープンファイル数 / vmで勝手にIPが変更される / vmware serverのメモリスワップ設定 / vmのバックアップを差分で / vmware vmdkの圧縮 / vmware server 1.x @linuxと2003でディスクエラー / Winファイル鯖をvmで / vmware server 1.xをlinuxで / vmware server 1.xのconsoleのInventoryが時に壊れる話 / ソフト試用 NHCでディスクが開けにゃい / vmware serverのゲストネットワークが通らにゃくにゃる3 / vmware serverのゲストネットワークが通らにゃくにゃる2 / vmware serverをAthlon64 X2環境で / vmにゃlinuxのコピー時に変えるべき部分メモ / vmのバックアップ追記 / vmware serverのゲストネットワークが通らにゃくにゃる / vmware serverのRun this virtual machine as:をLocal Systemにしたいのだが / vmにゃLinuxをsuspendから復帰するとethがlink upしにゃい / vmware server consoleのInventoryのvm並び順を変える / squidをvmwareで / vm環境保全計画5 / vm環境保全計画4 / vmware-cmd.bat suspendがtimeout / vmwareの仮想ディスクを分割 / vm環境保全計画3 / vmware上のLinuxのクロックがずれまくる3 / vmware serverでディスク足してったらPCI不足 / vmware上のLinuxのクロックがずれまくる2 / 仮想PCのIP設定2 / vmware serverにvm追加スクリプトを考えてみる / vm環境保全計画2 / vm環境保全計画 / vmware上のLinuxのクロックがずれまくる / /etc/udev/rules.d/z25_persistent-net.rulesの生成をやめる / vmwareのバックアップ鯖はアーキテクチャ違い / vmware Serverの世代スナップショットもどきを軽量に / vmwareゲストがホスト色数に引きずられる / 仮想PCのIP設定 / debian etchをvmwareでコピーするとeth0がeth1,eth2・・・ににゃる / vmware serverとconsoleでにゃんかエラー対処 / ソフト試用 vshadow.exe / vmwareがスワップして遅い / vmware server consoleでハング / ソフト試用 vmware-cmd.bat / ソフト試用 vmware server / ソフト試用 Vmware Server for linux / ソフト試用 Virtual Disk Driver


Index


2009/12/26 21:42 
2009/12/25 01:45 
2009/12/24 21:15 
2009/12/24 02:21 
2009/12/24 01:01 
2009/12/23 18:36 
2009/12/22 20:47 
2009/12/21 16:53 
2009/12/20 20:13 
2009/12/19 17:02 
2009/12/18 19:48 
2009/12/18 02:28 
2009/12/17 20:34 
2009/12/17 17:31 
2009/12/16 03:00 
2009/12/15 11:02 
2009/12/15 02:01 
2009/12/14 01:48 
2009/12/13 13:36 
2009/12/12 13:39 
2009/12/11 13:41 
2009/12/10 22:38 
2009/12/09 22:12 
2009/12/09 01:58 
2009/12/08 14:37 
2009/12/08 01:50 
2009/12/07 14:25 
2009/12/07 01:30 
2009/12/06 17:04 
2009/12/05 17:07 
2009/12/04 17:09 
2009/12/03 20:11 
2009/12/02 21:18 
2009/12/01 21:22 
2009/11/30 17:03 
2009/11/29 21:20 
2009/11/28 16:52 
2009/11/27 21:51 
2009/11/26 22:38 
2009/11/26 21:44 
2009/11/25 21:33 
2009/11/24 17:55 
2009/11/24 01:30 
2009/11/23 21:21 
2009/11/22 10:46 
2009/11/21 02:30 
2009/11/21 01:58 
2009/11/20 03:16 
2009/11/19 00:28 
2009/11/18 22:50 
2009/11/17 00:24 
2009/11/16 06:55 
2009/11/15 06:57 
2009/11/14 21:11 
2009/11/13 21:21 
2009/11/13 10:05 
2009/11/12 19:34 
2009/11/12 18:32 
2009/11/11 22:07 
2009/11/10 18:31 
2009/11/10 02:31 
2009/11/09 12:23 
2009/11/09 02:52 
2009/11/08 18:35 
2009/11/07 20:01 
2009/11/06 00:38 
2009/11/05 21:10 
2009/11/05 17:25 
2009/11/04 17:24 
2009/11/03 11:09 
2009/11/02 21:38 
2009/11/01 09:48 
2009/10/31 22:55 
2009/10/31 09:44 
2009/10/30 23:42 
2009/10/30 14:55 
2009/10/29 13:36 
2009/10/28 22:56 
2009/10/28 22:06 
2009/10/27 03:12 
2009/10/27 01:34 
2009/10/26 22:53 
2009/10/26 05:34 
2009/10/25 15:03 
2009/10/24 11:32 
2009/10/23 12:26 
2009/10/23 11:31 
2009/10/22 12:43 
2009/10/21 20:16 
2009/10/21 02:38 
2009/10/20 12:41 
2009/10/20 06:30 
2009/10/19 20:04 
2009/10/19 00:20 
2009/10/18 22:08 
2009/10/17 21:32 
2009/10/17 02:02 
2009/10/16 23:56 
2009/10/15 02:54 
2009/10/14 01:47 
2009/10/13 19:30 

↑recent | ↓old | 20 index | 100 index | 300 index | 記事5件 | 記事10件 | 記事20件 |最新5件 |FAQ | カテゴリ一覧 | Index |