転載・引用について

ユーザ用ツール

サイト用ツール


サイドバー

Site Contents Index

転載・引用について

RSS

os:xenserver:tips

XenServer Tips

XCP-ngで2TiB以上の大きさのDiskをVMに割り付ける

XCP-ng(おそらくはXenServerも)は、XCP-ng Consoleからは2TiB以上のVirtual DiskをVMに割り当てることができない。この場合の2TiBは「割り当てられた全てのVirtual Diskの容量の合計」であって、個々のVirtual Diskの容量ではないことに注意が必要である。

しかし、様々な事情により、4TiBのVirtual Diskを持つTimeMachine Backup用のVMを作成したい状況になってしまったので、対応策を以下に記載する。

準備

今回は、Boot用に10GiB、データ用に4TiBのVirtual Diskを持つVMを作成するものとする。

  1. XCP-ng Console等から新規VMを作成する。
  2. 普通通りにVMを作成すれば良いが、自動起動をOffにすることと、起動用の10GiBのDiskのみをVMにattachしておく。
  3. 作成が終了すれば、VMは起動されないので、準備完了

4TiBのDiskをAttachする

この作業はXCP-ng Consoleからはできないので、XCP-ngにloginし、CLIを駆使して作業する。

  1. xe sr-list name-label=NameOfNAS
    • ここで、SRのUUIDを取得する。取得したUUIDを以下 [SRuuid] と表記する
  2. vgs | awk '{print $1}' | grep [SRuuid]
    • ここで、VG名があることを確認する。取得したVG名を以下 [VGname] と表記する
  3. lvcreate -L4T -n“LV-“$(uuidgen) [VGname] –config global{metadata_read_only=0}
    • -L4T は容量が4Tということなので、自分の必要な容量を指定すること
  4. xe sr-scan uuid=[SRuuid]
    • XCP-ng側で新たに作成したLVを認識させる

これで、XCP-ng ConsoleのSRから新たに作成したVirtual Diskが見えるようになっているはずなので、XCP-ng consoleから確認し、準備で作成したVMにattachする

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

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.txt · 最終更新: 2019/09/24 14:06 by seirios