sambaサーバトラブルの顛末

社内で構築していたSambaサーバがサーバのトラブルでサービスを一時停止せざるを得ない状態になりました。
その際の対処の覚書です。

あくまでも自身で構築したSambaサーバに関する復旧作業ですので、参考にされる(されないか(汗))場合は自己責任で・・

サーバトラブルの概要

  • Ubuntu14.04Lts Server
  • 1CPU/8GB/SATA2THDD x 2 (RAID1)
  • Samba4.3.9/AD-DC

前兆

朝出社するとドメインメンバーのPCでログイン出来ないとのこと。
(厳密にはログインできるが、デスクトップが表示されていない状態)
確認すると、DiskI/O Errorが発生している模様。
リカバリモードで起動して、fsckして対処後、再起動で問題なく起動
当面それで様子を見ようと思ったものの、翌日には再びドメインメンバがログイン出来ない状況に。

対処

サーバ再起動時、3wareのBIOS画面でRAID1で組んでいるディスクアレイの内の片方が、

「DEGRADED」

の表示に。片肺で動いているような状況。

samba関連のバックアップ

リカバリモードでrootでコンソールに落りて、再度fsck後、念のためネットワーク上のNASにsamba関連の設定ファイル等をバックアップ。

設定のバックアップには、Sambaのソース*1を取ってきて、その中にある「samba_backup」というスクリプトを使え、とSambaWikiには書いてある。スクリプト内のFROMWHEREとWHEREを既存の環境に合わせてパスを変更する。(あるいは、samba_backup /from/where /where/to/backupとする事もできる)
*1:導入しているバージョンと同バージョンのソース

ただし、そのまま実行すると「空のアーカイブ作成はご容赦願います」というご丁寧なエラーが。スクリプトを確認して、/var/lib/samba/etc という存在しないディレクトリをアーカイブしている模様だったので、

としてバックアップ。

ここで気をつけなければいけないのは、SambaWikiにもあるように、

スクリプトは拡張されたACLをバックアップしません。…(中略)…。もし、あなたの使っているシステムのtarコマンドが -xattrs オプションをサポートしているなら、それをスクリプトの該当部分に追加しろ。

とあります。ただ、残念ながら、Ubuntu14.04で同様の作業を行ってみましたが、tarは-xattrs オプションをサポートしているように思えるのですが、何度やっても拡張ACLの属性を復元させることは出来ませんでした。

またその他にもProfilesやhomeのデータもバックアップをとっています。

RAIDの再構築

HDDを念のため2台取り寄せて、死んだHDD(忌まわしき海門製)の代わりに新しいHDDを装着させた上で、3ware BIOS 画面に入って(POST時にAlt + 3)今回取り付けたHDDとアレイユニットをそれぞれ選択した上で、「F8」キーを押して、「Y」で設定を保存し再起動。

再起動直後は調子よく起動するものの、生きている方のHDDもすでに整合性が失われているみたいで、しばらく時間が経つと、

「end_request: I/O error, ….」

と出てきてしまいます。

ここで、時間的な関係でRAID再構築はやめて、新た環境をセットアップすることに。

Ubuntu14.04LTS Server の再セットアップとSambaの復旧

怪しいHDDは取り外して、新しい2台のHDDでRAID1で構築後、Ubuntuサーバをインストールし、Samba4のセットアップを通常通り行っていきます。

この時、

  • バックアップ時と同じバージョンのSambaをセットアップ
    (今回の場合はバックアップ時4.3.8、リストア時4.3.9 でした)
  • 同一のホスト名+同一のIPアドレス(違う倍はkerberosとDNSで問題が発生する可能性)
  • OSは同じOSで

でセットアップしていきます。

あとはSambaWikiにあるように、一旦Sambaを落としてから、

として、バックアップしたファイルを元に戻します。

もし、バックアップ時にsysvolの拡張ACLをバックアップをできていない場合は、

また、元のDNS バックエンドが「BIND9_DLZ」の場合は、

とします(今回は「BIND9_FLATFILE」なので、この部分は検証してません)。

その後Sambaを起動して完了です。

ACLの復元

sysvolのACL復元は先ほどの通りですが、ユーザプロファイルや、ユーザーのホームディレクトリのACLの復元は、実際にバックアップからリストアしたディレクトリ名から設定してみました。

ユーザープロファイルの場合

ユーザーホームディレクトリの場合

あとはそれぞれのシェルスクリプトを実行して、ACLを復元させてみました。

発覚

ここまで復元させてきたところで、肝心なデータをバックアップ取っていないことに気が付きました。

この顛末は次回に・・