トップ 最新 追記

TPRG: 迷走メモ書き

[Donate to CCjp]
2000|12|
2001|01|02|03|04|05|06|07|08|09|10|11|12|
2002|01|02|03|04|05|06|07|08|09|10|11|12|
2003|02|03|04|05|06|07|08|09|10|11|12|
2004|01|02|03|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|07|08|11|12|
2009|01|02|
2010|04|06|09|

2010-04-10

_ [misc] 復活するかも?

長らく止まってましたが、 ここにまた技術メモでも書いていきたいところ。 まとめないとどんどん抜け落ちていってしまう。

しかし、RD をずっと書いていなかったら、書き方忘れている! RD は emacs の rd-mode じゃないと書きにくいね。

_ [linux] autossh + daemontools で ssh トンネルを維持する

と言うわけで設定メモを書いていこう。

某所で MySQL のレプリケーションを ssh のトンネル経由でやっていたのだけど、 これをようやく自動化してみたのでその記録。

まず、ssh 接続の監視と張り直しをしてくれる autossh を使う。これは、基本的に子プロセスとして ssh を上げ続けてくれる。 内部的には -L と -R を組み合わせたループを作って、定期的(標準10分) おきにネットワークの疎通をチェックし、子プロセスの ssh が死んだり ネットワークが切れたりした場合は ssh を再起動する。

これだけで十分に見えるかもしれないけど、autossh は以下の条件で親の autossh 自体が終了してしまう。

  • 最初に起動した ssh があまりに早く(AUTOSSH_GATETIME, 標準30秒)以内に終了した場合
  • 子プロセスの ssh が直接 SIGTERM, SIGKILL, SIGINT を受け取った場合
  • 以下2つは標準では無制限なので気にしなくて良いけど、まあ一応
    • 起動時間が AUTOSSH_MAXLIFETIME に達した時
    • ssh の再起動回数が AUTOSSH_MAXSTART に達した時

基本的には、こういう事が起きても意図的に止め無い限り再試行して欲しいので、 autossh をさらに daemontools から起動させる。以下のような run スクリプトを書いておく。

#!/bin/sh
set -e
AUTOSSH_POLL=60
export AUTOSSH_POLL
exec 2>&1
exec > /dev/null
exec setuidgid repl \
	autossh target.host.name.jp \
	-l sugi -i /etc/autossh-tunnel/path_to_ssh_key_without_pass \ 
	-N -T -x -a -L 13306:localhost:3306 \
	-o BatchMode=yes -o TCPKeepAlive=yes
sleep 30
  • sleep は autossh が即座に終了した場合に、再試行までちょっと待つために入れてある。"svc -d" で止めた時はすぐに終わるから大丈夫。
  • 一応ポーリング間隔を短くしておく。
  • ssh が新しくて、-y オプションが使えるなら付けておいた方が良さそう。lenny ではまだ無いけど。
  • setuidid は自分の環境に合わせて変える必要あり。
  • envdir を使っていないのは単に趣味です。

2010-04-18 追記

-c blowfish オプションを追加。この方が早いので。

2010-06-03 追記

……というのは ssh1 時代の古い話だった。 ssh2 なら勝手に選んでくれる(おまけに blowfish じゃない方がいい)ので -c は削除。


2010-04-11 btrfs をバックアップに使ってみる

_ [linux] btrfs をバックアップに使ってみる

2010-09-22 追記: スクリプトともう少し詳しい記事書いたよ

btrfs は面白そうだけど、いきなり重要な所に使うのは怖い、 と言う事で家のバックアップハーティションを btrfs にしてみた。 透過圧縮もサポートしてるし、cow だからバックアップには向いてそう。

方針

btrfs のサブボリュームというのは、単にメインボリュームの中のサブディレクトリとして見える。 そして、スナップショットはボリューム単位で作成可能で、 これもまた単にディレクトリに見える(と言うか、呼び方は違うが実質はサブボリューム)。

