2009年1月10日土曜日

mondo rescueでフルバックアップする。そしてリストア。

mondo rescueを使う

システムの入れ替えを出来るだけ手間をかけずにやろうとする場合、インストールマニアでなければ非常に手間である。
そこで、mondo rescueというシステムバックアップのソフトウェア群を使用し、システムのバックアップを取り、
システムを任意の(バックアップを取った時点)状態に手軽に戻せるようにする。

事前作業
出来ればシステム構築をし終わった時点でのバックアップが望ましい。
この手のバックアップツールは、現状ありのままを保存し、またそれを書き戻すので、
例えばsquidを入れて動かしていたサーバなどでは、
キャッシュを削除しておかなければ凄まじい大きさになってしまう(し、それを書き戻そうとは到底思えなくなる)。
なので、もしシステム構築後ではなく、走っているサーバをバックアップする際は、出来るだけスマートな状態に戻しておく。
例えば、/var以下の要らないファイルを削除しておく等。

ダウンロード
次に必要なファイルをダウンロードする。
参考URLは
http://www.thinkit.co.jp/free/article/0612/7/1/

各ディストリ宛にパッケージが配布されているので、そのパッケージを使うのが好ましい。
http://www.mondorescue.org/

上部メニューDownloadsに飛び、最下部Downloadsセクションにソースとパッケージが置いてある
執筆当時のパッケージは

Packages

* RedHat 7.3, 9.
* Fedora Core 4, Core 5, Core 6.
* RedHat Enterprise Linux 3, 4, 5.
* Mandriva 10.1, 10.2, 2006.0, 2007.0, 2007.1.
* OpenSuSE 10.0, 10.1, 10.2. Look also at this web page for SuSE details. Packman may have some useful additional packages.
* SuSE Linux Enterprise Server 9, 10.
* Debian 3.1, 4.0. Look also at this web page for Debian details.
* Ubuntu 6.04, 7.04.
* Gentoo 1.6.
* Slackware 10.2, 11.0.


バージョン部分がリンクになっているので、そこからパッケージをダウンロードする。
僕はCentOSのver.5.2のx86_64を使っているので、RedHat Enterprise Linuxの5からダウンロードした。

この中で必要なパッケージは
「afio」「buffer」「mindi」「mindi-busybox」「mondo」「mondo-doc」
の6点。
簡単なやり方は、ターミナル使っている場合は保存したい場所にディレクトリを作って移動し、
wget_パッケージのURL(半角アンダーバーはスペースに置換)でURLコピペで済ます。

当時は以下をダウンロード。
afio-2.4.7-1.x86_64.rpm
buffer-1.19-1.x86_64.rpm
mindi-2.0.4-1.rhel5.x86_64.rpm
mindi-busybox-1.7.3-1.rhel5.x86_64.rpm
mondo-2.2.7-1.rhel5.x86_64.rpm
mondo-doc-2.2.7-1.rhel5.noarch.rpm


他に、高速圧縮形式のlzoを使用するので、以下二点をダウンロード。
「lzo」
http://dag.wieers.com/rpm/packages/lzo/

「lzop」
http://dag.wieers.com/rpm/packages/lzop/

当時ダウンロードしたのは
lzo-1.08-4.2.el5.rf.x86_64.rpm
lzop-1.01-2.el5.rf.x86_64.rpm


また、ISOファイルを作る為に必要なmkisofsと、CDに書き込むために必要なcdrecordの二点を要求されるので、
これはyumでインストール。
yum install mkisofs
yum install cdrecord


現状で6つのrpmパッケージが同一ディレクトリに存在するので、まとめてインストール。
rpm -ivh *

エラーがあれば警告されるので素直に従うこと。

バックアップディレクトリ作成
バックアップ用のディレクトリを作成する。

取り敢えず/rootの中に、mondobackupというディレクトリを作成。
mkdir mondobackup


いよいよコマンド
コマンドを打つ。
mondoarchive -Oi -g -L -N -s 4200m -d /root/mondobackup -E /root/mondobackup


意味は
コマンド名 -ISOイメージを生成 -GUI操作(CUIでの疑似GUI) -lzo圧縮を利用 -ローカルディスクのみをバックアップ対象とする -ISOファイルのサイズ。いろいろな単位が使える -バックアップ場所 -バックアップ対象から除外する場所

何故バックアップ対象から外すコマンドが必要かという説明は不要の筈。
複数除外する場合は、シングルクォーテーション「''」で囲う。
例:
-E '/exit1 /root/exit2 /home/exit3'


