転載・引用について

ユーザ用ツール

サイト用ツール


サイドバー

Site Contents Index

転載・引用について

RSS

os:xenserver:tips

文書の過去の版を表示しています。


XenServer Tips

XCP-ngでlocaldiskの処理をする

XCP-ng環境において(おそらくXenServerでもそのまま適用できるはず)、あるXenServer hostにlocal storageを追加する必要に迫られることがある。 この時に、以下の状況が発生して酷い目にあうことがあるので、復旧方法のメモを。

  1. XenServerでPoolを組んでいる
    • ここでは、Pool masterをXS-M/その他のサーバーとしてXS-Sの2台でPoolを構成していると仮定する
  2. Pool masterではないPool構成ServerにLocal Diskを追加して、それを認識させる
    • XS-Sに2TのDiskを接続し、Local SRとしてVMを設定する。接続されたDiskが仮に、sdbとして認識されたとする
    • Diskとしてどう認識されたのか、はdmesgなどを利用して確認すること。いくつかの手段は後述する
  3. 新たに接続したDiskをLocal SR(name-label=Local-Add-1)として認識させる
  4. VMなどを設置して稼働させる
  5. なんらかの理由でXS-Sから追加したLocal-Add-1が消えた
    • 今回は、XCP-ngのUpdate時にうまく更新ができず、一度Poolから外してPoolに再度接続したら事象が発生した

このような局面で、通常通りにLocal SRを構築してしまうと、Local-Add-1に記録されたVMのDisk Imageがなくなってしまい、痛い思いをすることになる。

というわけで、ここでは、

  1. Local SRの作り方
  2. 切り離されたLocal SRをReAttachする方法

を記述する

Local SRの作り方

  • HDDをXS-Sに接続する
    • 近年では、Hot Plugができる筐体とMotherBoardが普及しているので、rebootしないで済む可能性がある
  • dmesg コマンドやcat /proc/partitions などから、新たに接続されたDeviceのdevice nameを確認する
    • どのDiskが新しいDiskかを判断するのは実は結構難しい。
    • 個人的には、dmesgを利用してDevice nameを確認し、/proc/partitionの当該の#blocksを見て容量から正誤判断することが多い
  • ls -l /dev/disk/by-idの出力を確認し、Symbolic Linkの出力を見ながら、DiskのLabelを確認する。
    • 今回は、wwn-0xzzzzzzzzzzzzzzzz → ../../sdbから、DiskのLabelがwwn-0xzzzzzzzzzzzzzzzzであるとする
  • xe host-listを実行し、XS-Sのhost-UUIDを取得する
    • 今回は、host-uuidがyyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyyであるとする。
  • xe sr-create name-label=“Local-Add-1” type=lvm device-config:device=/dev/disk/by-id/wwn-0xzzzzzzzzzzzzzzzz host-uuid=yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy を実行する
    • この時、追加したsdbはlvmで初期化されてしまうことに注意
    • 通常は問題にならないが、Partitionが分離されている場合、注意すること

これで、XCP-ng Center(XenCenter)の左側のペイン(Resource Pain)のXS-Sに、Local-Add-1が追加される

(おまけ) 追加したLocal Storageを完全に切り離す方法

  • xe sr-list name-label=“Local-Add-1” を実行し、SRのUUIDを取得する
    • SRのUUIDをxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxとする
  • xe pbd-list sr-uuid=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxを実行し、PBDのUUIDを取得する
    • PBDのUUIDをwwwwwwww-wwww-wwww-wwww-wwwwwwwwwwwwとする
  • xe pbd-unplug uuid=wwwwwwww-wwww-wwww-wwww-wwwwwwwwwwww を実行し、PBDを切り離す
  • xe sr-forget uuid=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx を実行し、SRを削除する
  • xe pbd-destroy uuid=wwwwwwww-wwww-wwww-wwww-wwwwwwwwwwww を実行し、PBDを削除する