と言う事で、

  • バックアップ対象ごとにサブボリュームを作る
  • 毎日 rsync でそのサブボリュームにコピー
  • そのサブボリュームのスナップショットを保存

単純にこれだけで pdumpfs や faubackup とか rsync --link-dest と同じ事が高速かつ手軽に出来るはず。

バックアップスクリプト

例えばこんなの。 重要なのは最後の3行なので、そこだけ見ればOK。

#!/bin/bash
set -e

backup_base=/backup
target="${1%/}"
shift
if (echo "${target}" | egrep -q "^[0-9a-zA-Z.-]+:"); then
  host=${target%:*}
  dest="${target#*:}"
else
  host=$(hostname)
  dest="${target}"
fi
dest="${dest////_}"
dest="${backup_base}/${host}/${dest#_}"

if [ -z "${target}" ]; then
  echo "Usage: $0 <target_dir> [rsync-options]" >&2
  exit 255
fi

if [ ! -d "${dest}" ]; then
  mkdir -p "${dest}"
fi

if [ ! -d "${dest}/cur" ]; then
  btrfsctl -S cur "${dest}"
fi || true

rsync -acSHXA --numeric-ids --del "$@" "${target}/" "${dest}/cur/"
btrfsctl -c "${dest}/cur" >/dev/null || true
btrfsctl -s "${dest}/$(date +%Y-%m-%dT%H:%M:%S)" "${dest}/cur" > /dev/null || true

今のところ、スナップショットをとる前に btrfsctl -c で sync する必要があるようだ。

まあとにかく、"/path/to/btr-backup /etc" のような感じで起動すると、 /backup/ホスト名/対象/cur にコピーしてから、タイムスタンプのスナップショットを作る。 こんな感じで。

sugi@tempest:/backup/tempest/etc% ls -il | tail -3
256 drwxr-xr-x 1 root root 10532 2010-04-09 06:16 2010-04-10T04:19:22/
256 drwxr-xr-x 1 root root 10532 2010-04-10 14:33 2010-04-11T04:19:55/
256 drwxr-xr-x 1 root root 10532 2010-04-10 14:33 cur/

i-node 番号が全部 256 になっているので、普通のディレクトリじゃないことが分かりますね。

落とし穴/問題は、

  • 現状 btrfsctl の戻り値が意味不明。成功しても基本的に非0で帰る
  • btrfsctl の出力がうるさいので /dev/null に捨てるしかない。エラーまで捨ててしまう可能性アリ
  • 将来的に btrfsctl は仕様が変わるか、コマンド自体無くなりそう
  • (私の問題だけど) 消すスクリプトをまだ書いてない

と言ったところか。今のところ巧く動いている。暫く使ってみよう。

要らなくなったスナップショットの消し方

rm -rf では消えないので注意。cow だから当たり前だけど、rm で中身を消すと、 ファイルは見えなくなって余計使用量が増える。

しかし困った事に、リリースされている btrfs-tools v0.19 では スナップショットやサブボリュームの削除が出来ない

現状で削除する場合は、新しいカーネル(確認してない。 2.6.31 以上か?)で、 btrfs-progs-unstable を git レポジトリから取って来てビルドする必要がある。

その上で btrfsctl の作り直し版の様な、統合コマンドの "btrfs" を使って削除する。 例えば

btrfs subvolume delete /backup/tempest/etc/2010-04-07T04:19:21

とすれば消える。スナップショットとサブボリュームの区別は無いので、 スナップショットを消す場合も subvolume delete で OK. rsync 等で作った場合と違って、消す作業は一瞬なのがいいね。


2010-04-28 お名前.com の VPS 使い始めてみた

また間隔が空いてしまった……。

_ お名前.com VPS の仮想マシン情報

CentOS も少しは勉強しないとなぁ、ということでキャンペーンをやっていた お名前.com の VPS を借りてみた。自動アップデートを Off にすれば、 yum がそのまま使えるそうなので。 「管理ツールとの不整合不整合が起こる可能性がある」と書いてあるけど、 まあそんなことは構わないしいいや。