実行すると、GUI画面が立ち上がり、バックアップが始まる。

出来たISOファイルは煮るなり焼くなりする。

----------------------------------------------------------------
復帰(リカバリ)する場合は、
焼いたDVDで起動させる。
テキストメニューが初めに出るが、気にせず待ち続けると、疑似GUIメニューになる。

取り敢えず覚えておきたいのはテキストメニューでのアクション。
nuke 自動的にハードディスクをフォーマットして、バックアップデータをリストアする
interactive リストア元などを対話的に指定する
expert コマンドモードで起動する
参考は
http://www.atmarkit.co.jp/flinux/rensai/linuxtips/a023mondorestore.html

以上が今回バックアップに使ったmondo rescue。
インストールするだけでかなりお手軽にフルバックアップできる。
何度もOSをインストールするのが面倒ならば、これは試す価値があるし、サーバのように構成が滅多に変わらない、
ウイルスやrootkitに犯された後の復帰を簡単にしたい場合は最高のツールと言っても言いと思う。


2011.11.03追記
Centos 6で入れたところ、
ダウンロードしたのは
afio-2.5-1.rhel6.x86_64.rpm
buffer-1.19-4.rhel.x86_64.rpm
lzo-2.04-1.el5.rf.x86_64.rpm
lzop-1.03-1.el5.rf.x86_64.rpm
mindi-2.0.7.8-1.rhel6.x86_64.rpm
mindi-busybox-1.18.3-3.rhel6.x86_64.rpm
mondo-2.2.9.7-1.rhel6.x86_64.rpm
だった。
↑2013.05.10どうもこれだとバックアップに失敗する。
 http://www.limemo.net/blog/2012/03/try-whole-backup-in-sakuravps-on-centos-by-mondo-rescue-02.html
を参考に、
Dagのリポジトリから入れると下記のようになる(全てx86_64)。
mondo 2.2.9.4-1.el6.rf
afio 2.5.1-1.el6.rf
buffer 1.19-2.el6.rf
mindi 2.0.7.5-1.el6.rf
mindi-busybox 1.7.3-1.el6.rf
syslinux 4.02-8.el6(base)

また、syslinuxをyumでインストールする必要があった。
yum install syslinux


afioとbufferは、ftp(ftp.mondorescue.org)からのダウンロード。
僕の環境ではブラウザでアクセスできなかったので、ftpクライアントを使用した。

2008年11月26日水曜日

mylo COM-2生産終了のお知らせ(一応黒のみ)

結局波に乗り切れなかったんじゃん!
という突っ込みは無しにして、テキストをするする書くガジェットとしては秀逸なので、もう少し頑張って欲しかった。
残念ながら、終了です。

2008年11月20日木曜日

非力な携帯端末(HONEY BEE and mylo com-2)で快適にブラウジングする

W331Kというファンシーなストレート携帯電話端末がある。
これは通話動作は勿論、オペレーティングに関してももたつき無く処理してくれる「良い子」なのだけれども、
どうしてもブラウジングに関しては弱い。
携帯越しに見るウェブなど、テキストが読めればいいのだけれども、なかなかそうは問屋が卸してくれない。
では、このW331K HONEY BEEで快適にブラウジングするには?
答えは単純、「無駄を省いてやる」のだ。
まず、どうせ表示が崩れる「画像表示を無効」にする。
勿論音楽端末でないこの機種であるからこそ、「BGM再生も無効」にする。
次に、端末のリソースを激しく消費している「javascriptを無効」にする。

決定的だったのは「JavaScript」を無効。
(特に最近は)あらゆるサイトで使われていそうなこいつが実はくせ者なので、さっさとオフにするのが宜しい。
JavaScriptが必要なサイトにアクセスする必要があるならば、こんな端末で見る所じゃあないとすっぱり諦めることが肝心。
まあ、正直制作者もそう思っていると思うけれども・・・。

myloのようなブラウザ設定を(残念なことに)自由にさせてくれない端末には、「Google Mobile Proxy」を使う手もある。
http://www.google.co.jp/gwt/n
から検索する、
もしくは
http://www.google.co.jp/gwt/n?u=

の=以降に目的URLを入力すると、モバイル環境に合わせた表示にしてくれる。
myloのjavascriptに対する苦手感(3分待たされるとか)がなくなるのはmyloユーザとしてはとても有難い。

2008年11月9日日曜日

iscsiを使う

