まずはWindows Server バックアップから。
[単発バックアップウィザード]の[バックアップする項目を選択]画面内の[項目追加]ボタンをクリック→[項目の選択]画面で[ベアメタル回復]チェックボックスにチェック。※このとき選択されないドライブがあるので自分でチェックを付ける。ドライブと同列にある[回復]は要らない。
次にWindows Server バックアップとは別にバックアップする必要のあるドライバファイルについて。
リストア時にドライバが必要になるので、デバイスマネージャを起動し、ディスクコントローラ(記憶域コントローラ)とネットワークアダプターのドライバーファイル名を確認する。ドライバファイルの確認方法はデバイス名のコンテキストメニュー(右クリック)の[プロパティ]をクリックして、プロパティ画面を表示し[ドライバ]タブ内の[ドライバの詳細]ボタンをクリックして表示されるドライバーファイルの名前を記録。
「HP Dynamic Smart Array B140i」なら「HPSA3.sys」
ドライバファイル一式は以下のフォルダ内に保存されている。
C:\Windows\System32\DriverStore\FileRepository
(以下、FileRepositoryフォルダ)
ドライバファイル名が「HPSA3.sys」なら「hpsa3.inf_」で始まるフォルダを探し、見つけたらそのフォルダごとDVDに焼いて保存する。(見つからなければFileRepositoryフォルダを「HPSA3.sys」で検索し見つかったファイルの存在するフォルダを保存)
B140iの場合、「hpsa3.inf_」で始まるフォルダ内にドライバのインストールに使用するセットアップ情報ファイル「hpsa3.inf」が存在するが、この「hpsa3.inf」ファイルの内容を参照すると「include machine.inf」と記載している箇所がある。これは「machine.inf」も必要ということなのでFileRepositoryフォルダの中から「machine.inf_」で始まるフォルダを探し、これもDVDに保存する。
[今すぐインストール]ボタンがある画面の左下の[コンピュータを修復する]をクリック→[トラブルシューティング]→[詳細オプション]→[イメージでシステムを回復]→[システムイメージバックアップの選択]画面にて[システムイメージを選択する]を選択して[次へ]
[復元するコンピュータのバックアップの場所を選択してください]画面の[詳細設定]ボタンをクリック。
[ドライバをインストール]をクリック。ドライバを保存したメディアを装填。
ネットワークアダプターのドライバのセットアップ情報ファイル(xxx.inf)を選択。
ドライバのロードに成功し、[復元するコンピュータのバックアップの場所を選択してください]画面に戻ってきたら、Shift + F10 でコマンドプロンプトを呼び出して、IPアドレスを設定する。以下のコマンドを実行。(最初のipconfigでネットワークアダプタ名を取得)
> start /w wpeinit
> ipconfig
> netsh interface ip set address "ネットワークアダプタ名" static <IPアドレス> <ネットマスク> <ゲートウェイ>
> ipconfig
[復元するコンピュータのバックアップの場所を選択してください]画面の[詳細設定]ボタンをクリック。
[ネットワーク上のシステムイメージを検索する」をクリック。
[他の復元方法を選択してください]画面にて[ドライバーのインストール]ボタンをクリックして、ディスクコントローラのドライバをロード。
B140iの場合、hpsa3.infインストールは失敗するがコマンドプロンプトからdiskpart.exeを実行してディスクの一覧を表示するとディスクは見えている。
>diskpart.exe
DISKPART> list disk
ディスク 状態 サイズ 空き ダイナ GPT
------------ ------------- ------- ------- --- ---
ディスク 0 オンライン 1863 GB 839 GB
ディスク 1 オンライン 2794 GB 458 GB
ディスク 2 オンライン 2048 MB 2048 MB
[他の復元方法を選択してください]画面にて[次へ]ボタンをクリックして、リストアを続行。
これで、Windowsもベアメタルリストアできるはず。
※UsrClass.datのファイル名を変更できない場合はAdministratorユーザなど管理者アカウントで実施
副作用としては、該当ユーザのストアアプリが全て消えます。
といってもここまでひどい状態はユーザアカウント作成直後から発生していると思うので、そこまで影響ないと思いますが・・・
ちなみに当方、中国語版Windowsを無理やり日本語にしている環境です(所謂、中華パッド)。
'<html><body>{body}</body></html>'.format(body="今日は晴天なり")
CSS/Javascript(可読性をあげるために{}の間に改行やスペースが入る)
<html>
<head>
<style type="text/css">
<!--
dt{ backgroud: #bbb }
.odd{ backgroud: #ddd }
-->
</style>
<script type="text/javascript">
function hogehoge() {
print("本日は晴天なり");
}
</script>
</head>
これを踏まえて以下のようにすれば、HTMLテンプレート部分は毎度エスケープしなくてもよくなる。({}を重ねる置換を実施してからformatをしている)
import re
htmltemplate='''
HTMLのテンプレート
'''
html=re.sub(r'([^a-zA-Z0-9])}',r'\1}}',re.sub(r'{([^a-zA-Z0-9])',r'{{\1',htmltemplate,0,re.M|re.S),0,re.M|re.S).format(書式指定)
]]>
$ echo $LANG
ja_JP.UTF-8
CGIの実行ユーザになるであろう「nobody」「apache」「httpd」などはログインシェルは設定されていない(/bin/falseや/sbin/nologinなど)ので環境変数など設定できるわけもなくLANGはデフォルトの「C」(=ascii)であるので、pythonの文字コードもasciiとなる。
なので、CGIで日本語を含む文字列を出力しようとしたら例のごとく
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-14: ordinal not in range(128)
となってしまう。
ソースの先頭のほうに以下を追記する。標準出力とエラー出力のエンコードをUTF-8に設定している
import io,sys
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
sys.stderr = io.TextIOWrapper(sys.stderr.buffer, encoding='utf-8')
※importで呼び出す側およびにimportで呼び出される側両方のソースに上記コードを記載すると、だんまりエラーで異常終了するので注意!(エラーメッセージ出ず。例外処理も効かない。)
ファイルに出力するときもpythonの文字コードがasciiになってしまっているが、上記方法では補正できない。
ファイル出力の文字コードを正しいものに修正するには、ファイルオープン時に文字コードを指定する。
fh=open("hoge.txt","a",encoding='utf-8')
]]>>>> fhinput = open("eucsample.txt","r")
>>> fhinput.read()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/python3/lib/python3.4/codecs.py", line 313, in decode
(result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xa4 in position 0: invalid start byte
>>> fhinput.close()
ファイルを開く際にバイナリモードで開けばread()メソッドの型はバイナリ(bytes)型になるので、python2の頃と同様にファイルの内容を変数に格納できるので総当りでdecode(文字コード変換)に挑戦できる。以下のサンプルコードは文字コードEUCのファイルをバイナリで開いて総当り文字コード変換を試みた例。
>>> fhinput = open("eucsample.txt","rb")
>>> htmlbytes=fhinput.read()
>>> htmlbytes
b'\xa4\xa2\xa4\xa2\xa4\xa2\xa4\xa2\xa4\xa2\xa4\xa2\xa4\xa2\xa4\xa2\xa4\xa2\xa4\xa2\xa4\xa2\xa4\xa2\xa4\xa2\xa4\xa2\xa4\xa2\xa4\xa2\xa4\xa2\xa4\xa2\xa4\xa2\xa4\xa2\xa4\xa2\xa4\xa2\xa4\xa2\xa4\xa2\n\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\n\xa4\xa6\xa4\xa6\xa4\xa6\xa4\xa6\xa4\xa6\xa4\xa6\xa4\xa6\xa4\xa6\xa4\xa6\xa4\xa6\xa4\xa6\xa4\xa6\xa4\xa6\xa4\xa6\xa4\xa6\xa4\xa6\xa4\xa6\xa4\xa6\xa4\xa6\xa4\xa6\xa4\xa6\xa4\xa8\n\xa4\xa8\xa4\xa8\xa4\xa8\xa4\xa8\xa4\xa8\xa4\xa8\xa4\xa8\xa4\xa8\xa4\xa8\xa4\xa8\xa4\xa8\xa4\xa8\xa4\xa8\xa4\xa8\n\xc8\xf8\xa4\xaa\xa4\xaa\xa4\xaa\xa4\xaa\xa4\xaa\xa4\xaa\xa4\xaa\xa4\xaa\xa4\xaa\xa4\xaa\xa4\xaa\xa4\xaa\xa4\xaa\xa4\xaa\xa4\xaa'
>>> htmlbytes.decode('shift_jisx0213')
'、「、「、「、「、「、「、「、「、「、「、「、「、「、「、「、「、「、「、「、「、「、「、「、「\n、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、\n、ヲ、ヲ、ヲ、ヲ、ヲ、ヲ、ヲ、ヲ、ヲ、ヲ、ヲ、ヲ、ヲ、ヲ、ヲ、ヲ、ヲ、ヲ、ヲ、ヲ、ヲ、ィ\n、ィ、ィ、ィ、ィ、ィ、ィ、ィ、ィ、ィ、ィ、ィ、ィ、ィ、ィ\nネ?ェ、ェ、ェ、ェ、ェ、ェ、ェ、ェ、ェ、ェ、ェ、ェ、ェ、ェ、ェ'
>>> htmlbytes.decode('iso2022jp')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'iso2022_jp' codec can't decode byte 0xa4 in position 0: illegal multibyte sequence
>>> htmlbytes.decode('euc_jisx0213')
'ああああああああああああああああああああああああ\nいいいいいいいいいいいいいい いいいいいいいいいいいい\nうううううううううううううううううううううえ\nええええええええええええええ\n尾おおおおおおおおおおおおおおお'
EUCのはずなのにshift_jisx0213で成功してしまってますが・・・
総当りで文字コード変換に挑戦するコードの例は以下。
def conv_charset_file(inputfile,outputfile):
try:
fhinput = open(inputfile,"rb")
htmlbytes = fhinput.read()
fhinput.close()
except:
return None,"文字コード変換できません"
codelst = ('utf_8','euc_jisx0213','shift_jisx0213','iso2022jp','iso2022_jp_ext','iso2022_kr','big5','big5hkscs','johab','euc_kr','utf_16','iso8859_15','latin_1','ascii')
code = ""
for encoding in codelst:
try:
htmlstr = htmlbytes.decode(encoding) # bytes文字列から指定文字コードの文字列に変換
htmlstr = htmlstr.encode('utf-8') # uft-8文字列に変換
code=encoding
break
except:
pass
if code == "" :
return None,"文字コード変換できません"
try:
fhwrite = open(outputfile,"w")
fhwrite.write(htmlstr)
fhwrite.close()
except:
return None,"文字コード変換できません"
return code,None
ちなみにHTMLであればファイル内に文字コードが定義されているので、そこから文字コードを拾ってこればよいのでは思ってしまうが、そうはうまくいかない。内容を検索するには変数に格納しないといけないが、バイナリ型ではないと格納できない。またバイナリ型は文字列比較できないので、文字列型に変換しないといけないが、decodeせずに文字列に変換すると16進数表記をさらに「\」をエスケープされているので、全く別物の文字列と化してしまっている
>>> fhinput = open("eucsample.txt","rb")
>>> htmlbytes=fhinput.read()
>>> htmlbytes
b'\xa4\xa2\xa4\xa2\xa4\xa2\xa4\xa2\xa4\xa2\xa4\xa2\xa4\xa2\xa4\xa2\xa4\xa2\xa4\xa2\xa4\xa2\xa4\xa2\xa4\xa2\xa4\xa2\xa4\xa2\xa4\xa2\xa4\xa2\xa4\xa2\xa4\xa2\xa4\xa2\xa4\xa2\xa4\xa2\xa4\xa2\xa4\xa2\n\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\xa4\n\xa4\xa6\xa4\xa6\xa4\xa6\xa4\xa6\xa4\xa6\xa4\xa6\xa4\xa6\xa4\xa6\xa4\xa6\xa4\xa6\xa4\xa6\xa4\xa6\xa4\xa6\xa4\xa6\xa4\xa6\xa4\xa6\xa4\xa6\xa4\xa6\xa4\xa6\xa4\xa6\xa4\xa6\xa4\xa8\n\xa4\xa8\xa4\xa8\xa4\xa8\xa4\xa8\xa4\xa8\xa4\xa8\xa4\xa8\xa4\xa8\xa4\xa8\xa4\xa8\xa4\xa8\xa4\xa8\xa4\xa8\xa4\xa8\n\xc8\xf8\xa4\xaa\xa4\xaa\xa4\xaa\xa4\xaa\xa4\xaa\xa4\xaa\xa4\xaa\xa4\xaa\xa4\xaa\xa4\xaa\xa4\xaa\xa4\xaa\xa4\xaa\xa4\xaa\xa4\xaa'
>>> import re
>>> regcheck=re.compile('content="text/html; *?charset="*(.+?)"',re.I|re.S|re.M)
>>> regcheck.search(htmlbytes)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: can't use a string pattern on a bytes-like object
>>> regcheck.search(str(htmlbytes))
>>>
>>> str(htmlbytes)
"b'\\xa4\\xa2\\xa4\\xa2\\xa4\\xa2\\xa4\\xa2\\xa4\\xa2\\xa4\\xa2\\xa4\\xa2\\xa4\\xa2\\xa4\\xa2\\xa4\\xa2\\xa4\\xa2\\xa4\\xa2\\xa4\\xa2\\xa4\\xa2\\xa4\\xa2\\xa4\\xa2\\xa4\\xa2\\xa4\\xa2\\xa4\\xa2\\xa4\\xa2\\xa4\\xa2\\xa4\\xa2\\xa4\\xa2\\xa4\\xa2\\n\\xa4\\xa4\\xa4\\xa4\\xa4\\xa4\\xa4\\xa4\\xa4\\xa4\\xa4\\xa4\\xa4\\xa4\\xa4\\xa4\\xa4\\xa4\\xa4\\xa4\\xa4\\xa4\\xa4\\xa4\\xa4\\xa4\\xa4\\xa4\\xa4\\xa4\\xa4\\xa4\\xa4\\xa4\\xa4\\xa4\\xa4\\xa4\\xa4\\xa4\\xa4\\xa4\\xa4\\xa4\\xa4\\xa4\\xa4\\xa4\\xa4\\xa4\\xa4\\xa4\\n\\xa4\\xa6\\xa4\\xa6\\xa4\\xa6\\xa4\\xa6\\xa4\\xa6\\xa4\\xa6\\xa4\\xa6\\xa4\\xa6\\xa4\\xa6\\xa4\\xa6\\xa4\\xa6\\xa4\\xa6\\xa4\\xa6\\xa4\\xa6\\xa4\\xa6\\xa4\\xa6\\xa4\\xa6\\xa4\\xa6\\xa4\\xa6\\xa4\\xa6\\xa4\\xa6\\xa4\\xa8\\n\\xa4\\xa8\\xa4\\xa8\\xa4\\xa8\\xa4\\xa8\\xa4\\xa8\\xa4\\xa8\\xa4\\xa8\\xa4\\xa8\\xa4\\xa8\\xa4\\xa8\\xa4\\xa8\\xa4\\xa8\\xa4\\xa8\\xa4\\xa8\\n\\xc8\\xf8\\xa4\\xaa\\xa4\\xaa\\xa4\\xaa\\xa4\\xaa\\xa4\\xaa\\xa4\\xaa\\xa4\\xaa\\xa4\\xaa\\xa4\\xaa\\xa4\\xaa\\xa4\\xaa\\xa4\\xaa\\xa4\\xaa\\xa4\\xaa\\xa4\\xaa'"
]]><graphics type='vnc' port='-1' autoport='yes' /><graphics type='vnc' port='-1' autoport='yes' keymap='ja'/>
]]>| KVM |
|
| OVM for SPARC |
|
OVM for SPARCのほうが割り当てリソースなども表示されるので便利
| KVM |
|
| KVM |
|
OVM for SPARCにはストレージプールの概念はない。
| KVM |
|
| KVM |
# virsh net-list
名前 状態 自動起動 永続
--------------------------------------------------
default 動作中 はい (yes) はい (yes)
|
| KVM |
# virsh iface-list --all
名前 状態 MAC アドレス
--------------------------------------------
br0 動作中 00:23:54:73:13:30
eth1 停止状態 00:1b:21:a1:85:0c
eth2 停止状態 00:40:26:f9:7e:ea
lo 動作中 00:00:00:00:00:00
|
| OVMforSPARC |
|
正直、GUI(仮想マシンマネージャ)から管理したほうが楽ですよ。どうせ仮想マシンのGUIコンソール使うんだし。現場がSSHしかリモート接続許可していないとか、CUI萌え~な人はどうぞ。
| KVM |
例
|
| OVM for SPARC |
※先にゲストドメインを作ってあげないといけない。 |
| KVM | ※実行前にブート可能なCDROMイメージを用意すること
例 失敗してますが・・・
/etc/libvirt/qemu以下に仮想マシン定義のxmlファイルができている
|
| OVM for SPARC |
|
| KVM |
※「^]」はctrl+] |
| OVM for SPARC | ※CONS列の番号がポート番号
|
| KVM |
※acpiを有効にしておかないとシャットダウンできない |
| OVM for SPARC |
|
| KVM |
|
| KVM |
|
ダメだ。ぜんぜんまとまってない・・・
nnmconfigexport.ovpl -c all -f [出力するフォルダパス]nnmconfigimport -f [xmlファイルがあるフォルダパス]