随分ほったらかしだったのだけど、まずマシン情報などメモってみる。

概略

  • ホストは Virtuozzo (OpenVZ)
  • 仮想 CPU 12 個
  • メモリ 1G (保証 512 / Burst 512M - ??? あまりよくわかっていない)
  • Kernel は 2.6.18-028stab067.4 (x86_64)
  • swap エリアなし (Virtuozzo の制限らしい)

CPU 12 個にびっくり。単に親環境ののをそのままマップしてるのかな?  特定のインスタンスがあるCPUに偏る事を防止できるけど、全体が遅くなるような。

/proc/cpuinfo (長いので最後の1つだけ)

OpenVZ が CPU 情報を書き換えるかどうかは知らないけど、6コア x2 に見える。

processor	: 11
vendor_id	: AuthenticAMD
cpu family	: 16
model		: 8
model name	: Six-Core AMD Opteron(tm) Processor 2431
stepping	: 0
cpu MHz		: 2400.094
cache size	: 512 KB
physical id	: 1
siblings	: 6
core id		: 5
cpu cores	: 6
apicid		: 13
fpu		: yes
fpu_exception	: yes
cpuid level	: 5
wp		: yes
flags		: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm 3dnowext 3dnow constant_tsc nonstop_tsc pni cx16 popcnt lahf_lm cmp_legacy svm extapic cr8_legacy altmovcr8 abm sse4a misalignsse 3dnowprefetch osvw
bogomips	: 4800.20
TLB size	: 1024 4K pages
clflush size	: 64
cache_alignment	: 64
address sizes	: 48 bits physical, 48 bits virtual
power management: ts ttp tm stc 100mhzsteps hwpstate [8]
/proc/user_beancounters

PleskWikiFulldigitのページ を見ると Virtuozzo のゲストのリソース配分量は /proc/user_beancounters を見れば良いと言うことのようなのだけど……。??  なんだろうこの barrier と limit の値は。何でこんな事に?

Version: 2.5
       uid  resource                     held              maxheld              barrier                limit              failcnt
 10002413:  kmemsize                  6579180              7442388  9223372036854775807  9223372036854775807                    0
            lockedpages                     0                    0  9223372036854775807  9223372036854775807                    0
            privvmpages                  6630                34421  9223372036854775807  9223372036854775807                    0
            shmpages                      797                  797  9223372036854775807  9223372036854775807                    0
            dummy                           0                    0  9223372036854775807  9223372036854775807                    0
            numproc                        16                   17  9223372036854775807  9223372036854775807                    0
            physpages                    2607                17846  9223372036854775807  9223372036854775807                    0
            vmguarpages                     0                    0  9223372036854775807  9223372036854775807                    0
            oomguarpages                 2608                17847  9223372036854775807  9223372036854775807                    0
            numtcpsock                      6                    6  9223372036854775807  9223372036854775807                    0
            numflock                        1                    2  9223372036854775807  9223372036854775807                    0
            numpty                          1                    1  9223372036854775807  9223372036854775807                    0
            numsiginfo                      0                    1  9223372036854775807  9223372036854775807                    0
            tcpsndbuf                  111728               111728  9223372036854775807  9223372036854775807                    0
            tcprcvbuf                   98304                98304  9223372036854775807  9223372036854775807                    0
            othersockbuf                 6984                 8288  9223372036854775807  9223372036854775807                    0
            dgramrcvbuf                     0                 8472  9223372036854775807  9223372036854775807                    0
            numothersock                    8                   10  9223372036854775807  9223372036854775807                    0
            dcachesize                 612228               621618  9223372036854775807  9223372036854775807                    0
            numfile                       890                  890  9223372036854775807  9223372036854775807                    0
            dummy                           0                    0                    0                    0                    0
            dummy                           0                    0                    0                    0                    0
            dummy                           0                    0                    0                    0                    0
            numiptent                      29                   29  9223372036854775807  9223372036854775807                    0


Tatsuki Sugiura <sugi@nemui.org>