iscsiを使う

どうにか社内LAN、というよりもファイルサーバを速くしようと思い、色々と物色してみたのだけれども、なかなかそれっぽいものが無い。というより、限界値まで出し尽くしている感がある。
今日は色々と実験してみた。
大体うちのファイルサーバは実測で42.5mb/sの345Mbps程度で通信できるらしい。*前の値から修正。
速い。速いじゃない。今計算して恐ろしく速いと思った。RAID1でこれなら十分じゃないか。というより、出せないんじゃないかなあ・・・。*すみません、UWSCSIと同程度でした・・・未だいける。筈。
その辺を考えず、新技術に手を出し、iscsiを設定してみた。
そのメモである。
テストサーバがubuntuだったので、そいつでiscsiを設定する。
参考にしたのは
http://blog.browncat.org/2008/05/macubuntu_hardyiscsi.html

リンク元は
http://blog.xe.bz/archives/51051369.html

まずはiscsitargetをインストール

sudo apt-get install iscsitarget

次に設定をいじる。
ubuntuのviは苦手なので、geditで。
sudo gedit /etc/ietd.conf

参考サイト通り、Lunを変える。
Lun 0 Path=/foo/bar.img,Type=fileio
Alias hoge

パーティションを新たに切れないので、またも参考通りファイルで切り取る。
取り敢えず10GB。
sudo dd if=/dev/zero of=/foo/bar.img bs=1M count=10000

最後に/etc/init.d/iscsitarget restart

windowsのイニシエータは
http://www.microsoft.com/WindowsServer2003/technologies/storage/iscsi/default.mspx
からダウンロードしてインストール。
設定画面でIPアドレスを指定してやると、ターゲットで選択できるようになるので、Logonすると、
コンパネの管理から行くディスクの管理でマウントされているのが分かる。

で、繋いでみたが、遅い。
むしろsambaの方が速い。
なんだそれ・・・。僕の時間を返せ・・・。

因みにsambaでの速度アップ(チューニング)は、以下のサイトを参照。
http://www.dd.iij4u.or.jp/~okuyamak/Documents/tuning.japanese.html

うちの環境だと、マンツーマンだと130%の速度になった。
ただ、そこでまた罠があって、数十台がアクセスするサーバなので、元々マックスの速度出していたという・・・。(1台あたりのパフォーマンスが悪かろうが、アクセス台数が多くなれば最大値を叩き出し続けるしかない)。

ファイバチャネルか!?とうとうそこまで手を出さねばならんのか!?そしてファイバチャネルに手を出してスピードが上がる確証があるのか!?
最後に
http://www.hpc.co.jp/hit/Bench/bench-HDD.htm

機械屋さんは凄いなあ。

追記
未だいけるはずというのは分かった感じ。
http://www.tcp-net.ad.jp/danbo/m/Transfer_rate.html
現状は理論値のUltra Wide SCSIを超えた位。3倍速くなれば1000BASEの理論値。
ボトルネックとしてのネットワークインフラさえどうにかなれば・・・。

2008年11月2日日曜日

ubuntuでusermodを使ってはいけない

はまった。
見事にはまった。
丁度linuxマシンが必要になり、ubuntu8.10が出たので入れていじったところではまった。

ubuntuはrootユーザを使用しない仕組みなので、sudoで運用するのだけれども、
なんとusermodでグループをいじるとadminグループを明示しないとadminグループから外され、
sudo出来なくなってしまう(!)。

http://typex2.wordpress.com/2008/07/28/ubuntu%E3%81%A7%E4%B8%8D%E7%94%A8%E6%84%8F%E3%81%ABusermod%E3%81%A7%E3%83%A6%E3%83%BC%E3%82%B6%E3%81%8C%E6%89%80%E5%B1%9E%E3%81%99%E3%82%8B%E3%82%B0%E3%83%AB%E3%83%BC%E3%83%97%E3%82%92%E5%A4%89/

より、
ところが、Ubuntuのデフォルトの設定では、adminグループに所属しているユーザ以外はrootになれない設定になっています。

例:usermod -G users ユーザID

を実行すると、ユーザIDが所属しているセカンダリグループはusersだけになってしまいます。そうすると、sudoを実行してもrootになれなくなります。

そこで、正しくは、

例:usermod -G admin,users ユーザID

のように、adminに加えて、カンマで区切ってusersというユーザIDを追加しないといけません。


