ある時、WEBにアクセスできない。調べるとmysqlが動いていない。
スタートしようにも
# service mysqld start
chown: `/webdata/mysql' の所有権を変更中: 読み込み専用ファイルシステムです
chmod: changing permissions of `/webdata/mysql': 読み込み専用ファイルシステムです
MySQL Daemon failed to start. mysqld を起動中: [失敗]
調べてもオーナーは mysql になっているし、オーナーの書き込みが可能になっているのに??
google先生に聞くと、ここに回答があった
ここによると、selinuxが有効になっているか、ファイルシステムが壊れかけているか、ファイルシステム上で食い違いが起きているかだそうです。なので
# /bin/dmesg
で確認してみると
EXT4-fs error (device vdd): ext4_mb_generate_buddy: EXT4-fs: group 144: 14340 blocks in bitmap,
14339 in gd JBD: Spotted dirty metadata buffer (dev = vdd, blocknr = 0).
There's a risk of filesystem corruption in case of system crash.
EXT4-fs warning (device vdd): empty_dir: bad directory (dir #393217) - no `.' or `..'
EXT4-fs warning (device vdd): empty_dir: bad directory (dir #393219) - no `.' or `..'
JBD2 unexpected failure: jbd2_journal_revoke: !buffer_revoked(bh);
inconsistent data on disk
ext4_forget: aborting transaction: IO failure in __ext4_journal_revoke
EXT4-fs error (device vdd): ext4_forget: error -5 when attempting revoke
EXT4-fs (vdd): Remounting filesystem read-only
Aborting journal on device vdd-8.
EXT4-fs error (device vdd) in ext4_free_blocks: Journal has aborted
EXT4-fs error (device vdd) in ext4_reserve_inode_write: Journal has aborted
EXT4-fs error (device vdd) in ext4_reserve_inode_write: Journal has aborted
EXT4-fs error (device vdd) in ext4_ext_remove_space: IO failure
EXT4-fs error (device vdd) in ext4_reserve_inode_write: Journal has aborted
EXT4-fs error (device vdd) in ext4_ext_truncate: IO failure
EXT4-fs error (device vdd) in ext4_reserve_inode_write: Journal has aborted
EXT4-fs error (device vdd) in ext4_orphan_del: Journal has aborted
EXT4-fs error (device vdd) in ext4_reserve_inode_write: Journal has aborted
EXT4-fs error (device vdd) in ext4_delete_inode: IO failure
EXT4-fs error (device vdd): ext4_lookup: deleted inode referenced: 1191615
私はここにはSSDを使っているので、HDDほどには故障しないと思い、思い切ってフォーマットし直して、バックアップしていたデーターで、復旧する事にした。
まずはこのサーバーを止め(kvmのサブホストで動いている)。該当する領域をフォーマットしなおして、バックアップデーターからリストアし、無事復旧した。
追記:コピー後 mysql が走らなかった。調べると
# chkconfig --list mysqld
サービス mysqld は chkconfig をサポートしますが実行レベルで参照されていません (run 'chkconfig --add mysqld')
と出たので
# chkconfig --add mysqld
とやって、
# service mysqld start
やっとOKになり、無事WEBにもアクセス出来た。
バックアップしたデーターをリストアする時には同じホストへリストア(デフォルトの設定)すると、ディスクの空き容量が足りない事があります(使用容量と同じより大きい空きスペースがいる)。
私は大容量のディスクがある、バックアップサーバーにリストアしますが、これまでその方法が判らなかったのですが(回答がインターネットにあまり無い)。
やっと方法が判りましたが、簡単でした。ここをクリックし、最後の
OK to run? (yes/mod/no): まで進んで下さい。そこで下記のようにすると他のホストにリストアします
OK to run? (yes/mod/no): m
Parameters to modify:
1: Level
2: Storage
3: Job
4: FileSet
5: Restore Client
6: When
7: Priority
8: Bootstrap
9: Where
10: File Relocation
11: Replace
12: JobId
13: Plugin Options
Select parameter to modify (1-13): 5
The defined Client resources are:
1: smb5-fd
2: kvm5-fd
3: web5-fd
Select Client (File daemon) resource (1-3): 1
Run Restore job JobName: Restore-web5
Bootstrap: /var/spool/bacula/bacula-dir.restore.1.bsr
Where: /Backup/Restores/web5
Replace: always
FileSet: Full web5
Backup Client: web5-fd
Restore Client: smb5-fd
Storage: File
When: 2015-05-10 10:06:20
Catalog: MyCatalog Priority: 10
Plugin Options: *None*
OK to run? (yes/mod/no): y
ここで気を付けなければならないのは、本体でディスクを分けてマウントしていても、リストアした分は( / ルート)以下がすべてリストアされますのでマウントしていたディスクのすべての使用容量分の空きスペースがいります。

2015-7-5追記:ダウンロードに時間がかかるので、PDFからJPGにしました。
2014年12月6日から12月29日のデーターはここをクリック
2015年1月1日から1月23日のデーターはここをクリック
2015年1月23日から2月15日のデーターはここをクリック
2015年2月16日から3月11日のデーターはここをクリック
2015年3月22日から4月14日のデーターはここをクリック
2015年4月18日から5月8日のデーターはここをクリック
2015年5月8日から5月31日のデーターはここをクリック
2015年6月1日から6月24日のデーターはここをクリック
2015年6月29日から7月19日のデーターはここをクリック
2015年7月19日から8月11日のデーターはここをクリック
CentOS6.6でyumから入れるとバージョンは1.8.7とかなり古いのでrubyを入れるためrbenvからインストールする。
まずはgitをインストールする
# yum install git
自分の環境だけに(ログインしているユーザーのみ)インストールしたいので、普段使っているユーザーでログイン後
$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
rbenv のコマンドラインツールを利用できるように
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
ここで一度ログアウトする。私は仮想環境でホストを作りそこにインストールをしているため、VNCでホストに入っているので、VNCからログアウト後、再ログイン
rbenvを確かめる
$ rbenv
rbenv 0.4.0-129-g7e0e85b
Usage: rbenv <command> [<args>]
以下略
$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
rubyをインストールする前に今後使うものをインストール
$ sudo yum install openssl-devel mysql-devel readline-devel
rubyのインストール。まずはインストールできるバージョンを調べる
$ rbenv install -l
かなり長いリスが表示されるのでgrepをつけ他方が見やすい。バージョン2があるのが判っていれば rbenv install -l|grep 2
ruby 2.2.0をインストールすことにする
$ rbenv install 2.2.2
おーっと、ここでエラーになった。エラーの内容は
Last 10 log lines:
make[3]: ディレクトリ `/tmp/ruby-build.20150213115701.3537/ruby-2.2.0/ext/fiddle/libffi-3.2.1' から出ます
linking shared-object fiddle.so
/usr/bin/ld: ./libffi-3.2.1/.libs/libffi.a(raw_api.o): relocation R_X86_64_32 against `.text'
can not be used when making a shared object; recompile with -fPIC
./libffi-3.2.1/.libs/libffi.a: could not read symbols: Bad value
collect2: ld はステータス 1 で終了しました
make[2]: *** [../../.ext/x86_64-linux/fiddle.so] エラー 1
make[2]: ディレクトリ `/tmp/ruby-build.20150213115701.3537/ruby-2.2.0/ext/fiddle' から出ます
make[1]: *** [ext/fiddle/all] エラー 2
make[1]: ディレクトリ `/tmp/ruby-build.20150213115701.3537/ruby-2.2.0' から出ます
make: *** [build-ext] エラー 2
どうやら libffi-devel が必要らしい。yumでインストール
$ sudo yum install libffi-devel
再度挑戦
$ rbenv install 2.2.2
今度は無事インストール出来たが、コンパイルしているのでものすごく時間がかかるので、気長に待つこと。
sambaのバージョンが4.1.16なったら、service samba startで起動しなくなった!
アップデートされたのは下記のプログラム
samba41-4.1.16-2.el6_23.wing.x86_64
samba41-libs-4.1.16-2.el6_23.wing.x86_64
samba41-client-4.1.16-2.el6_23.wing.x86_64
samba41-python-4.1.16-2.el6_23.wing.x86_64
samba41-dc-libs-4.1.16-2.el6_23.wing.x86_64
samba41-dc-4.1.16-2.el6_23.wing.x86_64
samba41-common-4.1.16-2.el6_23.wing.x86_64
それで、samba-tool domain provision を走らす。
全ての問い合わせに答えた後、
Looking up IPv6 addresses
ldb: module version mismatch in ../source4/dsdb/samdb/ldb_modules/acl.c : ldb_version=1.1.17 module_version=1.1.19
ldb: failed to initialise module /usr/lib64/samba/ldb/acl.so : Unavailable
Setting up secrets.ldb
centosのBASEレポにはないので、wingレポから持ってくるが、このままではBASEレポが優先されてしまうので、
/etc/yum.repos.d/CentOS-Base.repoを
[base]
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
priority=1
enabled=0 ← これを追加し、BASEを無効にする
GUIのアップデートをするため、システム→管理→ソフトウェアの更新をクリック
ここで、httpd関連の二つと、postfix(私はpostgreyを入れているのでソースからコンパイルする必要があるので、
アップデートを止めてある)、sssd-common(これはlibldb(x86-64) = 1.1.13 を要求するが、sambaのために
1.1.16が入っているのでエラーになるため)のチェックを外し、更新をインストールをクリック、
終了後再び、samba-tool domain provision をもう一度走らし、問い合わせに答えた後は無事終了。
service samba start でsambaが走った。やれやれ
自分のサーバーからのメールが届いて入るので気がつかなかったが、外部からのメールが届かない。
自分のドメイン内のメールは送受信とも問題ない
この時のメールーのログ(/var/log/maillog)
Jan 20 13:58:08 web4 postfix/smtpd[10859]: connect from mm.e-trend.co.jp[221.253.81.58]
Jan 20 13:58:09 web4 postfix/smtpd[10859]: NOQUEUE: reject: RCPT from mm.e-trend.co.jp[221.253.81.58]:
554 5.7.1 Service unavailable; Client host [mm.e-trend.co.jp] blocked using rhsbl.ahbl.org; List shut down.
See: http://www.ahbl.org/content/last-notice-wildcarding-services-jan-1st;
from=<ds-id0i54rctffrl.febd91f4@mm.e-trend.co.jp> to=<f-otake@kinryokai.net> proto=ESMTP helo=<mm.e-trend.co.jp>
Jan 20 13:58:09 web4 postfix/smtpd[10859]: lost connection after RCPT from mm.e-trend.co.jp[221.253.81.58]
Jan 20 13:58:09 web4 postfix/smtpd[10859]: disconnect from mm.e-trend.co.jp[221.253.81.58]
Jan 20 14:00:27 web4 postfix/smtpd[11019]: connect from m112.secure.ne.jp[150.60.13.240]
Jan 20 14:00:28 web4 postfix/smtpd[11019]: 32390807B6: client=m112.secure.ne.jp[150.60.13.240]
Jan 20 14:00:28 web4 postfix/smtpd[11019]: disconnect from m112.secure.ne.jp[150.60.13.240]
送信相手に帰ったエラーメッセージ
Hi. This is the qmail-send program at m112.secure.ne.jp.
I'm afraid I wasn't able to deliver your message to the following addresses.
This is a permanent error; I've given up. Sorry it didn't work out.
<f-otake@kinryokai.net>:
218.219.246.130 does not like recipient.
Remote host said: 554 5.7.1 Service unavailable; Client host [m112.secure.ne.jp] blocked using rhsbl.ahbl.org; List shut down.
See: http://www.ahbl.org/content/last-notice-wildcarding-services-jan-1st
Giving up on 218.219.246.130.
# gedit /etc/postfix/main.cf
smtpd_client_restrictions =
permit_mynetworks,
reject_non_fqdn_sender,
reject_non_fqdn_recipient,
reject_unknown_client,
reject_rbl_client all.rbl.jp,
reject_rbl_client zen.spamhaus.org,
reject_rbl_client bl.spamcop.net,
# reject_rhsbl_client rhsbl.ahbl.org, → コメントアウトする
check_client_access hash:/etc/postfix/access,
permit
# service postfix restart
これで外部からメールが来るようになった

2008年3月に太陽電池を設置し、6年以上が経過しました。この間試行錯誤を繰り返し、何とか稼働を続けていますので、この辺で参考にする方の為に考察をしてみます。
1:電池電圧:私はコンピューター(サーバー)のみの使用ですので24Vで正解です。(サーバーに使う12Vを安定化するために)
サーバーは自作で電源はATX電源は使わず(AC100Vにする為インバーターが必要になる)、24Vから直接12VなどをDCDCコンバーターモジュールで作っています。(2015-7-5:追記;今はマザーボードを変更したので19VをDCDCで作っています)
2:太陽電池の公称最大出力動作電圧:これは私は失敗しています。電池が24Vだとすると、最低でも34V位は必要です。巷で、売っている電池を充電する為の太陽電池は12Vで18V位の様で、これくらい必要だと思われる。
3:電池の使用について:これは必ず2セット用意し、片方を放電に、もう片方を充電にして交互に運用する事。これにより充電側の電池がフル充電される確率が高くなる。経験からですが、鉛電池はフル充電しないと寿命が極端に悪くなる様です。
4:電池の容量:現在総使用電流は平均24Vで2.5A位(光変換装置、ルーター、SWハブ、サーバー)ですが、この為に130F51という10時間率で130Ahの電池を2個直列にしさらにそれを2組使用していますが、これくらいは必要だと思われます。ただ、現在のシステムにして、春の一番充電が進む時期を迎えていませんので、過充電保護が必要かと思われます。一番大切な事は消費電力を下げる努力が必要だと思われます。(2015ー7ー5追記:未だに過充電保護回路は作っていません。充電中にかなり高い電圧まで上がっていますが、そのまま使い続けています。この間最大電圧は33.8Vですが、この状態は次の計測時(2分後)には電圧が下がっているので大丈夫ではないかとの判断です)

現行のサーバーのバックアップ用にもう一台同じ仕様のサーバーを作っている時、ネットワーク越しにDDコマンドが使えるか探すとここに回答があった。
考え方は dd コマンドの出力側と受け側に分け、間を nc コマンドでつなぐ見たいになっている。
まずは現行のサーバーの方で
# dd if=/dev/Kvm/web4 | nc 192.168.XX.XX 12345
if=の後ろは例によって領域(device)の指定。私はLVMでサブホストのルート領域を作っているのでこんな風になっている。普通なら /dev/sda1 とかかな
パイプ(|)の後は nc コマンド(netcat)の略らしい。その後のIPアドレスはバックアップ用のサーバーのIPアドレス、次の数字が使用するポート番号
ーーーーーーーーーーーーーーーーーーー
バックアップ用サーバーに移って
# nc -l 12345 | dd of=/dev/Kvm/web5
-l で nc をリッスンモードにし、同じポート番号にして、パイプの後は dd コマンドの後ろの設定
同じホスト間での dd だったら、上記は dd if=/dev/Kvm/web4 of=/dev/Kvm/web5 となるが、これを出力側(if)と受け側(of)に分けている。
ネットワークはギガビットだが思ったより早く終了した。多分同じホスト間より早いくらい。
これには理由がある。私はサブホストのルート領域、データー部分などを1台のSSDの押し込めているので(サーバーを小さく作りたい)出力側も受け側も同じディスクを指定する事になるからだと思う。
おまけ:いつも忘れる、ddの進捗状況を表示する を忘れるので
新しくターミナルを開いて
# watch -n 60 pkill -USR1 dd
とすると、60秒毎に何メガコピーしたか表示される。
追記:重要
CentOS7でやったらエラーが出る
Ncat: Connection refused.
google先生に聞いても中々回答がない、ふとリッスンを先にしたら難無く繋がった
つまり、受け側(# nc -l 12345 | dd of=/dev/Kvm/web5)を先にやってから
送り側(# dd if=/dev/Kvm/web4 | nc 192.168.XX.XX 12345 )ということ
うーん、CentOS 7だからかNcatのバージョウンが変わったか、それとも私の勘違いで最初からだったのか???
現行のサーバーのバックアップを作っている時の事、特定のホスト間でpingが出来ない。
それぞれのホストではルーターへのpingも通るし、だからインターネットも出来ている。
結論はMACアドレスの重複。
何でこうなったか。KVMのサブホストを作るのに一からやるのはしんどいので、現行のホストの設定ファイルをコピーしてきた。
(/etc/libvirt/qemuにあるサブホスト名.xml)
ホスト名とIPアドレスがかぶるのは分かって居たので変更をしたが、これ以外にも
サブホストのUUIDと仮想ネットワークカードのMACアドレスもかぶっている。
これらを適当に変更したらOKになった。でも数時間無駄にした。
教訓:KVMのサブホストをコピーしたら、
サブホストのUUID、ホスト名、NICのMACアドレス、IPアドレス
を変更する事
もう少し詳しく書くことにする(2016-5-29追記)
まずはサブホストのUUIDとMACアドレスの重複から、
仮想化で無ければMACアドレスがかぶることは無いが(ネットワークICのベンダーとシリアルでかぶることは無い)
サブホストの設定ファイルを /etc/libvirt/qemu/XXXXX.xml 等からコピーをしたら、この中にMACアドレスが書いてあるので、必ず重複する。
まずはその解決方法。コピーした時に定義が反映していないときがあるので(必ずサブホストは止めておく)
# virsh define /etc/libvirt/qemu/xxxx.xml
で定義をしておく。次に定義ファイルの編集
# virsh edit 定義ファイル名(xxxx.xmlの .xml を取ったもの)
これで vi と同じ方法で編集できますので、
a でインサートモードにし、カーソルで該当個所に行き、不要な部分を削除し、そこに新しい分を追記し、escキー, w, q と連続して入力すると編集後の分が定義され保存されます。
念のため、再度
# virsh define /etc/libvirt/qemu/xxxx.xml
で定義し直し(多分やらなくてもいいかも)サブホストを 仮想マシンマネージャーから起動すると新しいUUIDとMACアドレスになっています。
ここでMACアドレスは XX:XX:XX:ZZ:ZZ:ZZ になっていますが、最初の XX:XX:XX はベンダーID(KVMの仮想化の場合 52:54:00 です、次の ZZ:ZZ:ZZ がシリアルですので、他のホストとかぶらないように適当に決めます)
次にホスト名(仮想マシンマネージャー上の名前ではなく、サブホスト自身の名前)と IPアドレスを変更しますが、これはサブホストのファイルを変更する必要がありますが、KVMは領域の中にさらに領域を作っていますので、メインのホストにマウントするには(編集の為に)コツがいります(もちろんサブホストは止めておく)
これには losetup と kpartx を使っていきます。私はLVMを使っていますので# losetup -f
で使えるloop番号を調べ
# losetup /dev/loop番号 /dev/ボリューム名/サブホストに割り当てたLV名
# kpartx -a /dev/loop番号
さらに
# ls /dev/mapper
でmapperにあるファイルが表示されますので、その中に loop番号p1 などがあります。
これをマウントしますが、私はtestようのマウント場所を作っています(/test1,/test2)
# mount /dev/mapper/loop番号p1 /test1
サブホストの名前は
# gedit /test1/etc/sysconfig/network
抜粋
HOSTNAME=設定したいサブホストの名前
で保存後、IPアドレスは(私は固定IPで、NetworkManager は使っていません)
# gedit /test1/etc/sysconfig/network-scripts/ifcfg-eth0
抜粋
IPADDR=192.168.XX.XX
で後始末
# umount /test1
# kpartx -d /dev/loop番号
# losetup -d /dev/loop番号
それから再起動すればいい筈だったが、ブートでエラー(画像3)
これは前にも経験がある、多分MACアドレスをいじったために出たと思うが、/etc/udev/rules.dにある 70-persistent-net.rulesを削除し、
再起動すれば、自動でこのファイルを作ってくれるので正常に起動する