ストレージワーク:btrfs+EncFS / dm-crypt+ZFSでのリモートミラー
zfs
- TOP
- Old Archives
- ストレージワーク:btrfs+EncFS / dm-crypt+ZFSでのリモートミラー
Btrfs上にEncFSを構成したマスターから、dm-crypt上にZFSを構築したスレーブへとミラーする、しかもそれらのホストはシャットダウンされる。これはかなり厳しい条件だった。
やはりシャットダウンされるためにHA(高可用)システムは使えない。シャットダウンする時点で障害発生とみなされるし、切り離された状態で単独でスタートアップして動けない。
さらに、EncFSはrootであってもアクセスを許さないため、非常にセキュアではあるが、GlusterFS GeoReplicationも使えないなど障害になった。
やはり無理な要求である、というのは LinuxQuestionで聞いてみても 明らかになるだけだった。だが、ここでrsyncが大規模システムに耐えるということが分かったため、rsync(1)とat(1)でいこうと決意を固めることができた。
rsync+sshはごくごく単純だ。
rsync -e ssh fromdir user@host:destdir
でいける。だが、まずはZeroconfでアクセスしたい。
Manjaroで/etc/nsswitch.conf
にmdns_minimal
を指定しても解決できない。これでホスト名を解決しようと思うと、nss-mdns
パッケージをインストールし、avahi-daemon
を動かさなくてはいけない。
さらに、CentOS側が受け入れてくれない。これは、NICがひとつだとそのNICをpublicなゾーンのインターフェイスとみなすが、Avahiはhomeインターフェイスにしか許されていない。そのため、firewall-cmd --add-service=avahi --zone=public --permanent
としてAvahi-daemonへのアクセスを透過する。
これでZeroconfでのアクセスに成功、.local
のホスト名でsshアクセスできる。ssh-keygen
でパスフレーズなしのキーを作り、アクセスしようとする。ところが、ssh-copy-id
しようとした段階でToo
many authentication failures for
...となり、sshアクセスできない。これは、sshの管理下にある鍵が多すぎる場合に生じるようだ。その数はsshdが登録、管理している鍵とファイルとして~/.ssh
以下にある鍵の総数。とりあえずの方法としては、鍵ファイルがあるものだけを鍵として扱うため、~/.ssh/config
に
IdentitiesOnly yes
と書くと改善される。ただし、ファイル自体が多くなるとこれでもダメだろう。
これで鍵によるアクセスまでできるようになった。
鍵による実際のアクセスの前に、atとrsyncについて確認する。rsyncについては前述の通りで大丈夫。atは
$ <kbd>at now + 1 minutes <<< 'zsh -c "notify-send \"$(id)\""'</kbd>
すると自身のuidになっているので、atを実行したユーザーで実行されることが分かる。EncFSに対してアクセスするためにはこれは絶対条件だ。
そしてこのままrsyncするとうまくいく。だが、パスフレーズなしで自由にアクセスできる鍵というのは危険だ。
コマンドで制限すべきなのだが、rsyncのコマンドを受ける側がどうなっているのか、というのは非常にわかりにくい。rsync -vvv -au --delete-after -e ssh
from
destして、パスワードの前に表示されたconnectionの中からrsyncより前を削り、互いにvを削って設定する。
ただし、このままでは外部からファイルを消されるリスクがあるため、ホストも限定したほうがいいかもしれない。ただし、鍵がなければできないのだから、その時はバックアップ側は仕方がない、とも見れる。
今回の成果物も GitHub にて公開。