サーバー運用とPC日記
データの保管、保護について改めて考えてみる
普段PCやスマホで扱っているデータが壊れてしまう事はめったにないので、普段は安心しちゃっています。
ですが、やはりトラブルは突然起こるものです。
システムデータが壊れた場合は、PCが起動しなかったり、Webサイトが失われてしまったり(!)という、深刻な事態になってしまいます!!
そこで、改めてデータファイルの保管、システムの保護等について考え直してみることにしました。
自分は、今までの様々なデータをLinuxSambaを使った自作NASに保管していました。
そして、さらにこのデータをWindowsクライアントPCのセカンダリディスクに定期的にバックアップしていました。
このバックアップディスクはWebサーバーで連続稼働させていたお下がりで、いつ壊れてもおかしくないヤツなんですが、バックアップ用なので「まあいいか」と使い続けています。
そしてNASもRAID1で動かしていたので安心し切っていたんです。
トラブルが起こったのは一昨年末でした。
家庭内LANの第3オクテットを変更しようと作業した際、NAS内部のDebian設定でつまずいてしまいDebianが起動しなくなってしまいました。
この時、ソフトウェアRAIDで組んでいたシステムであったのに、RAIDシステムの復旧もHDD内のデータ救出も出来ませんでした・・・!
RAIDの再構築も、セカンダリディスク(呼び方合ってる?)からのシステム立ち上げも出来なかったんです。
これらの方法の練習もやってなかったし、習得もしてなかったんですね・・・
こんな状況ではイザという時に対応なんか出来ませんね!
そこで、再度ソフトウェアRAIDを構築する前に、曖昧だった次の知識についてまず調べることにしました。
①MBR
②ESP
③UEFI
④GPT
⑤ブートストラップローダー
⑥grub
⑦/boot
次に、実際に実験機でソフトウェアRAID機を構築して、故意にトラブルを起こしてみることにします。
そして、このトラブルに対処する手順を実習して習得しておこうと考えました。
①実験的に片側のディスク(grubがインストールされていないセカンダリディスク)を外して挙動を調べてみる。
② ①のあとに新しいセカンダリディスクを取り付けてRAIDを再構築し、RAIDシステムを復旧させてみる。
これが出来るようになったら、
①grubがインストールされていないセカンダリディスクに、grubを手動インストールしてセカンダリディスク単独でも起動できるようにしてみる。
②grubがインストールされているプライマリディスクを外して挙動を調べてみる。
③ ②のあとに新しいプライマリディスクを取り付けてRAIDを再構築し、RAIDシステムを復旧させてみる。
次年度に備えて、今日からこれらの作業に取りかかっていますが、かなり時間がかかりそうです・・・
後日、ここに備忘録を残しておこうと思っています。
PC起動のしくみ(まだ細部まで理解できていない・・・)
電源投入
↓
BIOSによるデバイス初期化
↓
ブートデバイスの決定
↓
ブートストラップローダのロード
↓
ブートローダの実行
↓
OSの起動
PCの電源を投入すると、マザーボードのROM中のBIOSが起動。
このBIOSの初期化プログラムが、PCに接続されている各種デバイスの初期化を行う。
この過程が POST(Power On Self Test)。(起動直後に画面表示されている)
各種デバイスの初期化が終了すると、BIOSは次の段階に入り、起動するためのドライブを探す。
起動ドライブとなるのは、HDD、 CD-ROM、USBフラッシュメモリなど。
BIOSは起動ドライブを見つけるとそのデバイスをファーストブートドライブとして起動を試みる。
HDDの起動を例にすると、
BIOSはそのブートドライブの先頭セクタのロードという段階に移る。
HDDの先頭セクタは MBR(Master Boot Record)といい、MBRは1台のHDDに1つだけ。
BIOSはこのMBRをメモリ上にロードし、MBR領域にあるプログラムに制御を移す。
このMBR領域にあるプログラムを、ブートストラップローダと呼ぶ。
ブートストラップローダは、パーティションテーブルから起動フラグのあるパーティションを探す。
パーティションテーブルとは、複数のパーティションに関する情報が保存されているMBR内の1つの領域。
この起動フラグのあるパーティションにブートストラップローダから制御が移行。
このとき、ブートストラップローダから呼び出されるのが各基本パーティションにあるブートセクタ。
ブートセクタは各基本パーティションの先頭セクタのことを指し、PBR(Partition Boot Record)と呼ばれる。
PBRに制御が移行すると、そのPBRのプログラムが動作することになる。
このPBRにあるプログラムコードが IPL(Initial Program Loader)で、OSを起動させるためのブートローダの残りの機能を呼び出す機能を持つ。
MBRやPBRは512バイトと非常に小さな領域しかなく、その中のIPLのデータサイズはさらに小さい。
この小さなデータサイズにOSを起動させるためのブートローダのプログラムを全て格納できない。
そのため、IPLはブートローダの一部のプログラムコードを持ち、ブートローダの残りに機能はPBRの後続セクタに置いている。
IPLから呼び出されたブートローダが後続のOSのファイルを読み込んでいき、最終的にOSが起動する。
ソフトウェアRAID1、今後障害対応出来そうです!
ソフトウェアRAIDは、当然ですが、OSが立ち上がった後でないとRAIDが機能しません。
ということは、OSが立ち上がるまではRAID動作ではないし、RAID動作開始までは1本のみのディスクで動いているということになります。
ですから、起動ドライブ(ドライブ1)に不具合が発生してしまうと、起動さえも出来なくなってしまいます。
これを避けるために、「ドライブ2にもMBRを用意しておきgrub 等のブートストラップローダーをドライブ2にもインストールしておけば良い」と書かれています。
しかし、今までこの作業をしてきませんでした。
RAIDシステムが出来上がって機能し始めれば、トラブルが起こるまでは対応は必要ないし、「まあ後で対応すればいいや」と思いながら結局対応しないままになっちゃっていたんです。
さて、サーバーOSのインストールはインストールメディアから立ち上がるインストーラーに任せていますが、最後のgrubインストールで/dev/sdaを指定してインストールが終わった後に、再度grubを/dev/sdbに手動でインストールするようにと、手引きには書いてありました。
ところが、この作業がエラーになってしまい上手くいきません。
試行錯誤している中で、今日試してみた作業がたまたま上手くいったので書いておきます。
RAID構築が終わったあと、インストールメディアをレスキューモードで起動させます。
①ディスク1、ディスク2をRAIDドライブとして認識させる。
②RAIDドライブを構成している/dev/sdbを指定してgrubをインストールする。
これでうまく行きました!
もちろん、うまくいったかどうかの検証が必要ですね。
まず、ディスク2を外して電源を入れてみます。
起動してディスク1本のみの環境を作っているようです・・・
この後しばらくしてログイン画面となりました。
起動完了したようです。
では、次にディスク1を外して電源を入れ、ディスク2からの起動を試みます!
立ち上がりましたね!
先ほどと同様、ディスク1本のみの環境を作っているようです・・・
この後、しばらくしてログイン画面が表示されました!
ディスク2からの起動もOKのようですね!
最後にディスクを2本とも元通りに接続して、電源を入れてみます。
2つのディスクを完全に同期させる動作を行っているようです・・・
このあと最終的な結果が表示され、RAID1環境が完全に出来上がっていることが確認できました!
もう少し実験したいことがありますが、これで重要な一区切りまでは行けたようですね!
RAID1システムまだ正常動作していませんでした
Debian10サーバーによるRAID1システムが出来上がったので、Sambaファイルサーバーの運用を再開しました。
ところが、Webminでディスクの状況を確認してみたところ、赤字で「degraded」の警告らしきものが出ていました。
degraded?
「劣化? 退化? 低下?」!!
異常の通知のようですね!
このディスクはWD社REDのNAS用モデルなんですが、Webサーバーのシステムディスクとして1年以上ノンストップ連続運転させていたお下がりなんです。
エラーも出ていないしまだ使えるだろうと思っていたんですが、やっぱりもうダメかな? と調べてみることにしました。
すると、どうもこの前やった実験(RAID構築後に片側ディスクだけで起動するか)のあと、両方のディスクを接続し直しただけではRAID1システムは再構築されていないようだということが分かってきました。
RAIDが不完全なまま動いているようで、これではダメですね!
きちんと復旧させておかなければいけません。
そしてその復旧作業のあと、念のために、どちらの片側ディスクからも起動することをもう一度確かめておく必要があります。
もちろん、最終的には再度RAID1復旧作業を行って終わりにしておかないといけませんが。
こういう実験は今回のような自粛期間中にどんどんやっておきたいと思います!
外で動けるような日に室内に閉じこもって作業するのはイヤですからね!(笑)
Wordpressに簡易グループウェア機能を持たせることが可能?
自分のWebサイトを今後どうするのか、いつまで運用できるのか、良く考えるんですが、
①自分自身でサーバーマシン、システムのメンテ、サイトの更新が出来る時まで
②このNetcommons等のWebアプリケーションの開発が続き、自分自身で更新していける時まで
③無料DDNSサービスが継続するまで
さしあたってはこんな感じなんですが、②のNetcommonsに関しては不安があるんです。
自分が持っている程度のスキルでNetcommonsのメンテを続けていくためにはWeb上での多くの情報が必要ですが、現状では情報があまり得られていません。
Netcommonsの運営方針も昔とは異なってしまい、今後どうなっていくのか現時点では不透明です。
自分もあと数年で教育現場から完全に引退すれば、グループウェアもあまり使わなくなってくるかもしれません。
今日何気なくサイトを見ていたら、「Wordpressがグループウェア的に使える」といった感じの記事が目に留まりました!
Wordpressは、大規模なWebサイト構築に使われているCMSで世界中で広く利用されています。
また2020年の統計では、世界中のCMSの60%以上、世界中のWebサイトの35%以上のシェアを持っているソフトです。
Wordpressの運用情報は非常に多く、このシステムの構築とメンテナンスを続けていくことに関しては先が明るい感じがします。
Netcommonsのような高度なグループウェア機能はないかもしれませんが、ちょっと気になる情報でした。
現状では、例えば以下のようなプラグインを使うことでグループウェア機能を実現しているようです。
ということは、今後新しいプラグインも開発されていくかもしれませんね!
なぜ自宅サーバー?
このサイトは自宅サーバーでの運用ですが、自宅サーバー運用はデメリットの方が非常に多い訳です。
自宅サーバーのデメリットは検索すれば沢山出てきますが、デメリットの中で最も怖いのは、
①サーバーマシンから発火して火災が発生する!
②セキュリティーを破られて不特定多数の方に迷惑をかける!
自分でサーバーマシンを組み立てて、ソフトをインストールしてシステムを作るというのはもちろん楽しいことではありますが、上記のデメリットだけで充分大きなリスクですね!
自分のサーバーでは、今のところですが、運用当初よりトラブルはなく安定しているのですが、常に面倒を見続けなければならない状況はこれからも変わらないでしょう。
ところで、自分が自宅サーバーを始めた理由ですが、
①職場と自宅の間の大容量ファイルのやり取りをする環境が必要だった。
②一般的なクラウドを使って仕事で使うファイルをやり取りすることは当初職場では禁止されていたし、許可されていたとしても自分には抵抗があった。
③校務でネット上のグループウェア(Netcommons2)を操作しているうちに、自分の仕事にも活用できそうだと思った。
④音楽ファイルをサーバーに貯めておけば、ネット上でアクセスできる。容量が非常に大きな音楽ファイルでも自宅サーバーなら容易に実現できる。
今の仕事を続けている間は、自分にとって①~③は重要ポイントなんです。
完全退職後は、①~③は不要になりますし、これらの一部機能はレンタルサーバー上で実現すればOKでしょう。
④は車の運転中にタブレット等を使って音楽を流しておくとかで残したい機能なんですが。
といった感じで、今のところは充分に気をつけながら自宅サーバーを運用していこうと思っています。
実は今もう一つ、作りたいものがあるんです。
震災や風水害等の大災害が発生した時の連絡システム、安否確認が出来るシステムです。
災害時の連絡ツールはLINEが良さそうですが、LINEでもシステム障害が起こったことはあるそうですし、LINEよりデータの流れがシンプルなものを作れないかということなんです。
この件についてはまた別の機会に書こうと思います。
災害時等連絡システム(1)
阪神淡路大震災、そして東日本大震災でも経験したんですが、このような時、連絡を自由自在に取り合ったり、安否をすぐに確認したりということが難しくなりますよね?
このような事態に遭遇した時、どのように連絡を取り合うのか、いい方法がないか考えています。
例えば、3.11東日本大震災の教訓から生まれた「LINE」という素晴らしいアプリケーションがありますね!
LINEは災害時の安否確認等にも威力を発揮してくれると思うのですが、過去、システム障害が発生したことがあるそうです。
他のサービスでも同様だと思いますが、図中クラウド上のサーバーに多数の利用者のデータが集中すれば、さばき切れなくなることは予想できます。
自由に連絡が取りあえるシステムを何とか作れないでしょうか?
たとえば、レンタルサーバー上にチャット機能を持たせた簡単なサイトを作るとかです。
Peer to Peer接続であれば、サーバーを介さず1:1で通信できるので、緊急時の連絡システムとしてはこれが一番良さそうです。
LINEは、ユーザーIDなどのアカウント情報は管理していますが、データファイルやトーク履歴などはLINEサーバーを介さずユーザー同士が直接管理しているそうです。
(しかし、実際の通話やチャットの中身のやり取りはPeer to Peerではないそうです)
最近、ふと思いついたことがあるんです。
もし、自宅までの光回線が、クラウド上のサーバーまでの光回線と同じくらいの程度で安定であれば、ルーターやサーバー本体への電源をしっかりと確保した自宅サーバーでも使い物になるのではないかということです!
つまり大規模停電等が起こっても自宅までの光回線がダウンせず、サーバー周りへの給電は太陽電池と充電池を組み合わせたもので行うようなシステムにしておけばいいのではないか?
まだ実験の段階なので、運用中の自宅サーバーを使って試している最中です。
RocketChatサーバー(snapインストールだともの凄く楽でした!)はインストールしてみましたが、緊急事態に突然初めてのユーザーが利用するには、初期設定等かなり面倒でした。
LINEと同程度に簡単にすぐ利用開始できるものがいいですね!
(続く)
災害時等連絡システム(2)
全く偶然ですが、自宅サーバーで運用している Nextcloud に Talk というプラグインが用意されていて、通話、ビデオチャットも含めたチャット機能が備わっているのを発見!!
早速プラグインを有効にしてみました。
また、android、ios用のアプリも用意されていて、スマホに無料でインストールできます!
昨夜、早速娘とチャットのやり取りとチャット通話の実験をしてみました。
(娘のニックネームはネズミなんです! 笑 )
これ、LINEとほぼ同じ感覚で使えそうですね!
すごい!!
これでいけるかも。
しばらく色々な実験をして、安定に使えるか確かめてみたいと思います。
GPGキー期限切れのupdateエラー
いつものようにサーバーOS(Debian10)のアップデートをしていたら、エラー表示が!
---@aaa:~# apt update
Err:4
https://packages.sury.org/php buster InRelease
The following signatures were invalid: EXPKEYSIG ********** DEB.SURY.ORG Automatic Signing Key <deb@sury.org>
W:
An error occurred during the signature verification. The repository is not updated and the previous index files will be used. GPG error: https://packages.sury.org/php buster InRelease: The following signatures were invalid: EXPKEYSIG ********** DEB.SURY.ORG Automatic Signing Key <deb@sury.org>
W:
Failed to fetch https://packages.sury.org/php/dists/buster/InRelease The following signatures were invalid: EXPKEYSIG ********** DEB.SURY.ORG Automatic Signing Key <deb@sury.org>
W:
Some index files failed to download. They have been ignored, or old ones used instead.
このエラーはGPGエラーで、署名が無効だと言っています。
アップデートファイルをダウンロードする時、GPGキーという公開鍵を使って正しい配布先からのファイルであるかのチェックをしているんですが、GPGキーには有効期限があるんです。
ということで、GPGキーを新たに取得してきます。
---@aaa:~# wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
--2021-05-02 11:00:22-- https://packages.sury.org/php/apt.gpg
Resolving packages.sury.org (packages.sury.org)... 2606:4700:3037::6815:1294, 2606:4700:3030::ac43:b696, 172.67.182.150, ...
Connecting to packages.sury.org (packages.sury.org)|2606:4700:3037::6815:1294|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1769 (1.7K) [application/octet-stream]
Saving to: ‘/etc/apt/trusted.gpg.d/php.gpg’
/etc/apt/trusted.gpg.d/php 100%[======================================>] 1.73K --.-KB/s in 0s
2021-05-02 11:00:22 (8.70 MB/s) - ‘/etc/apt/trusted.gpg.d/php.gpg’ saved [1769/1769]
新しいGPGキーを取得できたようです!
では、再度アップデートしてみます。
---@aaa:~# apt update
Get:1 https://packages.sury.org/php buster InRelease [6,823 B]
Get:7 https://packages.sury.org/php buster/main amd64 Packages [316 kB]
Fetched 316 kB in 3s (122 kB/s)
Reading package lists... Done
Building dependency tree
Reading state information... Done
24 packages can be upgraded. Run 'apt list --upgradable' to see them.
エラーなくアップデート出来ました!
新しい24個のアップデートパッケージが見つかったので、この後 apt upgrade コマンドでこれらのパッケージを適用しました。
このGPGエラーは期限切れで発生するので、あせらずにGPGキーを再取得してアップデートしてみて下さい!
MydnsのDDNSサーバーがダウンしているようです・・・
現在、20時16分ですが、LAN内からブログ更新しています。
しかし、外部つまりWANからのアクセスが出来ない状況です。
お世話になっているMydnsのDDNSサーバーがダウンしているようなんです。
このサーバーが復旧してくれないと、このサイトはWAN上に公開できないのです・・・
DDNSサーバーが復旧した時、この記事が見えているはずです。
このウェブサイトは、
NetCommons3.3.7で動いています。
NetCommons プロジェクト 開発の、
CMS+グループウェアです!
日 | 月 | 火 | 水 | 木 | 金 | 土 |
27 1 | 28 1 | 29   | 30   | 31   | 1   | 2   |
3   | 4   | 5   | 6   | 7   | 8   | 9   |
10   | 11   | 12   | 13   | 14   | 15   | 16   |
17   | 18   | 19   | 20   | 21   | 22   | 23   |
24   | 25   | 26   | 27   | 28   | 29   | 30   |