これで、コマンドラインからlocal SRとLocal Diskを切り離せる。

切り離されたLocal SRをReattachする方法

ここで、切り離さ亜れたDiskをLocal SRとして再度認識させる方法を以下に記載する

  1. pvdisplayを実行する
    • 対象となる/dev/sdbのVG Nameを確認する。このVG Nameが存在しない場合、本件のScope外となるので色々調べてください。
    • ここでは、VG NameがVG_XenStorage-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxであるとする。
    • つまり、VG Name内に、SR-UUIDが記録されているということである。
  2. xe sr-introduce uuid=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx name-label=“Local-Add-1” type=lvmを実行して、SRを作成する
    • この段階で Resource PainにDisk Iconに×が付いた状態ではあるが、SRが認識される
  3. xe pbd-create host-uuid=yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy sr-uuid=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx device-config:device=/dev/disk/by-id/wwn-0xzzzzzzzzzzzzzzzz を実行し、PBDを作成する
    • これで、SRと物理Diskの接続が明確になる
    • PBDのUUIDが表示される。ここでは、vvvvvvvv-vvvv-vvvv-vvvv-vvvvvvvvvvvvとする
  4. xe pbd-list uuid=vvvvvvvv-vvvv-vvvv-vvvv-vvvvvvvvvvvvを実行し、PBDの状況を確認する
    • これで、Resource PainのXS-Sの所に、Local-Add-1×付きのまま移動する
    • currently-attachedがfalseであることに注意。
  5. xe pbd-plug uuid=vvvvvvvv-vvvv-vvvv-vvvv-vvvvvvvvvvvvを実行し、PBDを接続する
    • これで、Resource PainのXS-Sの所あった×が消える
    • Resource PainからLocal-Add-1を選択し、Storage Tabを確認すると、DiskのListが表示される
    • あとは、じっくり、正しいVMにDiskを接続していけばよい
  6. (おまけ) xe vdi-list sr-uuid=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxとすると、SR内に存在するVDI(Virtual Disk Image)が表示される。
    • Storage Tabで表示される情報が出る。

XCP-ng 7.5から7.5.1へのUpdate

  1. 以下のコマンドを実行
    • yum update -y
  2. Pool Masterを再起動
  3. Poolを構成するMaster以外のServerを再起動

XCP-ng 7.4から7.5へのUpgrade

    • 記事執筆時点で、7.6がRelease Candidateになっており、7.5系は7.5.1になっていることに注意。
    • 手順はおそらく変わらないだろうから、記載しておく。
  1. まず、対象poolのpool masterにsshなどでloginする
  2. xsconsoleコマンドを実行する
    1. Backup, Restore and Update を選択する
    2. Backup Virtual Machine Metadata を選択する
    3. Root passwordを入力する
    4. Backupファイルを設置するSRを選択する。今回は local storage
    5. 数分待つ
    6. QUITする
  3. 別の手段としてCommandlineから xe pool-dump-database filename=[Filename].xml を実行
  4. 以下のコマンドを実行
    • wget https://updates.xcp-ng.org/7/xcp-ng-7.5.repo -O /etc/yum.repos.d/xcp-ng.repo
      yum clean metadata
      yum install xcp-ng-deps
      yum update
  5. Pool masterを再起動
  6. 以下、Poolに所属している他のServerも同様に更新する

XCP-ng上でのGuest VMのauto power on

  1. xe pool-list で、pool の uuid をゲット xe pool-list
  2. POOL上の auto startを有効化 xe pool-param-set uuid=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx other-config:auto_poweron=true
  3. 有効化したい VM でこれを実行 xe vm-param-set uuid=UUID other-config:auto_poweron=true

FV時にVMに割り当てるNICをe1000にする

http://www.netservers.net.uk/articles/open-source-howtos/citrix_e1000_gigabit

XenServer 6.2までの場合

