私は自宅でCentOSを使用し、KVMでサブホストを複数作成し、運用しています。
サブホストやそのデーター領域はBACULAでバックアップしていますが、メインのKVMがあるOSのバックアップもしていますが、ブートできない時はお手上げになりますので、その対策としてMONDOarchiveを使ってブートDVDを作成します。
最初に気がついた事
バックアップ時にシングルユーザーモード(init 1)にしますがその際、仮想化のサブホストの設定がハイバネートになっていると、シングルユーザーモードに移る際に、走っているサブホストを全部 /var/lib/libvirt/qemu/save に保存しますがそのサイズがバカでかくなり、又レジュームした後は消しますので、バックアップが無意味になり、いたずらにサイズを大きくしますので、その対策です。
/etc/sysconfig/libvirt-guestsを修正します
# action taken on host boot
# - start all guests which were running on shutdown are started on boot
# regardless on their autostart settings
# - ignore libvirt-guests init script won't start any guest on boot, however,
# guests marked as autostart will still be automatically started by
# libvirtd
ON_BOOT=start
# Number of seconds to wait between each guest start. Set to 0 to allow
# parallel startup.
START_DELAY=20
# action taken on host shutdown
# - suspend all running guests are suspended using virsh managedsave
# - shutdown all running guests are asked to shutdown. Please be careful with
# this settings since there is no way to distinguish between a
# guest which is stuck or ignores shutdown requests and a guest
# which just needs a long time to shutdown. When setting
# ON_SHUTDOWN=shutdown, you must also set SHUTDOWN_TIMEOUT to a
# value suitable for your guests.
ON_SHUTDOWN=shutdown ←ここをshutdownにする
# If set to non-zero, shutdown will suspend guests concurrently. Number of
# guests on shutdown at any time will not exceed number set in this variable.
PARALLEL_SHUTDOWN=2
# Number of seconds we're willing to wait for a guest to shut down. If parallel
# shutdown is enabled, this timeout applies as a timeout for shutting down all
# guests on a single URI defined in the variable URIS. If this is 0, then there
# is no time out (use with caution, as guests might not respond to a shutdown
# request). The default value is 300 seconds (5 minutes).
SHUTDOWN_TIMEOUT=120
いよいよバックアッププログラムのmondoarchiveをインストールしますがその前にmondoが使う圧縮ソフトlzo,lzop を確認します。
今は yum のBASEレポジトリーにありますので、入っていなければ yum からインストールしてください。
mondoのインストールはレポジトリーを入れた方が簡単みたいなので、
# cd /etc/yum.repos.d/
# wget ftp://ftp.mondorescue.org/rhel/6/x86_64/mondorescue.repo (XOOPSが悪さをするので : が全角になっています)
私は最初ここでi386を指定していましたが、カーネルパニックになり出来ませんでした。
# gedit mondorescue.repo
[mondorescue]
name=rhel 6 x86_64 - mondorescue Vanilla Packages
baseurl=ftp://ftp.mondorescue.org//rhel/6/x86_64
enabled=1
gpgcheck=1
priority=5 ← これを追記
gpgkey=ftp://ftp.mondorescue.org//rhel/6/x86_64/mondorescue.pubkey
インストールしていないときはここを参照。いよいよインストール
# yum install mondo
インストール:
mondo.x86_64 0:3.2.1-1.rhel6
依存性関連をインストールしました:
afio.x86_64 0:2.5-1.rhel6 buffer.x86_64 0:1.19-4.rhel6
mindi.x86_64 0:3.0.1-1.rhel6 mindi-busybox.x86_64 0:1.21.1-1.rhel6
perl-Archive-Tar.x86_64 0:1.58-141.el6 perl-ExtUtils-CBuilder.x86_64 1:0.27-141.el6
perl-IO-Interface.x86_64 0:1.05-2.el6 perl-IO-Zlib.x86_64 1:1.09-141.el6
perl-Module-Build.x86_64 1:0.3500-141.el6 perl-Module-ScanDeps.noarch 0:0.95-2.el6
perl-MondoRescue.noarch 0:3.2.1-1.rhel6 perl-Net-IPv4Addr.noarch 0:0.10-6.el6
perl-Package-Constants.x86_64 1:0.02-141.el6 perl-ProjectBuilder.noarch 0:0.13.1-1.rhel6
syslinux.x86_64 0:4.04-3.el6 syslinux-nonlinux.noarch 0:4.04-3.el6
早速、バックアップを取ってみますが、最初はシングルユーザーモードではなくGUIのマルチユーザーで試して問題なければシングルユーザーモードにしようと思います。
インターラクティブ・モードで試しますが、その前に方針
1:バックアップしたデーターの保存場所:私はKvmBackupと言うディレクトリーに13GBをアタッチした。
2:mondoが使うスクラッチとテンプのディレクトリー:同じくKvmBackupにする
3:イメージ:isoでDVDの容量の4480MB
4:バックアップから除外するディレクトリー:私はメールのデータの保存場所(Thunderbird)とダウンロードした諸々の保存場所(Download)。これらのディレクトリーはbaculaでバックアップされているので必要ない。入れてもいいが、バックアップとリストアーに時間がかかる。
注:スクラッチ・ディレクトリーはバックアップの途中経過が保存され、すべてが終わってから指定したバックアップデーターの保存場所に書いていくので、結構なスペースがいる。又、上記で指定したディレクトリーと/sys,/tmp,/devなどはデフォルトでバックアップされない
# mondoarchive ← 引数なしでやるとインターラクティブ・モードになる
sanityチェックが走った後、バックアップのメディアを聞いてくるので、HARD DISK を選びEnter.
保存場所を聞いてくる:/KvmBackup/Data. と打ち込みTABキーでOKを選びEnter.(Directoryを作っておく事)
圧縮に使うプログラム: lzo を選びEnter. (圧縮が早いそうな)
圧縮レベルを聞いてくるので:Average (4)を選びEnter.
DVDサイズはデフォルトである4480のままTABキーでOKを選びEnter.
バックアップファイルの名前を聞いてくるので:kvmBackup-2015-12-29 と日付を入れ、TABキーでOKを選びEnter.
何をバックアップするかはデフォルトの:/ のままTABキーでOKを選びEnter.(/ 以下全て、ただし後で指定するディレクトリーは除外)
除外するディレクトリー:/Download|/Thunderbird|/KvmBackupと指定し、TABキーでOKを選びEnter. (セパレーターは | )
temporaryディレクトリーは:/KvmBackup/tmpと指定し、TABキーでOKを選びEnter.(Directoryを作っておく事)
scratchディレクトリーは:/KvmBackup/scratchと指定し、TABキーでOKを選びEnter.(Directoryを作っておく事)
Extended attributes? は:Yes のままEnter.
kernelの名前は:デフォルトのまま(私は使用中である /boot/vmlinuz-2.6.32-573.el6.x86_64だった)TABキーでOKを選びEnter.
veryfyはとりあえず:No でEnter.
これが最後だが、proceed するかは:Yes を選んだままEnter
これでやっとバックアップが始まります。
バックアップにはすごく時間がかかります。両方ともVerifyはなしですが、
サブホストをハイバネートしていて、圧縮レートを最大の9を選んだ時:1時間20分(サイズ3.7GBだったと思う。消去したので記憶だけ)
ハイバネートなしで、圧縮レートアベレージの4:52分(サイズ2.4GB)
以上で問題が無ければ
# init 1
でシングルユーザー・モードにして同じことを繰り返す。
終わったら# exit
でGUIマルチユーザーに戻る。
GUIに戻ったら、アプリケーション→サウンドとビデオ→Brasero ディスク作成ツールをクリックし、
表示されたウィンドウの左下の方にある”イメージの作成”をクリック
表示されたウィンドウで /Mondo/Dataにあるisoファイル(私の場合はKvmBackup-2015-12-29-1.iso)を選び、
空のDVDをドライブに入れ、“書き込む(B)”をクリックして、DVDを作成する。
OSをアップグレードしたらここと同じ現象になった(アップデートしたらsambaが走っていない)
早速ログ(/var/log/samba/log.sambaにある)を見る
samba version 4.1.22 started.
Copyright Andrew Tridgell and the Samba Team 1992-2013
ldb: module version mismatch in ../source4/dsdb/samdb/ldb_modules/acl.c :
ldb_version=1.1.20 module_version=1.1.25 ldb: failed to initialise module /usr/lib64/samba/ldb/acl.so : Unavailable
前と同じ現象でldbのバージョンが違っているのが原因。それではとWingのレポから
pyldb-1.1.25-1.el6_8.wing.x86_64.rpm
libldb-1.1.25-1.el6_8.wing.x86_64.rpm
python-tdb-1.3.8-1.el6_8.wing.x86_64.rpm
libtdb-1.3.8-1.el6_8.wing.x86_64.rpm
ldb-tools-1.1.25-1.el6_8.wing.x86_64.rpm
の5つをダウンロードし、
# rpm -Uvh pyldb-1.1.25-1.el6_8.wing.x86_64.rpm libldb-1.1.25-1.el6_8.wing.x86_64.rpm python-tdb-1.3.8-1.el6_8.wing.x86_64.rpm libtdb-1.3.8-1.el6_8.wing.x86_64.rpm ldbtools-1.1.25-1.el6_8.wing.x86_64.rpm
でインストールしようとしたらエラーが出てる
エラー: 依存性の欠如: libtalloc >= 2.1.4 は libldb-1.1.25-1.el6_8.wing.x86_64 に必要とされています
libtevent >= 0.9.26 は libldb-1.1.25-1.el6_8.wing.x86_64 に必要とされています
# yum list installed |grep tdb
libtdb.x86_64 1.3.6-1.el6_6.wing
python-tdb.x86_64 1.3.6-1.el6_6.wing
同じようにlibteventも調べバージョンが違っているのを確認後
# rpm -e --nodeps libtalloc.x86_64 libtevent.x86_64
でdeleteするが、yum removeでやると関連するパッケージも削除するので気をつける。
同じWingのレポからから
libtalloc-2.1.5-1.el6_5.wing.x86_64.rpm と libtevent-0.9.26-1.el6_6.wing.x86_64.rpm をダウンロードしておく
# rpm -Uvh pyldb-1.1.25-1.el6_8.wing.x86_64.rpm libldb-1.1.25-1.el6_8.wing.x86_64.rpm python-tdb-1.3.8-1.el6_8.wing.x86_64.rpm libtdb-1.3.8-1.el6_8.wing.x86_64.rpm ldb-tools-1.1.25-1.el6_8.wing.x86_64.rpm libtalloc-2.1.5-1.el6_5.wing.x86_64.rpm libtevent-0.9.26-1.el6_6.wing.x86_64.rpm
やっとインストールできた。
# service samba start
Starting samba: [ OK ]
とスタートできた。
samba関連で何が入っているか確認
# yum list installed |grep samba
samba41.x86_64 2:4.1.22-1.el6_31.wing
samba41-client.x86_64 2:4.1.22-1.el6_31.wing
samba41-common.x86_64 2:4.1.22-1.el6_31.wing
samba41-dc.x86_64 2:4.1.22-1.el6_31.wing
samba41-dc-libs.x86_64 2:4.1.22-1.el6_31.wing
samba41-libs.x86_64 2:4.1.22-1.el6_31.wing
samba41-python.x86_64 2:4.1.22-1.el6_31.wing
などがインストールされていた
ただ、相変わらず
samba: setproctitle not initialized, please either call setproctitle_init() or link against libbsd-ctor.
とエラーが出ているが、問題なく使えていると、エラー解除の方法が分からないのでそのままにしている
私は10Aのモバイルバッテリーを持っているが、このバッテリー I-Phone に充電できない。
理由:中国でいい加減な充電器が出回り、IーPhone が故障する事態が発生し、APPLEがOSを変更し、認証を受けないと使え無いようにした。
これは正しいやり方だが、認証を受けた充電器やモバイルバッテリーはかなり高価になる。
USBの端子は全部で4本しかないし、このうち2本は電源で、2本が信号線である。これらを使って認証を判断しているのだろうが、そんなに複雑な事は出来ない筈である。
と言うわけで、IーPhoneに付いてきた充電器を調べると信号線の2本が数十オームで繋がっていたので、テストではここをショートし、電源線に供給する電圧を可変していくと(正確には覚えてないが)5V付近では充電したが5.1Vでは充電しなかったので、車用の充電器はこれを参考に製作しうまく働いている。
ここからが本題
モバイルバッテリーの電圧を調べると5.15Vあり、これが原因である。解ったけど、どうするか。分解するのもなー
ある時、このバッテリーにアンドロイドの携帯をつなぎ、電流を測ろうとアマゾンで買ったUSB電圧(電流)計をつないでみると、電圧も下がっている。
これは当たり前で、この電圧計、電流も測れるので、5Vのラインに直列に入り電流を測定するので、その内部抵抗分電圧が下がる。
それではと、このUSB電圧計(電流計)をつないでI-phoneをつないで見ると見事に充電し出した。
左はアマゾンで買ったUSB電圧(電流)計、右は充電している所。この電圧計どれだけ正確か不明だが(何せ数百円)、4.7Vまで落ちている。
又、信号線間の抵抗を測ったらオープンだった。だったら自作した車用のI-Phoneの充電器信号線をショートしてあるが必要ないのかも?
I-Phoneが充電できなかったら試す価値あり。
これはバッテリーだが、AC100V(家庭用)の充電器でも同じ。
追記:後日このバッテリーを直接接続しても充電してくれた。これは使っている内に電池が減り電圧が下がったから。電池の電圧が下がるとUSBの電源である5Vも下がるのはどんなものか?そもそもリチューム電池は3.7V位だから、コンバーターで電圧を上げ5Vにしている。その回路の安定化が悪すぎ、でもこのおかげで充電できる!!
rails version 4.xx
モデルには librarie と doc があり、それぞれ(抜粋)
class Library < ActiveRecord::Base
accepts_nested_attributes_for :docs, allow_destroy: true
class Doc < ActiveRecord::Base
belongs_to :library
この時、libraries_controllers.rbのeditはdefaultのままで、edit.html.erbから飛ぶ_form.html.erb(抜粋)
<%= nested_form_for @library, :html => { :class => "form-horizontal library" } do |f| %><font color=#006400 ->
---------- 省略
<table class="table table-striped">
<thead>
<tr>
<th><%= model_class.human_attribute_name(:ファイル名 **編集の場合ファイル名とバージョンは変更不可**) %></th>
<th><%= model_class.human_attribute_name(:バージョン) %></th>
<th><%= model_class.human_attribute_name(:備考) %></th>
</tr>
</thead>
<%= f.fields_for :docs do |df| %>
<tr class="nested-fields">
<td><%= f.text_field :file_name, :readonly => true, :size => 56 %></td>
<td><%= f.text_field :version, :readonly => true, :size => 8 %></td>
<td><%= f.text_area :remarks, :size => "30x1" %></td>
</tr>
<% end %>
<td></td><td><%= f.submit '保存', class: 'btn btn-primary' %></td>
</table>
<% end %>
データーベースに2重に登録され、もちろんshowにも二つづつ表示され、さらに悪いことに片方を削除するとデーターベースはつじつまが合うのですが、ここには記入してありませんが、Doc(色々なファイル)をWEBに保存してあり、それが削除され、残っているDocをクリックしてもファイルが無いのでエラーになります
あちゃちゃ、これは大変だー。何でだ!!........ そうかIDが無いので二重に登録されるのか、だったらIDも渡せばいいのだー。これは簡単、libraries_controllers.rbのストロング・パラメーターに登録しよう。
class LibrariesController < ApplicationController
---------- 省略
private
# Use callbacks to share common setup or constraints between actions.
def set_library
@library = Library.find(params[:id])
end
# Never trust parameters from the scary internet, only allow the white list through.
def library_params
params.require(:library).permit(:prod, :model, :serial_no, :seizo_nen, :company, :branch, :section,
:incharge, :nonyu_bi, :remarks, :pictures,
:docs_attributes => [:id, :file_name, :version, :remarks, :_destroy],
:pictures_attributes => [:images, :_destroy]) ←これは他のモデルの分
end
end
だけど、セキュリティー的にはどうなのかなー?IDを受け付けると言うことは改竄の危険があるのかな??詳しい方教えて下さい。お問い合わせから連絡出来ます。
ある、特定のユーザーのメールが一切来なくなった。
早速 /var/log/maillog を調べると
Oct 13 08:40:43 web5 dovecot: imap(xxxxx@kinryokai.net):
Error: rename(/xxx/kinryokai.net/xxx/new/1443067247.Vfc40Ia01e2M488912.web5.kinryokai.net,
/xxx/kinryokai.net/xxx/cur/1443067247.Vfc40Ia01e2M488912.web5.kinryokai.net:2,)
failed: Input/output error
この Input/output error をgoogle先生に聞くと The maildir filename has wrong S=size value とあった。
この復旧方法が分からなかったので、そのユーザーのmaildirを作り直そうと、コピーしようとしたら、newディレクトリーでエラーが出ていた。
又サイズもゼロなので、newディレクトリーをdeleteし、
# cd そのユーザーのメールディレクトリー
# mkdir new
# chown vuser:vuser new
でオーナーを変更し(vuserは私がmailのvirtualDomainで使っているユーザー名)
# chmod 700 new
で他のユーザーからは見れないようにする。
これで一様 postfix と dovecot を再起動し、メールソフトの方も再起動してもらったらOKになった。
もちろんエラーがあった時のメールもある。
現象: 私の2台のスマホの内、1台はつながるが、i-phoneの方がつながらない。もちろん以前はつながっていたし、いくらパスワードを設定してもダメ。そしておかしいのはパスワードをチェックをした様子は無く、即座につながらないと表示が出ること。
やった事:つながっているスマホをワザと切断し、パスワードを入れてもつながらなくなってしまった。何だこれは!!
解決:ルーター(無線のアクセスポイントも兼ねている)を再起動したら、問題解消。教訓:困ったときの再起動
近頃太陽が出て照度が充分あるのに東側の太陽電池が直列にならない。
抵抗値が経年変化で変化したのかと思い、半固定の可変抵抗器で調節したが、すぐに再度調整が必要になった。
どおもおかしい、CDSがダメになったのかと思ったが、その時、日中で暑いので屋根には登らず、夕方やろうと思っていたが、寄る年波でそれを忘れ、今日(実は西日本に台風が接近中)雨を合間を見て屋根に登って驚いた。取り付けたあるはずの容器(タッパウェア状のプラスチック容器)が無い。よく見ると太陽電池モジュールの下に転がっていた。だからおかしかった。ここに容器の写真がある
理由:プラスチックが経年変化でボロボロにもろくなり、取り付けビスから外れていた、ケースを触ると、ボロボロと分解する。教訓:屋外の直射日光の当たるところにプラスチック・ケースを設置してはいけない。
という訳でこのケースをアルミと曇りガラスで作ることにした。出来たらここで公開します。昔は家の隅に割れたガラスの破片がよく転がっていたが、今は見ないなー。うちにも無い。小さな曇りがラスを買うのもなー?
参考までに壊れたケースに入っていたCDSの写真。左上が比較の為に置いた新品のCDS。多分熱の為だと思うがセルの状態がかなり悪い
ふと気がつくと(気がつくのがかなり遅いですが。あまりサーバーをチェックしていないのがバレバレ)WEBサーバーからのAIDEのチェックメールが届いていない。
これはrootに転送し、aliasesでプロバイダーのメールに転送しているのだが。
# echo test | mail root
でテストメールをrootに送るがISPのメールに届かないぞー!
それではと /var/log/maillog をチェックすると
to=<root@kinryokai.net>, orig_to=<root>, relay=virtual, delay=0.16,
delays=0.08/0.03/0/0.04, dsn=5.1.1, status=bounced (unknown user: "root@kinryokai.net")
私はメアドを postfixadmin で管理しているので早速、ログイン後 アドレス一覧を表示し(バーチャルホストの時は該当するドメインを選んで)
”転送先の追加”をクリック後、root@kinryokai.net のメアドを作成し普段使っているメアドに転送設定をした。再度
# echo test | mail root
とテストメールを出すとちゃんと、転送先のメールに届いたので、ISPのメアドを使う意味も無いので、AIDEのメールの送信先を、このサーバーで管理し、普段使っているメアドに設定した。
今までBuilding directory treeに時間が掛かっていたのはMYSQLの設定だった。
時間が掛かりすぎるのでbacluaのメーリングリストで聞いたら、やっぱりおかしいようだ。
一番の問題点はMYSQLのデーターベースエンジンに MyISAMを使っている事みたい。
これをInnoDBに変更する。ALTER TABLE テーブル名 ENGINE=InnoDB; を行なえと書いてあるが、データーベースごとそっくり変更出来ないかと調べたが、テーブル単位でしか出来ないようだ。
それではとデーターベースをエクスポートして、データーベース名を変更し、新規にbaculaをInnoDBで作り、インポートしたらおかしくなっていた。インポートしたファイルを見るとDBの指定がMyISAMになっていた。
面倒くさいので、既存のDBのテーブルを一つずつInnoDBにしてから
http://bacula.us/tuning/ にあるように /etc/my.cnf に
sort_buffer_size = 2MB
default-storage-engine=INNODB ←今後作るdatabaseのエンジンをINNODBにする
innodb_buffer_pool_size = 128MB
innodb_flush_log_at_trx_commit = 0
innodb_flush_method = O_DIRECT
+-------+-------+----------+---------------+---------------------+------------+
| JobId | Level | JobFiles | JobBytes | StartTime | VolumeName |
+-------+-------+----------+---------------+---------------------+------------+
| 4 | F | 258,441 | 2,262,481,683 | 2015-07-02 14:32:50 | Vol-0004 |
| 14 | I | 158 | 79,623,411 | 2015-07-03 04:32:49 | Vol-0014 |
+-------+-------+----------+---------------+---------------------+------------+
You have selected the following JobIds: 4,14
Building directory tree for JobId(s) 4,14 ...
何だこれは!!こんなに違うの!!そういえば以前は”Building directory tree”の時CPUのユーティライゼションが100%になっていた。この時SWAPの状態をチェックしていなかったが、もしかしたらSWAPが大量に発生していたのかも?
【結論】baculaでmysqlを使うときは絶対にDBのベースエンジンは InnoDB にし、上記の設定を追加する事
この前に11:リストアの時間が劇的に早くなったを参照の事。
どうもリストア時のファイルの作成(Building directory tree)に時間がかかりすぎる
+-------+-------+----------+---------------+---------------------+------------+
| JobId | Level | JobFiles | JobBytes | StartTime | VolumeName|
+-------+-------+----------+---------------+---------------------+------------+
| 4 | F | 258,441 | 2,262,481,683 | 2015-07-02 14:32:50 | Vol-0004 |
| 14 | I | 158 | 79,623,411 | 2015-07-03 04:32:49 | Vol-0014 |
+-------+-------+----------+---------------+---------------------+------------+
You have selected the following JobIds: 4,14
Building directory tree for JobId(s) 4,14 ... +++++++++++++++++++++++++++++++++++++++++++
224,831 files inserted into the tree.
誤解の無いように言っておくが、これはリストアにかかった時間ではない。Building directory treeだけにかかった時間である。
ここで不安になって来た。もし壊れて場合こんなに時間がかかっているとその間はサービスが無い状態になってしまう。
ここから mark * で少し時間がかかり(上にあるように224、831もファイルがあるのでそれに印を付けるため)それから、いよいよリストアになりこれにも時間がかかる。
上の場合はフルバックアップと一つのインクリメントファイルだけである。最悪の場合(土曜日の時)フル、差分、6個のインクリメントの計8個のファイルを使って、リストアするファイルを作るとすれば、一体どれだけ時間がかかるの?
それとも私のやり方が間違っているの?どれだけ時間がかかるか調べて見ようか。