慌ててインストールディスクを使ってCD起動し、使用ユーザをadminグループに入れようと/etc/groupを編集しても時既に遅し。
adminグループに突っ込んだ(admin:x:123:ユーザ名 123部分はマシン固有の筈)
sudoは出来るようになってもエラーを吐き出す。

泣く泣く再インストールし、groupを見ると、初期ユーザは
adm
dialout
cdrom
plugdev
lpadmin
admin
に所属している。
・・・あれ、話が違うぞ・・・?

GUIメニューのシステム>システム管理>ユーザとグループで新規ユーザを作成してみると、
プロファイルというものを選べるようになっている。
迷わずadministratorを選択し、もう嫌だと思いながらグループの選択をadminにしたユーザを作成し、/etc/groupを見てみると

・・・どのグループにも書かれていない・・・

誰かこの答えを教えて下さい。

ubuntu・・・むしろdebian・・・もう嫌だ・・・redhat系が良い・・・。

2008年10月21日火曜日

partedでパーティションを確保する

3TB近くの領域をRaidで作成したので、使用するためにfdiskではなく、partedで領域を確保する。
まずは確保する領域のデバイスを特定。取り敢えず/devを覗いてみると、sdbがあるので、多分これ(大丈夫かそんなので)。
取り敢えずroot権限になってからpartedを起動。書式はparted [デバイス]

parted /dev/sdb

プロンプトが(parted)に変わり、helpと打てばヘルプが見られるようになる。
で、領域を確保。

mkpartをタイプ。以下ログ
----------------------------------------------------------------
(parted) mkpart
パーティションの名前? []? cmp2disk
ファイルシステムの種類? [ext2]? ext3
開始? 0
終了? -0
(parted) print

モデル: AMCC 9650SE-8LP DISK (scsi)
ディスク /dev/sdb: 2946GB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: gpt

番号 開始 終了 サイズ ファイルシステム 名前 フラグ
1 17.4kB 2946GB 2946GB cmp2disk

(parted) quit
通知: 必要であれば /etc/fstab を更新するのを忘れないようにしてください。

[root@memb ~]#

----------------------------------------------------------------

mkpart時、開始と終了を入力する際、開始ポイント、終了ポイントが分からなかった場合はprintと入力すると教えてくれる。
また、サイズを指定する際、特に終端を指定したい場合、負数で指定することによって、終端からのオフセットで入力できる。
(だから上のログだと終端が-0になってる)。


----------------------------------------------------------------
2chのくだらねえ質問はここに書き込め!part156
http://pc11.2ch.net/test/read.cgi/linux/1195106840/
の以下のログより。

232 :login:Penguin:2007/11/19(月) 02:01:27 ID:ZEkXCMCs
fdiskでは2TB以上のパーティションが切れないそうなので、partedというのを使ってみたのですが
サイズを終端まで指定する方法はありますか?mkpartの書式は
「mkpart パーティションタイプ ファイルシステム 開始位置(MByte) 終了位置(MByte)」
ですが、終了位置を自分で指定しないと駄目みたいなんです・・・

あと、partedが扱えるファイルシステムは今のところext2, ext3, linux-swap, FATなど
しかありませんが今後増えていくのでしょうか?
(fdiskがgptを扱えるようになればいいのですが)

233 :login:Penguin:2007/11/19(月) 02:11:50 ID:cXDR4E9v
負数で指定すれば末端からのオフセット
例 -1s

----------------------------------------------------------------

間違えたら、rm [番号]で外套パーティションを削除できる。パーティション番号はnumberで調べる。
例:rm 1

mkpartfsならば、ファイルシステムも作ってくれるらしいが、現在未実装らしく、ファイルシステム確保はやってくれない。
よってquitで抜けた後、mkfs.ext3でファイルシステムを作成。


[root@memb ~]# mkfs.ext3 /dev/sdb1
mke2fs 1.39 (29-May-2006)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
359661568 inodes, 719303671 blocks
35965183 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4294967296
21952 block groups
32768 blocks per group, 32768 fragments per group
16384 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
102400000, 214990848, 512000000, 550731776, 644972544

Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
done

This filesystem will be automatically checked every 39 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.

手軽。

後はマウントするなりで。
恒久的にマウントする場合、/etc/fstabに記述。


参考リンク
partedについて
http://nigou25.blog.so-net.ne.jp/parted_on_redhat

fstabの記述は以下を参考に。
http://www.atmarkit.co.jp/flinux/rensai/linuxtips/756fstabnum.html
http://www.atmarkit.co.jp/flinux/rensai/linuxtips/756fstabnum.html

