「俺様サーバー構築記 - 基本方針」以来構築を続けてきた俺様パソコン環境も、「俺様サーバー構築記 - ZFS の上に Arch Linux をインストール;やり直し@デスクトップパソコン(BIOS)」でサーバマシンを構築するに至りました。
実は最近、更に1台、古い古い古いデスクトップパソコンを部屋の隅から発掘しまして。詳細は別稿に譲りますが、それを俺様サーバーの待機系として活用し、マスタースレーブ構成の構築を試みる事にしました。
色々考えたのですが、前準備としてデスクトップパソコンのディレクトリ構造を若干変更します。具体的には、マシン固有の部分と、マシンを超えて共有されるべき部分とを分離したい。その為の修正です。
(2019/11/29 追加ここから)
この記事の通りにファイルシステムを用意し、該当ディレクトリ(/home など)をシンボリックリンクで /zfs/tank/sub0/home などにリンクしたのですが。残念ながら失敗しました…
pacman -Syu
すると、シンボリックリンクが自動的に削除されて勝手に空ディレクトリが作成されるようです。つまり勝手に戻された上に空になります。なんという事でしょう
仕方が無いので諦めました。変更点が多くなるため別記事にしましたので、そちらを参照ください。
(2019/11/29 追加ここまで)
ディレクトリ構造
$ ls /
bin dev home lib64 opt root sbin sys usr
boot etc lib mnt proc run srv tmp var
zfs 的には次のようなファイルシステム構成になっています。
$ zfs list
NAME USED AVAIL REFER MOUNTPOINT
tank 3.69G 446G 24K legacy
tank/main 3.69G 446G 2.51G /
要するに tank/main
をルートディレクトリとして、全てのファイルはこの中に格納されているのが現状です。
今回は tank/sub0
を作成して、サービス用データとしてマシン間で共有すべきデータを格納するファイルシステムとします。
その場所も悩み所でしたが。悩んだ末に /zfs/tank/sub0
に決めました。/tank/sub0
でも良いんですけどね、そもそも ArchLinux 標準の手順だと tank
じゃなくて zroot
だったりします。こういう名前に依存したマウントポイントにすると後々混乱の元になりそうですし、zfs のファイルシステムである事を明示的に表現するディレクトリ名にして、その中にマウントポイントを作りました。/.zfs
とも被りますけども、そこは人間の注意力に期待します。まぁこの位なら大丈夫…と信じたい。
実施
tank/sub0
を作成して、所定のディレクトリにマウントします。
# zfs create tank/sub0 -o mountpoint=legacy
# mkdir -p /zfs/tank/sub0
# vi /etc/fstab
# cat /etc/fstab
# Static information about the filesystems.
# See fstab(5) for details.
# <file system> <dir> <type> <options> <dump> <pass>
# tank/main
tank/main / zfs rw,xattr,noacl 0 0
tank/sub0 /zfs/tank/sub0 zfs defaults,noatime,acl 0 0
マウントして確認。
# mount tank/sub0
# mount | grep tank
tank/main on / type zfs (rw,relatime,xattr,noacl)
tank/sub0 on /zfs/tank/sub0 type zfs (rw,noatime,xattr,posixacl)
ここまで来たら、後は心置きなく好きなディレクトリを tank/sub0
に集めましょう。
現在考えているのは下記4ディレクトリです: /home
/opt
/srv
/var/opt
後日検討してもっと増える可能性もありますが、その場合は都度追記します。例えば /usr
ディレクトリは元々複数マシン間で共有対象となるコマンドなどの置き場所として FHS で仕様化されていますが、今回の用途では共有不要と考えました。その辺で判断が変わる可能性が無きにしも非ず。
(2019/06/29 変更ここから)
# for d in /home /opt /srv /var/opt; do q=/zfs/tank/sub0$(dirname $d); mkdir -p $q; mv -v $d $q; ln -sv /zfs/tank/sub0$d $d; done
created directory '/zfs/tank/sub0/home'
created directory '/zfs/tank/sub0/home/taro'
copied '/home/taro/.bash_profile' -> '/zfs/tank/sub0/home/taro/.bash_profile'
copied '/home/taro/.bash_history' -> '/zfs/tank/sub0/home/taro/.bash_history'
copied '/home/taro/.bashrc' -> '/zfs/tank/sub0/home/taro/.bashrc'
copied '/home/taro/.bash_logout' -> '/zfs/tank/sub0/home/taro/.bash_logout'
created directory '/zfs/tank/sub0/home/taro/.ssh'
copied '/home/taro/.ssh/authorized_keys' -> '/zfs/tank/sub0/home/taro/.ssh/authorized_keys'
removed '/home/taro/.bash_logout'
removed '/home/taro/.bash_profile'
removed '/home/taro/.bash_history'
removed '/home/taro/.ssh/authorized_keys'
removed directory '/home/taro/.ssh'
removed '/home/taro/.bashrc'
removed directory '/home/taro'
removed directory '/home'
'/home' -> '/zfs/tank/sub0/home'
created directory '/zfs/tank/sub0/opt'
removed directory '/opt'
'/opt' -> '/zfs/tank/sub0/opt'
created directory '/zfs/tank/sub0/srv'
created directory '/zfs/tank/sub0/srv/ftp'
created directory '/zfs/tank/sub0/srv/http'
removed directory '/srv/http'
removed directory '/srv/ftp'
removed directory '/srv'
'/srv' -> '/zfs/tank/sub0/srv'
created directory '/zfs/tank/sub0/var/opt'
removed directory '/var/opt'
'/var/opt' -> '/zfs/tank/sub0/var/opt'
(2019/06/29 変更ここまで)
う〜ん、mv -v
の表示が意外でした。コピーしてから削除なんですね。異なるファイルシステムだから当然ですが、表示の行数が予想より多くなってしまいました。
再起動して確認。
# reboot
/home
を移動したので、例えば適当な一般ユーザ taro などでログインできればひとまず成功と言ってよろしいかと。
Arch Linux 5.1.12-arch1-1-ARCH (tty1)
〈サーバ名〉 login: taro
Password: 〈taroのパスワード〉
他のディレクトリも確認。
$ ls -l / /var | grep -e home -e opt -e srv -e var/opt
lrwxrwxrwx 1 root root 19 Jun 23 23:56 home -> /zfs/tank/sub0/home
lrwxrwxrwx 1 root root 18 Jun 23 23:56 opt -> /zfs/tank/sub0/opt
lrwxrwxrwx 1 root root 18 Jun 23 23:56 srv -> /zfs/tank/sub0/srv
lrwxrwxrwx 1 root root 22 Jun 23 23:56 opt -> /zfs/tank/sub0/var/opt
これで、待機系との間で共有するブツの格納場所 tank/sub0
が確保できました。
やったね