mv /usr/lib/xen/bin/qemu-dm /usr/lib/xen/bin/qemu-dm.orig
vi /usr/lib/xen/bin/qemu-dm.sh

===== Start of qemu-dm.sh =====
#!/bin/bash
oldstring=$@
newstring=${oldstring//rtl8139/e1000}
exec /usr/lib/xen/bin/qemu-dm.orig $newstring
===== End of qemu-dm.sh =====

cp /usr/lib/xen/bin/qemu-dm.sh /usr/lib/xen/bin/qemu-dm

chmod 755 /usr/lib/xen/bin/qemu-dm
chattr +i /usr/lib/xen/bin/qemu-dm

XenServer 6.5からの場合

mv /usr/lib64/xen/bin/qemu-dm /usr/lib64/xen/bin/qemu-dm.orig
vi /usr/lib64/xen/bin/qemu-dm.sh

===== Start of qemu-dm.sh =====
#!/bin/bash
oldstring=$@
newstring=${oldstring//rtl8139/e1000}
exec /usr/lib64/xen/bin/qemu-dm.orig $newstring
===== End of qemu-dm.sh =====

cp /usr/lib64/xen/bin/qemu-dm.sh /usr/lib64/xen/bin/qemu-dm

chmod 755 /usr/lib64/xen/bin/qemu-dm
chattr +i /usr/lib64/xen/bin/qemu-dm

なお、qemu-dm.shは、環境変数に格納されている文字列の文字列置換を行っているので、bash以外で正しく動作する保証が無い

この方法でFV時のNICをe1000として認識させる場合、XenServerのupdate(HotFix)を適用するときに問題が出る場合がある。 これは、chattrを利用してqemu-dmを保護しているからである。従って、HotFix適用の際には、適用前に以下を実施する

*** XenServer 6.2まで ***
chattr -i /usr/lib/xen/bin/qemu-dm

*** XenServer 6.5から ***
chattr -i /usr/lib64/xen/bin/qemu-dm

この保護を入れる理由は、単純にUpdateされてしまい、qemu-dmが置き換えられてしまうと、NICがrtl8139に認識されるようになってしまうからである。つまり、あえてUpdateを失敗させて、やり直しできるようにするのが目的である。

MetaData Backup

  1. xsconsole
  2. Backup, Restore and Update
  3. Backup Virtual Machine Metadata

の順でメニューを選べばあとはみたまま。

Console画面を出す

[root@XenServ01 ~] xsconsole

xeでVMのNICをいじる

xeコマンドでVMのNICをいじる為のメモ。

AMDのブルドーザーコアマシンを使っていて、流石に古くなったので別のIntel XeonマシンにVMを移設した。 細かいところは今度まとめるので、テキストでメモ書き

xe vif-list						←とにかくvifのlistを取得する
xe vif-param-list uuid=....				←必要なvifを探す。見つけたら、network-uuid(3)をメモする
xe vm-list name-label="foo bar"				←とにかく、VMのUUIDを取得する(1)
xe vif-list vm-uuid=(1)					←VMに紐づいているvifのリストを取る
							 VIFのUUID(2)が列記される
xe vif-destroy uuid=(2)					←VMにattachされているVIFがなくなる
xe vif-create vm-uuid=(1) network-uuid=(3) mac=random device=0
							←device 0番に適当に作成(random)したmac addressを
							 つけ、新たなvifとしてVMにattachする

これで、既存のVMに割り当てているNICを置き換える事が出来る。

ということは、こんな事をすればVMをxeコマンドだけで作れるってことかもしれない

事前に、割り当てたいNetworkのUUID(D)を取得する
xe vm-install new-name-label="VM のラベル名" template="テンプレートのUUID名"	←VMのUUID(A)が出力される
xe vm-param-set uuid=(A) VCPUs-at-startup=1		←起動時のCPUは1つ
xe vm-param-set uuid=(A) VCPUs-max=1			←CPUの最大値は1つ
xe vm-param-set uuid=(A) memory-dynamic-max=1073741824	←Memoryは1G
xe vm-param-set uuid=(A) memory-dynamic-min=1073741824	←Memoryは1G
xe vm-param-set uuid=(A) memory-static-max=1073741824	←Memoryは1G
xe vm-param-set uuid=(A) memory-static-min=134217728	←Memoryは最小でも100M
xe sr-list						←SRのリストを取得。VMを作りたいSRのUUID(B)をメモる
xe vdi-create sr-uuid=(B) virtual-size=17179869184 type=system name-label=(VDI のラベル名) sharable=false
							←Diskの容量は16G、System Diskとしてラベルをつける
							 VDIのUUID(C)が出力される
xe vbd-create bootable=true device=xvda mode=RW type=Disk unpluggable=false vdi-uuid=(C) vm-uuid=(A)    
							←VBDを作成し、VMと結びつける
xe vif-create vm-uuid=(A) network-uuid=(D) mac=random device=0
							←VMにNetworkを割り当てる
xe vm-param-set uuid=(A) other-config:install-repository=http://mirror.centos.org/centos/6/os/x86_64
xe vm-param-set uuid=(A) PV-args="ksdevice=eth0"
xe vm-param-set uuid=(A) other-config:disable_pv_vnc=1
							←必要なパラメータをセットする
xe vm-start uuid=(A)					←VMを起動する
xe console uuid=(A)					←VMのConsoleに繋ぐ

あとはpif関連とかパラメータとかを理解すればいいのか。

MTUを9000にする

  • XenServ01のeth1のMTUを9000にする場合
[root@XenServ01 ~]# xe pif-list host-name-label=XenServ01 device=eth1
uuid ( RO)                  : xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
                device ( RO): eth1
    currently-attached ( RO): true
                  VLAN ( RO): -1
          network-uuid ( RO): hhhhhhhh-hhhh-hhhh-hhhh-hhhhhhhhhhhh

[root@XenServ01 ~]# xe pif-param-set uuid=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx other-config:mtu=9000
[root@XenServ01 ~]# 
  • これで再起動すれば eth1のMTUが9000になる
  • MTUを9000にしたものの、Switching HUBがMTU 9000に対応していないということはままあることですが、その時には、以下をどうぞ
[root@XenServ01 ~]# xe pif-list host-name-label=XenServ01 device=eth1
uuid ( RO)                  : xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
                device ( RO): eth1
    currently-attached ( RO): true
                  VLAN ( RO): -1
          network-uuid ( RO): hhhhhhhh-hhhh-hhhh-hhhh-hhhhhhhhhhhh

[root@XenServ01 ~]# xe pif-param-get uuid=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx param-name=other-config
: ; mtu: 9000;
[root@XenServ01 ~]# xe pif-param-clear uuid=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx param-name=other-config
[root@XenServ01 ~]# xe pif-param-get uuid=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx param-name=other-config

[root@XenServ01 ~]# 
  • これでパラメータが消えます。ので、再起動してください。
    • 当然、NFSやiSCSIもMTUを1500にしておくほうがいいですよ。
  • なお、Xenに限らず、iSCSIやNFSを利用するなら、Networkを独立させて、かつJumbo Packetを通せるSwitchにしておくほうが性能が出ます。

Open vSwitchのメモ

  1. XenServer(XCP)内のOpen vSwitchの状況を確認する
    • brctl show
    • ovs-vsctl show

詳しいことは、これから調査…

このウェブサイトはクッキーを使用しています。 Webサイトを使用することで、あなたはあなたのコンピュータにクッキーを保存することに同意します。 また、あなたはあなたが私たちのプライバシーポリシーを読んで理解したことを認めます。 同意しない場合はウェブサイトを離れてください。クッキーに関する詳細情報
os/xenserver/tips.1546535325.txt.gz · 最終更新: 2019/01/20 00:02 (外部編集)