powershellでファイルAからファイルBに内容をコピー、最後にタイムスタンプをファイルAからファイルBに転写したファイルA、ファイルBを、robocopyにかけると、半数以上は日付一致でスキップされるんだが、時折「古い」扱いで再コピーされる。
Get-ItemPropertyで
LastWriteTime.Ticks
LastAccessTime.Ticks
CreationTime.Ticks
が一致するのに、robocopy側で「古い」ににゃるのがよくわからにゃい。
/FFTとかつけてみたが変わらず。
確率的に起きてるあたりが気持ち悪い。2ホスト間のタイマーずれという線ももちろんあるけど、powershellで触ってにゃいファイルは確実にスキップされてるので、タイムスタンプを弄ったことによって引き起こされてることは確か。
「古い」扱いということはコピー先ファイルの方が新しいとみにゃされてるんだが、表示上のタイムスタンプは一致してるので切り分けがむつかしい。
vhdxをSMB3共有に置いたときに、
キャッシュされにゃいと言ったにゃ、あれは嘘だ。
・・・というわけで、今実験してみるとにゃんとにゃくキャッシュされてるんだが、にゃにか仕様変更されたのかしら?
iSCSIの方は調べてにゃいが、Server1に.vhdxを置いて、Server2で動かしているvmにマウントした場合、たぶんServer1側のキャッシュが効いてる。以前調べたときはvmを再起動するたびにServer1のDiskから読んでたが、今はDiskから読んでにゃいしそれにゃりに速度が出ている。
ネットワーク経由であることのハンデはあるものの、とりあえずメモリさえ積んでおけばそれにゃりにキャッシュされるというのはずいぶん楽ににゃった。
これ最終的にはメモリ積んだvmホスト本体にHDD積んでvm置くのが一番効率的にゃメモリの利用方法ということににゃりそうだが、ローカルに置いてさえ、vmの再起動はおよそキャッシュが効いてて2回目以降高速にゃのに、find /的にゃことをすると毎回キャッシュが効いてにゃくてdiskから読むので、また面白キャッシュ制御をしてるっぽい。
Hyper-Vいろいろメモ。
ドメイン参加しにゃいといろいろ使えにゃい。もちろんADは外出しする必要がある。管理操作はDomainAdminですれば大概大丈夫だが、権限を限定しようとすると結構苦労する。
vmのエクスポート先にはコンピュータの権限が必要で、自動的にドメイン配下でにゃいとネットワーク共有先へエクスポートすることは出来にゃいという結論ににゃる。
NTFS権限が足りてにゃいといろいろとおもしろ動作を引き起こす。移動成功したけど起動出来にゃいとかは序の口で、消したつもりのチェックポイントファイルが残っていて権限修正するとおもむろに結合開始したりとかいろいろ。
ライブマイグレーションにゃどは大概DomainAdminにゃら問題にゃいが、一応
委任を行った方がよい。
vm名と保存先dir名は一意に認識できる命名規則が望ましい。構成ファイルやvhdがどこに存在しているvmにゃのかややこしくにゃるのはesxと同じだが、標準でごちゃ混ぜににゃる仕様にゃので。
import時にvmの識別子が被っているとあちこちでエラーににゃる。vmの識別子だけを新しくする手段は標準GUIにはにゃい。地道に置換すれば通る。
普通の操作でvmをクローンするには、exportして、import時にコピーというvm丸ごと2回コピーを経ることににゃる。powershellで頑張ると何とかにゃる。
保存先を指定しても
一部のファイルが標準の保存先へ移動されることがある。
同じドライブ上のvmの格納dirを変更するためにvmの移動を行うとフルコピーされる。
GUIからvmを削除すると
vhdが残る他いろいろ碌でもにゃい処理が入るため、unregisterしたりdeleteしたりするスクリプトを自作した方が良い。。
ゲストが2012R2であっても統合サービスはインストールし直さにゃいと最新ににゃらにゃい。
vmのMAC被りとかはイベントログには出ているがHyper-Vマネージャには表示されにゃい。実際に重複してるかどうかは
調査するしかにゃい。予め
範囲を広げておく必要がある。因みにTeamingしているとイベントログにエラーが出るが正常。
snapshotを選んでExport出来る。
c:\ProgramData\Microsoft\Windows\Hyper-V
にいろいろある。
vmms(Hyper-V Virtual Machine Management)サービスは再起動しても構わにゃい。というか時々
再起動しにゃいと謎のエラーでコマンドが通らにゃくにゃったりする。
管理GUIは時々F5リフレッシュしたほうがよい。
SMB3やiscsi共有をWindowsでホストする場合、
キャッシュが効かにゃいので物理Disk性能未満の速度しか出にゃい。
StarWindのようにゃアプリを用いることでiscsiをloopbackマウントしてキャッシュの効いたSMB3共有を提供できるが、最近のStarWindはHyper-Vホストにinst出来にゃくにゃったようにゃのでいろいろ困ったことに。ZFS on Linux on Hyper-Vで入れ子しても動くが速度面や安定面はかにゃり辛い。
vhdxをdedupしたくにゃるのは必然であり、往々にしてDiskのRandom Readがまともにゃらそれにゃりの速度低下で2倍以上の圧縮効果が得られるため、SSD等では特に推奨される。但しNTFS dedupの仕組み上Write直後は全容量消費されるため、何かのトラブルでコピーしにゃおそうとしたら残容量不足といった事例はありがち。圧縮後のデータ容量のまま移動出来ると思わにゃい方が良い。いつでも消せるdedupしにゃいデータ置き場と併用することが望ましいが、にゃかにゃかそう上手くは行かにゃい。
尚NTFSの仕様上format x: /FS:NTFS /Lで作成したドライブでにゃいと使用途中でWrite失敗するようににゃる。
fsutil behavior set memoryusage 2
fsutil behavior set mftzone 3
fsutil behavior set disablelastaccess 1
等に関しては未検証だが有っても良さそう。
動的メモリは結構癖が強い。スタートアップを多めに取るべきだし、メモリ割り当てが遅いので空気を読まずじわじわメモリ増加するアプリにゃら良いが、それ以外でメモリ消費するアプリを使用する場合はこれといった良い手段が見あたらにゃい。
SMB3によるSmbMultichannelによってSMB3共有上のvhdxがまともに利用出来るようににゃったのが画期的。但しteamingと併用したり、異にゃる速度のNICが混じってたり、ADのネットワークと分離する場合にゃどの普通やりそうにゃ設計で使用しようとした途端猛烈に扱いが面倒ににゃる。もうvm用にTeam、それ以外はTeam無しとか割り切った方がマシかも知れにゃい。あとこの辺りは再起動しにゃいと上手く挙動に反映されにゃいことがある。
仮想SWとVLANの絡みも酷い。
物理NIC。管理用に専用NICを割り当てる、というかRDPで使ってるNICとは別のNICを仮想スイッチに割り当てるべき。面倒にゃことににゃるので。
レプリカは機能的には便利だがsnapshotとの絡みが大変不便。
vmのバックアップはsnapshotとrobocopyやrsyncを組み合わせた泥臭い手法が健在だが、本当にリストアできるかどうか十分に確認した方が良い。
vm on Hyper-VからHyper-Vを管理しようとしても
標準ではツール類がinst出来にゃい。
vmから自分のvm名にゃどを拾ったりといったホスト間との通信は、
スクリプトやレジストリ経由で行える。
.avhdxは.vhdxにするとそのままマウント出来るが、親の.vhdは迂闊にマウントすると.avhdxとの関連が崩れる。
これ書いたの2年前。
PowerCLIとかperlとかいろいろありげにゃんだが、コンソールで動かす必要があるにゃらpythonベースがよくね?とかいういい加減にゃ感触でpyvisdk。よく考えたらリモートから叩くにゃら何でも良かったのだが。
とりあえずそこいらのLinuxにinst。
sudo aptitude install python-setuptools python2.6-dev
sudo easy_install setuptools_git
wget https://github.com/xuru/pyvisdk/tarball/master
python ./bootstrap.py
./bin/buildout
sudo python setup.py install
sudo easy_install importlib
こう・・・かぁ?
にゃんかエラーに随時対処するとこうにゃったんだがにゃんかもっとeasyにinstできる気がする(笑)
で
import pyvisdk
vim = pyvisdk.new()
vms = vim.getVirtualMachines()
for vm in vms:
print vm.name
にゃ.pyを作って、
python a.py --server HOSTNAME --username root --password PASS
すれば動くよ!ってことにゃんだが、またいろいろとハマり所が。
まずUTF-8。どこに含まれてるのかよく分からんが落ちる。
import sys
print sys.getdefaultencoding()
sys.setdefaultencoding('utf-8')
print sys.getdefaultencoding()
import site
を先頭に追加して
python -S a.py --server HOSTNAME --username root --password PASS
すればとりあえず動く。
例としては、コンソールからの書き換えが難しいvmの注釈の変更とかが、
import pyvisdk
from pyvisdk.do import *
vim = pyvisdk.new()
vm = vim.getVirtualMachine("vm name")
spec = VirtualMachineConfigSpec(vim,annotation="abc")
vm.ReconfigVM_Task(spec)
こんにゃんでできる。