既存のOpenVZテンプレートのファイルをアップデートする

OpenVZで作成されたテンプレートを更新する。

参考: OpenVZ wiki: Updating Debian template

1. OpenVZの仮想ホストを作成

# vzctl create VID番号 --ostemplate テンプレート名

上記のテンプレート名は/var/lib/vz/template/cache/ にあるtar.gzファイルの名前を使用する。

実行例

# vzctl create 555 --ostemplate scientific-6-standard_6.0_i386
Creating container private area (scientific-6-standard_6.0_i386)
Performing postcreate actions
Saved parameters for CT 555
Container private area was created
#

2014/11/27 追記

/etc/vz/vz.confの設定によっては下記の様に、パラメータが足らないというエラーがでます。

# vzctl create 555 --ostemplate centos-6-standard_6.0-20121116_i386
Creating container private area (centos-6-standard_6.0-20121116_i386)
Initializing quota ...
Error: Not enough parameters, diskspace quota not set
Creation of container private area failed
#

/etc/vz/vz.confに下記のようにDISKSPACE設定とDISKINODES設定を追加することで、回避できます。

DISKSPACE="20G:22G"
DISKINODES="4000000:4400000"

(バージョンによってはvzctl createオプションでdiskspaceは指定できても、diskinodesが指定できない

2014/11/27 追記終


2. 仮想ホストにIPアドレスとDNSサーバを指定する

# vzctl set VID番号 --ipadd IPアドレス --nameserver DNSサーバIP --save

実行例

# vzctl set 555 --ipadd 192.168.x.x --nameserver 192.168.x.x --save
Saved parameters for CT 555
#

3. 仮想マシンを稼働させる

# vzctl start 555
Starting container ...
Container is mounted
Adding IP address(es): 192.168.35.240
Setting CPU units: 1000
File resolv.conf was modified
Container start in progress...
#

2014/11/27 追記

バージョンによっては、以下のようなエラーとなる場合がある。

# vzctl start 555
Error: required UB parameter kmemsize not set
Error: required UB parameter lockedpages not set
Error: required UB parameter privvmpages not set
Error: required UB parameter shmpages not set
Error: required UB parameter numproc not set
Error: required UB parameter physpages not set
Error: required UB parameter vmguarpages not set
Error: required UB parameter oomguarpages not set
Error: required UB parameter numtcpsock not set
Error: required UB parameter numflock not set
Error: required UB parameter numpty not set
Error: required UB parameter numsiginfo not set
Error: required UB parameter tcpsndbuf not set
Error: required UB parameter tcprcvbuf not set
Error: required UB parameter othersockbuf not set
Error: required UB parameter dgramrcvbuf not set
Error: required UB parameter numothersock not set
Error: required UB parameter numfile not set
Error: required UB parameter dcachesize not set
Error: required UB parameter numiptent not set
#

この場合は、/etc/vz/conf/に作成されている該当CIDの.confファイルに下記のエントリーを追記しておくといい。

PHYSPAGES="0:1024M"
SWAPPAGES="0:512M"
KMEMSIZE="465M:512M"
DCACHESIZE="232M:256M"
LOCKEDPAGES="512M"
PRIVVMPAGES="unlimited"
SHMPAGES="unlimited"
NUMPROC="unlimited"
VMGUARPAGES="0:unlimited"
OOMGUARPAGES="0:unlimited"
NUMTCPSOCK="unlimited"
NUMFLOCK="unlimited"
NUMPTY="unlimited"
NUMSIGINFO="unlimited"
TCPSNDBUF="unlimited"
TCPRCVBUF="unlimited"
OTHERSOCKBUF="unlimited"
DGRAMRCVBUF="unlimited"
NUMOTHERSOCK="unlimited"
NUMFILE="unlimited"
NUMIPTENT="unlimited"

2014/11/27 追記終


4. 仮想マシンにログインする

# vzctl enter 555
entered into CT 555
[root@ホスト名 /]#

5. yum updateを実施

# yum update
sl                                                       | 3.2 kB     00:00
sl/primary_db                                            | 3.1 MB     00:12
sl-security                                              | 1.9 kB     00:00
sl-security/primary_db                                   | 5.8 MB     00:12
Setting up Update Process
Resolving Dependencies
<略>
Transaction Summary
================================================================================
Install       0 Package(s)
Upgrade      32 Package(s)

Total download size: 46 M
Is this ok [y/N]: y
Downloading Packages:
<略>
  tzdata.noarch 0:2011h-3.el6

Complete!
[root@ns5 /]#

6. 追加したい設定があったらやっとく
・phpをインストール
・/etc/php.iniに「date.timezone = Asia/Tokyo」の設定を追加
・「ln -s /usr/share/zoneinfo/Asia/Tokyo /etc/localtime」
・/etc/sysconfig/i18nに「LANG=”ja_JP.UTF-8″」を追加

7. 掃除

# yum clean all
Cleaning up Everything
# echo > /etc/resolv.conf
#

8. 仮想ホストの停止

# vzctl stop 555
Stopping container ...
Container was stopped
Container is unmounted
#

9. 仮想ホストからIPアドレス設定を削除

# vzctl set 555 --ipdel all --save
Saved parameters for CT 555
#

10. 仮想ホストのファイルが展開されている場所に移動

# cd /var/lib/vz/private/555
#

11. テンプレートとしてtar.gzファイルを作成

#  tar --numeric-owner -czf /var/lib/vz/template/cache/scientific-6-standard_6.0-20111026_i386.tar.gz .
#

なお、ファイル名は重要。

「ディストリビューション名」-「ディストリビューションのバージョン」-「カスタマイズ説明」_「カスタマイズのバージョン」_「アーキテクチャ」.tar.gz

という書式で指定する。
そうしないと、Proxmoxでは、テンプレートとして指定できない。

12. 使用した仮想マシンの削除

# vzctl destroy 555
Destroying container private area: /var/lib/vz/private/555
Container private area was destroyed
#

13. /etc/vz/conf/に残る仮想マシンの設定ファイルを削除

# rm /etc/vz/conf/555.conf.destroyed
#

muninで作ったrrdデータを個別にグラフ化

muninというリソースモニタリングプログラムシステム。
このシステムは、取得したデータをRRDtoolを利用して保存し、グラフ化しています。

これで取得したデータを、個別でグラフ化したいと思って、探したところ、以下の様な感じになりました。

# /usr/bin/rrdtool graph /home/osakanataro/web/nise/load.png --imgformat=PNG --start=-86400 --end=-300 --base=1000 --height=100 --width=200 --upper-limit=5 --title="負荷状況" DEF:load="/var/lib/munin/localhost/localhost-load-load-g.rrd":42:AVERAGE CDEF:ok=load,2.0,GT,UNKN,load,IF CDEF:ng=load,2.0,GT,load,UNKN,IF HRULE:2.0#0000FF AREA:ok#00CF00 AREA:ng#FF0000

これで作成したグラフは↓です。

ロードアベレージの推移を見たい、という感じのグラフです。
これを作った当初はload averageが5ぐらいに行くことがあったので、5を最大(–upper-limit=5)としています。

Proxmox上のOpenVZ仮想マシンのバックアップ

2025/04/17 追記

最近この記事へのアクセスが微妙にあるので、注釈を入れておきます。

この記事で紹介しているものは、2025年現在のProxmox環境ではサポートされていないOpenVZ仮想マシンをバックアップする際の手法について書いたものです。

vzdumpコマンドは残っていますが、仮想マシン一覧を取得するvzlistはなくなっています。

一覧を qm listなどに置き換える、また、バックアップ保存先へのアップロード手法を lftp ではなくほかの手法にする、などを行うことで2025年で使える内容になるかと思います。

参考資料: PVE 8.3.5環境で実行したvzdumpコマンドのログ例

root@pve3:~# qm list
      VMID NAME                 STATUS     MEM(MB)    BOOTDISK(GB) PID       
       101 windows-zfs          stopped    8092              60.00 0         
       103 linux2-ceph          stopped    2048              40.00 0         
       105 wintest3-nfs         stopped    2048              40.00 0         
root@pve3:~# vzdump --dumpdir /mnt/pve/ontap 103
INFO: starting new backup job: vzdump 103 --dumpdir /mnt/pve/ontap
INFO: Starting Backup of VM 103 (qemu)
INFO: Backup started at 2025-04-17 15:06:25
INFO: status = stopped
INFO: backup mode: stop
INFO: ionice priority: 7
INFO: VM Name: linux2-ceph
INFO: include disk 'scsi0' 'cephpool:vm-103-disk-0' 40G
INFO: creating vzdump archive '/mnt/pve/ontap/vzdump-qemu-103-2025_04_17-15_06_25.vma'
INFO: starting kvm to execute backup task
INFO: started backup task '930f41bc-3a8d-4ec6-b998-a1ec012a9c0a'
INFO:   6% (2.7 GiB of 40.0 GiB) in 3s, read: 912.7 MiB/s, write: 99.1 MiB/s
INFO:   8% (3.3 GiB of 40.0 GiB) in 6s, read: 201.6 MiB/s, write: 73.6 MiB/s
INFO:  30% (12.3 GiB of 40.0 GiB) in 9s, read: 3.0 GiB/s, write: 64.6 MiB/s
INFO:  31% (12.6 GiB of 40.0 GiB) in 12s, read: 116.0 MiB/s, write: 116.0 MiB/s
INFO:  54% (21.6 GiB of 40.0 GiB) in 15s, read: 3.0 GiB/s, write: 53.8 MiB/s
INFO:  55% (22.1 GiB of 40.0 GiB) in 19s, read: 115.2 MiB/s, write: 114.9 MiB/s
INFO:  56% (22.4 GiB of 40.0 GiB) in 22s, read: 111.8 MiB/s, write: 111.8 MiB/s
INFO:  71% (28.5 GiB of 40.0 GiB) in 26s, read: 1.5 GiB/s, write: 89.6 MiB/s
INFO:  77% (31.0 GiB of 40.0 GiB) in 29s, read: 877.2 MiB/s, write: 95.0 MiB/s
INFO:  78% (31.4 GiB of 40.0 GiB) in 32s, read: 120.8 MiB/s, write: 120.3 MiB/s
INFO: 100% (40.0 GiB of 40.0 GiB) in 2m 54s, read: 62.1 MiB/s, write: 537.0 KiB/s
INFO: backup is sparse: 36.98 GiB (92%) total zero data
INFO: transferred 40.00 GiB in 174 seconds (235.4 MiB/s)
INFO: stopping kvm after backup task
INFO: archive file size: 3.03GB
INFO: Finished Backup of VM 103 (00:02:56)
INFO: Backup finished at 2025-04-17 15:09:21
INFO: Backup job finished successfully
INFO: notified via target `mail-to-root`
root@pve3:~# ls -l /mnt/pve/ontap/
total 3187656
-rw-r--r-- 1 root root       1978 Apr 17 15:06 vzdump-qemu-103-2025_04_17-15_06_25.log
-rw-r--r-- 1 root root 3251337728 Apr 17 15:06 vzdump-qemu-103-2025_04_17-15_06_25.vma
root@pve3:~# 

Proxmox VEにはOpenVZ仮想マシンのバックアップを容易に取れるように、専用ツールvzdumpが用意されている。
このvzdumpは、OpenVZのwikiにも掲載されているぐらいの便利ツールのようです。

vzdumpでバックアップを行うと、各仮想マシンごとにtarファイルができあがります。

さて、このバックアップファイルを、Proxmoxサーバ内部に残しておくとバックアップの意味がないので、外部サーバに転送しましょう。
NFSでマウントした先にコピーというのが一番簡単なやりかたですが、安いNASだとNFSに対応していない場合があります。

まぁ、具体的にはLinkStationをバックアップ先にしたいです。
この場合、CIFS、ftp、そして、rsync(LinkStationは「バックアップ」と呼ばれている)で転送することができますが、無難なあたりでftpで転送する、とします。

そんなスクリプトを作りました

仕様
・ftpサーバに指定ユーザ・パスワードでログインする
・バックアップは10世代保存とする。
・起動中の仮想マシンのみバックアップする
・Proxmoxサーバ内にバックアップイメージを作成するが、容量が少なく済むように1個ずつ実施する
・lftpを使ってアップロードするので、「aptitude install lftp」でインストールしておく

#!/bin/bash
# vzdump and ftp upload script
#
DUMPDIR="/work"
UPLOADDIR="/disk1/backup/dump"

FTPHOST="IPアドレス"
FTPUSER="ユーザ名"
FTPPASSWORD="パスワード"

cd $DUMPDIR
vzlist > vzlist.log

# create upload directory
lftp -c "open -u $FTPUSER,$FTPPASSWORD $FTPHOST
mkdir $UPLOADDIR/transfer"

# dump and upload virtual machine
# "vzlist -1" : dump active VM only
# "vzlist -a -1": dump all VM
# "vzlist -S -1": dump standby VM only
for hostid in `vzlist -1`
do
	echo $hostid;
	cd $DUMPDIR
	vzdump --dumpdir $DUMPDIR $hostid
	lftp -c "open -u $FTPUSER,$FTPPASSWORD $FTPHOST
cd $UPLOADDIR/transfer
mput -E *.tar *.log"
done

# lotate
lftp -c "open -u $FTPUSER,$FTPPASSWORD $FTPHOST
cd $UPLOADDIR
rm -r daily.9
mv daily.8 daily.9
mv daily.7 daily.8
mv daily.6 daily.7
mv daily.5 daily.6
mv daily.4 daily.5
mv daily.3 daily.4
mv daily.2 daily.3
mv daily.1 daily.2
mv daily.0 daily.1
mv transfer daily.0"

上記スクリプトは毎日夜間に実行するつもりのものなので、NetAppライクに「daily.数字」という感じでディレクトリを作成しています。

自ホスト宛のメールだけど他のメールサーバに飛ばしたい

自ホスト宛の、通常だとローカル配送になるようなメールだけど、自分では受け取らず、他のメールサーバに飛ばしたい、という時に、sendmailにする設定内容。

sendmailの場合

/etc/mail/sendmail.mc の最後に以下を追加する。

define(`LOCAL_RELAY',`smtp:送付先サーバ名')
dnl LOCAL_USER(`root')
dnl define(`MAIL_HUB',`smtp:送付先サーバ名')
dnl FEATURE(`stickyhost')dnl

この設定にした場合
・ユーザ名@自ホスト のメールは送付先サーバ名に指定したところに送付
・ユーザ名@他ドメイン のメールは、普通にDNSのMXを見て配送

gmailとかにメールを委託している時にも使えることかと思われる。

IEEE802.15.4とTCP/IP

Ben Nano Noteは単独ではネットワークに接続できず、PCにUSB接続してブリッジするか、それともmicroSDカードサイズの無線LANカードを使うか、ということをする必要があります。

以前、auのau Wi-Fi WINカードが使えないかなぁ?と発売直後に入手してみましたが、ミツミ電機製のチップに対応したLinuxのドライバが発見できず、お蔵入りとなっていました。

そこに、新しい手法が現れました。

Ben WPANプロジェクトです。
IEEE 802.15.4準拠のチップを利用して、無線でTCP/IP通信を行おう、というものです。
Ben Nano Note側はmicroSDHCスロットを使用しますが、SDIOではありません。
便宜上「8:10 card」という名称にしていますが、microSDHCコネクタを利用して汎用I/Oを行わせちゃおう、というものです。

この技術を使って、IEEE 802.15.4チップを操作して、TCP/IP通信を行わせてしまうようです。

Ben Noteで、どういった感じなのかは、Ben WPANプロジェクトのwikiを見るよりはプロジェクトマネージャのWernerさんのページ「Ben-WPAN Overview」を見るとわかりやすいです。

Ben Note用基板: atben
PC用USBコネクタ基板: atusb
Linux用Device Driverは、Linux-zigbeeプロジェクト+ben-wpan kernel branchの修正

で、IPアドレスの部分は、基本IPv6で考えられているような感じで、「6LoWPAN(IPv6 over Low power Wireless Personal Area Networks)」という単語が頻繁に出てきます。

が、詳しくみてないので、よくわかりません。

おいおいもうちょっと調べていってみようかと思います。