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


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)」という単語が頻繁に出てきます。

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

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

Linuxサーバにステータス表示パネルをつける 2017/01/12修正版



サーバの前面につけるような小型のLCDパネル。

どうやら「LCD Smartie」というらしい。

いくつかのベンダからパソコンにつながるようUSBポートをつけたキットが販売されている。

・LCD Smartieなどの表示機器屋の「MATRIX ORBITAL社
ラインナップがいろいろある
Character LCD Displays」2行~4行ぐらいの文字&グラフィック表示($36.08~)
External LCDs」2行~4行ぐらいの文字&グラフィック表示+操作ボタン($92.15~)
Graphic Touchscreen」2行~4行ぐらいの文字&グラフィック表示+タッチパネル操作($68.42~)
Economy Display」2行~4行ぐらいの文字&グラフィック表示の廉価版モデル($35.95~)
PC Bay Inserts」パソコンなどの前面パネルに埋め込む用のKit($64.26~)

MATRIX ORBITAL社製品用の「USB接続ドライバ」と「表示用のソフトウェア

・同じくLCD Smartieなどの表示機器屋のCrystalfontz社
ラインナップはMATRIX ORBITAL社製品と似たような感じで、価格も同じぐらい。
Webが見やすいので個別の製品群リンクは省略。
ユーザフォーラムがある

・sureelectronics社の20*4 LCD Display Board with UART Based USB(Edition llI)(DE-LP14113)
20文字*4行の表示で、1個 USD$26.00。
以前はいくつかラインナップがあったが、現在はもう1つ、16文字*2行の1602 LCD Display USB (Edition I) Smartie module PC Case
(DE-LP12111)
(USD$17.90)があるだけ。
CP2102を使ったUSBシリアル変換ボードとセットとなっており、miniUSBコネクタでパソコンと接続する感じになっている。
(USBシリアル変換部分のドライバはおそらく、CP210x USB – UART ブリッジ VCP ドライバ)

・Soundgraph社のiMON VFDシリーズ
Soundgraph社が業務転換してしまい、プロダクトが終了している

使うためのソフトは、何種類かある
LCD Smartie
Windows用ソフト。
“Crystalfontz”,”Matrix Orbital”,”HD44780チップ互換品”をサポートしているとのこと。
具体的な製品は後述のLCDprocの対応リストを見るとわかりやすい
2013年の更新が最後になっている。

smartie-utils
Tclで作成されたLinux用ソフトウェア、sureelectronics社のやつに対応している。
指定したシリアルポートにデータを流し込んで使う、という使い方のようで、sureelectronics社以外の似たようなやつにも対応するんじゃん?と書かれている。
2015年が最終更新だけど、ソースを見たところ、変更するポイントもなさそうなので、そんなもんかな、というところ。

LCDproc
Linux用で、2013年が最終更新。
LCD対応リストを見ると、いろんなデバイスに対応しているのがわかる。

LCD4Linux
やっぱりLinux用で2009年が最終更新。
LCD対応リスト
これみるとSureElectronicsのやつはMatrixOrbitalらしい。

・Crystalfontz社のフォーラムに「3rd Party Software Link」という形でいくつかのソフトウェアがリストされている。
LCDProc, LCD4Linux, LCD Smartieは、ドット絵も表示できるとのこと。
また、「 Crystalfontz LCD Display on a Raspberry Pi」にラズパイ向けの接続手法の記事もある。


以下は2011年5月20日に公開した旧版。
資料として残している。


サーバの前面につけるような小型のLCDパネル。

どうやら「LCD Smartie」というらしい。

いろいろなベンダからパソコンにつながるようUSBポートをつけたキットが販売されている。

・sureelectronics社のLCD Smartie Kit 20X4 White on Blue USB/UART Display PC Information
20文字*4行の表示で、1個 USD$17.99。
LCD Smartie Kitシリーズとして、いろいろラインナップがある模様。

・Soundgraph社のiMON VFD
日本でも入手可能

使うためのソフトは、何種類かある
LCD Smartie
Windows用ソフト。
“Crystalfontz”,”Matrix Orbital”,”HD44780チップ互換品”をサポートしているとのこと。
具体的な製品は後述のLCDprocの対応リストを見るとわかりやすい

smartie-utils
Linux用で、sureelectronics社のやつに対応しているようだ。

LCDproc
Linux用
LCD対応リスト

LCD4Linux
やっぱりLinux用。
LCD対応リスト
これみるとSureElectronicsのやつはMatrixOrbitalらしい。

・チップメーカのCrystalfontzがフォーラムに「3rd Party Software Link」という形で記載されている。
LCDProc, LCD4Linux, LCD Smartieは、ドット絵も表示できるらしい。

inotifywaitを使ってプログラム終了を検知する



Linux kernelにinotifyが組み込まれている環境では、inotify-tools パッケージ のinotifywaitを使って、パラレル実行した結果が全部終わるのを待ってから、次に進むようなスクリプトが作れるらしい。(kernel 2.6.13以降ならinotifyを使えるらしい)
inotify-tools

process1~process4までをいっぺんに並列実行して
それが全部終わったprocess5を実行させたい

#!/bin/bash
process1 &
process2 &
process3 &
process4 &

#ここで処理を待って

process5
exit

こんなスクリプトを書きたい場合・・・

#!/bin/bash
(process1; touch /tmp/myprocess/p1) &
(process2; touch /tmp/myprocess/p2) &
(process3; touch /tmp/myprocess/p3) &
(process4; touch /tmp/myprocess/p4) &

#ここで処理を待って
for i in {1..4}; do
  inotifywait -e CREATE -qq /tmp/myprocess/
done

process5
exit

説明!

  inotifywait -e CREATE -qq /tmp/myprocess/

ここは、/tmp/myprocess/ にファイルが作られたことを検知する。
/tmp/myprocess/ に何でもいいから1つファイルが作られるまで、待ちとなる。

この処理をfor文で4回繰り返している。つまり、ファイルが4つ作られるまでは、ここで待つことになる。

問題点
RHEL/CentOS5では、inotify-toolsが標準で入っていないこと。
コンパイルしてインストールする必要がある。

注!
このスクリプトは、例えば、100個ぐらい走らせたい処理があるけど、CPU coreが4つあるから、同時実行は4つとして、終わり次第次々に実行させていきたい。という場合には使えません。