2008年10月8日水曜日

久し振りにpythonに触った/インスタントハッキング編

暫くぶりにpythonをいじる。
本気でやらないと・・・。
とりあえず、いろいろ忘れていたので、インスタントハッキング http://www.python.jp/Zope/intro/instant_hacking_jp から復習。
練習問題を解く。

#=----------------------------------
#練習1
#ユーザーから続けて数字の入力を受け付け、合計が100に近付くまでその数字を足し続けるプログラム
#結局100に近づけようとするプログラムだと、100になるしかないんじゃないかという(100を超えると「近くなくなる」)ことを考えてしまい、合計が100になるまで足すプログラムになってしまった。
#多分正解は、限りなく100に近づけようとする(100を超えず、100にならない)数字を繰り出すものだと思うけど、ここでの設問が意図する効果を以下で上げられているはずなので、このまま。


#usernumに数値を入れて貰う
usernum = input("ikutsu?=")
#100を超えた数値だと入れ直し
while usernum > 100:
usernum = input("fuck.onemore")
#100になるまでusernum2に入力を続ける
while usernum < 100:
print "ima",usernum
usernum2=input("more=")
usernum = usernum+usernum2
#100超えるとまずいので、まずいです処理
if usernum > 100:
usernum = usernum-usernum2
print"koeta"
#一件落着
print "100."

#------------------------------------
#ユーザーから100個の数字を受け付け合計を表示するプログラム
#while文で書けると思うけど、意図しているのがfor文のようだったので、for文で。countsをもてあましてる感ありありです。


#はまったところは、合計値「sums」を初期化(0にする)し忘れたこと。
sums = 0
#rangeは1,100と書くと、99までしかカウントしてくれないので101と記述。
for counts in range (1,101):
sums2 = input("number=")
print "ima",counts,"kai"
#sumsとsums2をsumsに代入して、それを100回繰り返す。
sums = sums + sums2
print "goukei",sums

#-------------------------------------
#ユークリッドの互除法によって2個の数の最大公約数を求める関数を書きなさい
#inputで書いてしまってから、「何故これを関数でやるのか」さっぱり分からなかったけど、要は大きなプログラムになるとこういう省力化をしていかないとたちいかなくなるよと言いたいんだろう。


def kouyaku(a,b):
#inputで書いた名残
# a = input("how number is a = ?")
# b = input("how number is b = ?")
#aはbより大きいのが条件なので、その条件を満たさせる
while a <= b:
b = input("NO,its huge.=")
#bが0じゃ無いときは以下を繰り返す(0になれば終わりだから)
while b != 0:
b,a = a%b,b
return a

#example(テスト)
print kouyaku(196,24)

#------------------------------------------

#以下、ごみ。
#雑記も役に立つかもしれないと。

print "PART 1","hello world"
print "hello world"
print "goodbye, world"

#-----------------------

print "PART 2","The Area of Rectangle"
#tate X yoko
tate=10 #width
yoko=20 #height
print tate*yoko

#-----------------------

print "PART 3","RADIUSxRADIUSx3.14"
radius = 30
print radius**2*3.14

#-----------------------

print "PRT4 input"
radius = input("radius?=")
print radius**2*3.14

print "PART5 whats foobar"
foo = input
bar = foo("what is bar?")
print bar

#------------------------

#tempera
tempe = input("whats temp?")
if tempe > 50:
print "cooked"
else:
print "more"


#-------------------------
#shikaku ka maru ka no menseki keisan

#display
print "select it"
print "1 shikaku"
print "2 maru"

#input
docchi = input("doreyo?")

if docchi == 1:
tate=1
yoko=5
area=tate*yoko
print area
elif docchi == 2:
radius=input("radiusplease")
area=3.14*(radius**2)
print area
else:
print
print "die"
print

#----------------------------
for nanika in "a","b","c":
print "fuck",nanika

for counts in range(1,100):
print counts,"of death"
print 100-counts,"of death"

#----------------------------
#from XXXXXX import XXXXX
from time import sleep
waitsec = input("do you wait a sec?")
sleep(waitsec)
print "you wait" ,waitsec ,"SEC,"


#----------------------------
#while no tsukaikata

from time import sleep

print "this program wait 3sec and question"

slept=2
sleep(slept)

ans=input("how many past time?")

while ans != slept:
print "huh?"
slept=slept+3
sleep(slept)
ans=input("how many past time huh?")

print"okey"