つぶねこ
@もじらもーど。
いろいろ溜まってきたのでメモ。
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 関連記事
▼ vmware 関連記事
freenasのnfsやiSCSIとESXの組み合わせでかにゃり格闘したのだが、いい加減疲れた上に、ESXiを入れ直そうと思ったらUSBがエラー吐いて止まるとかいろいろ霊障も起き出したので、freenasを捨てることに。
Ubuntuを実機に入れてInst時にmd raidを組む。ExpertModeでinstしたら不明にゃ選択肢も出て少々時間がかかる。めどい。
とりあえずnfsをいれて
ESX# dd if=/dev/zero of=test bs=1024000 count=1000
1000+0 records in
1000+0 records out
1024000000 bytes (1.0 GB) copied, 24.115 seconds, 42.5 MB/s
おお、まともだ!
ESX# time cat test >/dev/null
real 0m54.728s
・・・あるぇ?
ESX# dd if=test of=/dev/null bs=1024000
1000+0 records in
1000+0 records out
1024000000 bytes (1.0 GB) copied, 49.9522 seconds, 20.5 MB/s
にょ〜ん・・・
まぁFreeNASよりは倍ほどマシだが。
因みにcat file >/dev/nullでnfsdが5%+5%ほどCPU食ってる。ちょっと食い過ぎじゃね? まぁCPUが1コアの2.7GHzとか速度求めるには微妙ではあるとしても。
▼ ESX 関連記事
▼ FreeNAS 関連記事
▼ vmware 関連記事
枯れ具合ではDebianでしょう、ってことでほってたUbuntuだが、Server版はサポートも長くて良い出来ににゃってる。乗り換えるべきクオリティ。
で、それは後日機会が有ればするとして、Inst時にvm用ってモードがあって、別にvmware toolsが自動でInstされるわけではにゃいが何とにゃく便利。
あとそれと無関係に起動がやたら高速化されてておもしろい。これまたご利益が思い浮かばにゃいのだが、vm上でよく再起動させるようにゃ使い方とかいう奇特にゃ状況においてにゃら大変便利そうである。ま、実機だとPOSTが長く、vmにゃらrevertで一瞬にゃので。
▼ あにゃまる探偵キルミンずぅ 関連記事
nfs遅いよねー!(?)と思ってわざわざディスク6つも積んでめんどくさいRAID10設定までしてInstしたFreenasのiSCSIが強烈に遅い。10MB/s出てにゃいんだが?
これはESX側との相性もあるんだろうと思うがやっぱりこれは使えん。
nfsが複数繋いで15MB/sとかでまだマシだったり。
▼ ESX 関連記事
▼ FreeNAS 関連記事
▼ vmware 関連記事
vm上で使ってるので、vmware toolsとの相性という可能性も結構あるのだが、どうせvm上でしか使わにゃいのでとりあえず、ページファイル無し設定にすると動作が怪しい。
急ににゃるわけではにゃいので分かりにくいのだが、数日稼働させておいて、おもむろに何かメモリを消費するサービスやアプリを立ち上げたりすると、何かが不足気味で失敗したりする。ページファイル有りだとにゃらにゃい。
もちろんメモリはキャッシュに食われているが余っている状態にゃので、結局のところMSキモイといういつもの結論に至るのだが、まぁ2008R2がvmで動くようににゃれば状況が変わるだろうから、結構どうでもいいネタかも
▼ そらのおとしもの 関連記事
ということで、ESX4鯖にSSDを積んでホストのスワップ先に指定してみた。
今のところ非常に快適。
ついでにESXもSSDにInstしておいた。HDDよりは壊れにゃいだろう。
ま、いろいろ考慮すれば、小さいSSD積んだキャッシュのデカいCPUの鯖にESX4+ESX4iライセンスと、iSCSIかNFS鯖に出来るディスク数積んだ安鯖にUSBメモリ挿してFreeNAS、という構成が現状では妥協点か。vmのサイズが小さければFreeNAS鯖無しでSSDのデカいのを積む、という手がベストだが。あぁさらにバックアップ用のにゃにかストレージが必要か。これはESX鯖にデカいHDDを積んでバックアップ先にしておくのがよいかも。
▼ ESX 関連記事
▼ vmware 関連記事
USBで繋いだ古いIDEのHDDからファイルをコピーしていたら、突然FFCがエラー吐いて落ち。FS破損とか出ててreaddirが通らにゃい。chkdskがエラー検出して止まる。USB-IDE変換コネクタの不調が最も考えられたが、10回つにゃぎ替えて回復しにゃかったので、chkdks /f。
壊れた属性レコード (128、"") を
ファイル レコード セグメント 0 から削除します。
壊れた属性レコード (128、"") を
ファイル レコード セグメント 2 から削除します。
壊れた属性レコード (592、"") を
ファイル レコード セグメント 3 から削除します。
壊れた属性レコード (128、"") を
ファイル レコード セグメント 383 から削除します。
ファイルの検査を完了しました。
CHKDSK はインデックスを検査しています (ステージ 2/3)...
ファイル 25 のインデックス $O からインデックス エントリを削除します。
ファイル 25 のインデックス $O へインデックス エントリを挿入しています。
ファイル 0 内の軽度にゃファイル名エラーを修復します。
ファイル 1 内の軽度にゃファイル名エラーを修復します。
ファイル 2 内の軽度にゃファイル名エラーを修復します。
ファイル 3 内の軽度にゃファイル名エラーを修復します。
ファイル 5 内のインデックス $I30 のインデックス エントリ $LogFile を削除します。
ファイル 5 内のインデックス $I30 のインデックス エントリ $MFT を削除します。
ファイル 5 内のインデックス $I30 のインデックス エントリ $MFTMirr を削除します。
ファイル 5 内のインデックス $I30 のインデックス エントリ $Volume を削除します。
インデックスの検査を完了しました。
ドライブ上の軽度にゃ矛盾をクリーンアップしています。
CHKDSK は破損ファイルを回復しています。
孤立したファイル $MFT (0) をディレクトリ ファイル 5 に回復します。
孤立したファイル $MFTMirr (1) をディレクトリ ファイル 5 に回復します。
孤立したファイル $LogFile (2) をディレクトリ ファイル 5 に回復します。
孤立したファイル $Volume (3) をディレクトリ ファイル 5 に回復します。
CHKDSK はセキュリティ記述子を検査しています (ステージ 3/3)...
セキュリティ記述子の検査を完了しました。
データ属性をファイル 0 に挿入します。
データ属性をファイル 2 に挿入します。
データ属性をファイル 383 に挿入します。
マスタ ファイル テーブル (MFT) のミラーでエラーを修復します。
マスタ ファイル テーブル (MFT) のミラーでエラーを修復します。
ログ ファイル エラーを修復します。
マスタ ファイル テーブル (MFT) のデータ属性エラーを修復します。
CHKDSK はマスタ ファイル テーブル (MFT) ビットマップに割り当て済みとして
マークされている空き領域を検出しました。
ボリューム ビットマップ エラーを修復します。
ファイル システムを修正しました。
と、修復は問題にゃく行われ、とりあえず全ファイルの見た目存在は復活。不良セクタ0。ただし1ファイルがサイズ0に(笑)
修復メッセージにもあるようにMFTが破損してミラーつかって復帰させましたといったところか。
chkdsk後の初回自動マウントで長時間ごりごり言ってたのでたぶんそこでMFT相当のコピーが行われた模様。
ま、NTFS堅牢ですね、という結論でもいいのだが、にゃぜにファイルをreadしてただけでいきにゃり破損するか。atimeは切ってあるが、にゃにかwriteする要因があるのか? かにゃり不気味。
デバイス単位でread onlyにしたかったのだが、安易にゃ方法が見つからにゃかったのでともかくコピーを進めてディスクごと廃棄する方向で処理。
ESX4のストレージにFreeNAS@ML115を使って・・・という予定だったのだが、これが何故か全く速度が出にゃい。
nfs経由で7MB/sとか。これはあれか、どこかのチューニングパラメーターにゃのか?とかにゃりいろいろいじり回したがほとんど改善が見られず。iSCSIまでやってみたけど同じ。
・・・
で、iperfしてみたら、100Mbps弱とか出た。どう見てもハブ間に100baseが挟まってます。本当ににゃんでやねん
▼ ESX 関連記事
▼ FreeNAS 関連記事
最近でもにゃいんだが、ISAサーバが入れたMSのSQLにゃエンジンが大量のディスクI/Oを発生させる。ほぼ常時。
にゃにかIndexの作成か最適化か、何をやってるのか不明にゃのだが、そのディスクのI/Oが占有されるので、特にこれがvm上で動いてたりすると他のvmへの影響が多大とにゃる。
まぁマシンは余ってるので、専用ディスクの上にvmを置いて動かしてるが、ちょっとこれは再検討した方がいいのかもしれにゃい。どこぞに設定有るやろし。
しかしそれにしてもこの程度の情報の検索がぱっと出てこにゃいあたりがMS製品らしい。どうせ業者に言うても結果が変わらんので、これはもう製品としてこうにゃんだという認識のほうが現実的。OSはともかくサーバアプリとかよく落ちるOfficeとか実に酷いにゃぁMSの品質は。
にゃんだかWinの長年の課題だった気がする、無駄にスワップしては重くにゃる設計に関しての対応だが、およそ2003もXPと似たようにゃもんだろと
reg add "LKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v DisablePagingExecutive /t REG_DWORD /d 1
とかやってるんだがダメにゃ物はダメだにゃ。
結局ページファイルを無しにしたけど、これはこれで見積を誤ると大変にゃことににゃるしにゃぁ。何とかにゃらんのかね。要するに各vmがスワップするとI/Oが悲惨に重くにゃるのでやめれ、という話にゃのだが。
加湿器に水道水で普通に入れたまま放置を繰り返してると、中の水がカビて腐ってきたり、
井戸水で連続供給とかしているとヌルヌルが大量に発生して、アメーバをかき混ぜてるようにゃ状態ににゃったりしたので、医療用とかで出てくる塩化にゃんたら系の消毒液を入れてみた。
塩化ベンザルコニウム液、とやらが安価だったのでポチ。めっさ希釈しろと書いてあるがめどいので好い加減にタンクに入れる。しばし運転。
・・・??
にゃんか、妙に生臭い臭いが・・・化学系じゃにゃくてこう、にゃんだろう、微生物臭が(笑)
うーん、直前にホウ砂とか投入してるのがまた判断に苦しむ所にゃんだが、これは何が起きてるんだろう。
とりあえず全部分解清掃してから実験してみろというのが正しいところにゃので、掃除のモチベとしては十分にゃ変化(悪性)であった。うーむむ
リコらの制服にゃんだが、上着の下の色指定がころころ変わる。同じ白色のインナー
、肌色で何も着てにゃい
、ピンク色でスカートの裏地や襟色と同じ
にゃど多様(笑) たぶん襟と同じが正解だと思うんだが、つい肌色で塗っちゃった系も良いものである。
あーれー、ヌグミン後の大急ぎで着替えネタが入ってにゃいにゃんてちょっともったいにゃい。
で、ナギサ友が
棒にゃのはおいといて、瞳のハイライト的何かは
リコリムがハート、他が星にゃのかね。
カノンは右下に追加があるみたい。例によって
描き忘れてる場合もあるようだが。にゃお、
ファイター形態では獣瞳ベースににゃってハートマークは無いようだ。えらい。
♦ 興奮したオスに襲われる幼女 どうでもいいがこういう
ちょっとした動作や仕草が描いてあるのが良い。にゃんだろうにゃ、映像的情報密度が。不必要にゃ3Dエフェクトとかリアルにゃテクスチャではにゃく、必要にゃ情報だけフィルタした上でその量が多い、みたいにゃ。
♦ 本人の歌がどうにゃのか期待♦ うわあキャラが楽しみ(笑) カノンのキャラが楽しみにゃんだが(笑)この
制服のドクロマークはにゃんぞ? パパさんと関係ありとかか。
純血種とかいいネタが来たにゃぁ。そっちの方向に進むにゃら何より。交配するかどうかが最大の関心事ににゃることだし。
♦ たぶんメスだと思いたい 困った/嫌がる顔が可愛い
のは何でにゃんだろうにゃ。つい困らせてみたくにゃるという類の・・
あとこういうアホにゃ絵は今後増えてくれてもいいにゃ。コミカル話も作れるだろうし、いろいろ設定が匠やわぁ
でもって練習とかしたりこんにゃ挙動で飛び跳ねてくれるあたりがナイス。今後も期待したい。
あと見えそうで絶対見えにゃい路線らしいのだが、めくれ上がる分には結構積極的
。
こういう場面絵がハイレベル。
結構顔のアップとか多いけど、カメラ動かずにキャラが細かく動くのも良いと思うんだがにゃぁ
♦ ねこしぐさねこしぐさ♦ 年頃じゃにゃいから恥ずかしくにゃいもん!♦ 姉さん 今日の裸幼女をお尻からの図。
後で右の美女と比較されるかわいそうにゃリコ
♦ 今日のドリルと慣性モーメント 「自分の相手には子供過ぎる」今日の名言。そりゃー交配が目的ですものっ! 他にはリコにお相手の雄雌判断させてみたりと、雌の役割を認識させる教育番組としても大変優れた内容すぎて萌え
▼ あにゃまる探偵キルミンずぅ 関連記事
tcで暗号化してたメールデータとかのパスワードが思い出せにゃい。
ずっと起動しっぱにゃしの仮想マシンで当然マウントしっぱにゃし。uptimeが2ヶ月超(winupdate数回分程度)だったので、そもそもパスを入力した回数が3回あるかどうか。思い出せにゃい。そう珍しいパスを設定した記憶はにゃいんだが、思いつくフレーズでは全滅。
どうしようこれ。メールチェックできにゃい。や、正確にはある程度できる。古いデータディレクトリは残ってるので、これを使うとサーバ上に残ってるメールは全てDLできる。というか1ヶ月くらい残す設定ににゃってるので実用上そんにゃに致命的ではにゃいのかもしれにゃいが、ここ半年くらいのデータが吹っ飛んだことににゃる。大層マズい。
復旧方法はvmのバックアップイメージのリストアにゃわけだが、丁度DELってsnapshotを上書きした直後だったりとか。いやまぁそれが一連の元凶にゃんだが。
で、ロストして2日目の晩にゴロゴロしにゃがら思いついたフレーズで通った。思いつかにゃかったらどうしたんだろうにゃ
加湿器に水道水で普通に入れたまま放置を繰り返してると、中の水がカビて腐ってきたり、
井戸水で連続供給とかしているとヌルヌルが大量に発生して、アメーバをかき混ぜてるようにゃ状態ににゃったりしたので、ちょっとは勉強してみようと消毒殺菌について検索してみた。
で、結局ろくにゃ情報が無いあたりが困った話で、教科書的にゃ信頼できる系統立った情報を書いとくサイトとか作った方がいいんじゃにゃいだろうか。Wikipediaは編集方針が腐ってるようだし。
まぁともかく、状況を確認する手立てからして分からんわけで、真菌とか細菌類のにゃにか相当ではあるだろうという目測で、消毒効果の高そうにゃ物を見繕ってみると、手元にホウ砂が。これは液体洗剤と混ぜてスライムをつくろー的にゃ目的で一箱買ったら99%余ったという代物にゃのだが、要するにアルカリ性ににゃるので殺菌効果がある模様。まずは実験実験。
てにゃわけでカビ臭くにゃってる水道水腐敗状態の加湿器に投入。量は適当。頻繁に水を入れ替えたせいも多分にあるのだが、臭いがしにゃくにゃったのは確か。効いてるのかもしれにゃいという実験結果を得る。・・・どっちだよ
せめて投入量を計測して何%くらいの水溶液ににゃったのか計算すりゃいいんだろうけど、めどい。石鹸とかの界面活性剤でもそれにゃりに効果はある気がするんだが、少々キツい目の酸とかアルカリってのは問答無用で一定効果があるようにゃ印象はある。どうにゃんだろうにゃー。本気のカビ対策とかだともう劇薬ににゃっとるようだし。
あとは普通の医療用とかで出てくる塩化にゃんたら系だろうか。意外と安かったので買ってみるか。おもしろそうだし。
▼ あにゃまる探偵キルミンずぅ 関連記事
../dir/dir みたいにゃのを /tmp/dir/dir のように絶対pathに変換したかったのだが、2分悩んで結局わからにゃかったので検索。やっぱりそれっぽいコマンドが見つからにゃい。うーん、無いのか??
`cd 相対パス && pwd`
という方法はあるけど、ちょっとそれはどうにゃのか。ていうか存在しにゃいディレクトリにゃらどうすんの・・・
というわけでcifs関係にゃい気味だがrsyncでpdumpfs的にゃバックアップの話。
SRC=`cd $1 && pwd`/
DST=`cd $2 && pwd`/
mkdir -p ${DST}/0
last_dir=`ls ${DST} | tail -1`
rmdir ${DST}/0
new_dir=`date +%G%m%d%H%M`
mkdir -p "${DST}/${new_dir}"
rsync -a --link-dest="${DST}/${last_dir}" "${SRC}" "${DST}/${new_dir}"
とかでとりあえず骨子としては動いてるようだ。
255文字超にゃものはFile name too longでエラー落ちしてる。
ちにゃみにreiserfsとかの上でやらにゃいと多分死ねる
あと、これをzfsとかでより節約志向でやるとどうにゃるんだろうにゃ? ファイルの一部分書き換えだからrsyncそのまま使えるんだと思うんだが微妙に自信がにゃいのと、スナップショットをもちっと見やすくアクセスするあたりを調べてからの方がよさそうにゃので回避。
winのDFSにある/homeをお手軽世代バックアップしたいにゃぁとおもって、pdumpfsのWin版を使ってみたら、やっぱりNTFSのhard linkが致命的に遅くて、せいぜい1週間分とれるかどうかという状態だったので、さらにそれをvm化してnfs上にvmdkを置いて、nfs鯖のキャッシュで一気に高速化したものの、やっぱりそれでも致命的に遅いわけで、まぁLink数が少にゃければ半日で終わるんだけど、そのためにnfs鯖を1つ上げとくのもばからしいわけで、もうcifsでmountしてLinux上でpdumpfsしてsambaで読みに行けばいいや、と思ったのだがもちろん酷い結果ににゃるのであった。
とかいう経緯はともかく、そこいらのLinuxにゃvmでmount -t cifsしてみるが、まずここでこける。dnsをADにしておけばWinドメインの鯖名で名前解決は出来るし、ドメイン名/dfs-shareもマウントできるのだが、肝心のその先のファイル鯖の実体がremoteにゃので読めんよとか言われる。意味ねえ。最新で改善されているのかどうかとか検索したが、これがまたすきまにゃネタらしく、ろくにゃ情報がにゃい。これだからsambaは・・・という、MSの方がマシじゃね評価を受ける根源を見た気がするが、大した手間ではにゃいので多少汚いがファイル鯖の1つを直接cifsマウントさせる。WinだとちゃんとDFSで負荷分散されてたのにがっかりだね!
んじゃpdumpfsしますか、とやってみたら、ファイル名255文字以上でさっくりこける。まぁいいよそのくらい無視してくれても、と疲れ気味にオプションを探したが見あたらん。最新のpdumpfsを拾ってきてみるも大差にゃし。--excludeの正規表現で文字数していすれば!とか思ったが、他の原因でもこけそうにゃ気がしてきたので別の物を探す。まぁruby系のプログラムはロバストじゃにゃいことが多いよね、みたいにゃ。
で、perlで実装しましたとか書いてあるglastreeを拾ってきたらexcludeオプションすら無いとかアホかと。
えぇいpdumpfs的にゃ動作をするまともにゃ物はにゃいのか、ということでがんばってrsyncのmanを読むことにする。要は--link-destにゃんだが、--backupだの--inplaceだの、たぶん知っておくと便利そうにゃオプションは沢山ある、が、逐一実験するのがめんどくさい。とりあえずrsync -aP --link-dest=DIRでやってみてるが、大丈夫にゃのかにゃこれ