dailyバックアップサーバー(ファイルシステム編)

とりあえずOSがOSとして動くようになればあとはバックアップ用のファイルシステムを用意します。これは以前にやった方法をそのままトレースすればOKです。

まずは接続されているディスクをまっさらにしてしまいます。

gpart show ada0
とやると
=> 40 976773088 ada0 GPT (466G)
40 1024 1 freebsd-boot (512K)
1064 984 - free - (492K)
2048 8388608 2 freebsd-swap (4.0G)
8390656 968382464 3 freebsd-zfs (462G)
976773120 8 - free - (4.0K)
と表示されて,先にインストールをしようとして失敗した痕跡が残っています。気にせずまっさらにしてしまいます。

# gpart delete -i 3 ada0
# gpart delete -i 2 ada0
# gpart delete -i 1 ada0
# gpart show ada0
=> 40 976773088 ada0 GPT (466G)
40 976773088 - free - (466G)

さらにGPTも消してしまいます。
# gpart destroy ada0
# gpart show ada0
gpart: No such geom: ada0.

これをada1, ada2, ada3についてもやります。OSをインストールしているada4にやったら大変なことになるので気をつけねばなりません。すっぱり消したらイチからファイルシステムを作り直します。ada0からada3について同じことをやります。

# gpart create -s gpt ada0
ada0 created
# gpart show ada0
=> 40 976773088 ada0 GPT (466G)
40 976773088 - free - (466G)

次にzfsファイルシステムを作ります。
# gpart add -t freebsd-zfs -l disk0 ada0
# gpart add -t freebsd-zfs -l disk1 ada1
# gpart add -t freebsd-zfs -l disk2 ada2
# gpart add -t freebsd-zfs -l disk3 ada3

次はこれらのディスクをひとまとめにしたzpoolを作ります。zdataというのはzpoolの名前です。

zpool create zdata /dev/gpt/disk0 /dev/gpt/disk1 /dev/gpt/disk2 /dev/gpt/disk3

なんかごにょごにょ文句を言ってくる場合は,強制的にcreateさせるために

zpool create -f zdata /dev/gpt/disk0 /dev/gpt/disk1 /dev/gpt/disk2 /dev/gpt/disk3

とします。zpool listでzpoolのリストが,
NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
zdata 5.89T 316K 5.89T - - 0% 0% 1.00x ONLINE -
zroot 58.5G 1.85G 56.6G - - 0% 3% 1.00x ONLINE -

のように表示されます。zpool statusでステータスが表示されます。

pool: zdata
state: ONLINE
scan: none requested
config:

NAME STATE READ WRITE CKSUM
zdata ONLINE 0 0 0
gpt/disk0 ONLINE 0 0 0
gpt/disk1 ONLINE 0 0 0
gpt/disk2 ONLINE 0 0 0
gpt/disk3 ONLINE 0 0 0

errors: No known data errors

pool: zroot
state: ONLINE
scan: none requested
config:

NAME STATE READ WRITE CKSUM
zroot ONLINE 0 0 0
ada4p3 ONLINE 0 0 0

errors: No known data errors

とりあえずエラーなしです。流石に最初からエラーだと泣いてしまいます。次にzdataをスライスに分割します。このディスクは書き出し用に取っておくだけなので一つのスライスにしてしまいます。

zfs create zdata/backup

これで勝手に/zdataと/zdata/backupにマウントされてしまうので,

umount /zdata/backup
umount /zdata

としてアンマウントします。そのうえで,マウント方法をlegacyに設定します。個人的には/etc/fstabでマウントポイントを指定したいのでこのようにしています。

zfs set mountpoint=legacy zdata
zfs set mountpoint=legacy zdata/backup

圧縮ファイルシステムにするために,
zfs set compress=lz4 zdata
としておきます。

mkdir /backup
としてマウントポイントを作っておいて,/etc/fstabに
zdata/backup /backup zfs rw 0 0
を追加します。これで,

mount /data

でマウントできればOKです。zfs listでスライスのリストが表示されます。また,zfs get compressratioで圧縮率が表示されます。

次にnfsでのexportの設定をします。これは,/etc/exportsを作って,
/backup -maproot=root -alldirs 192.168.XXX.AAA 192.168.XXX.BBB 192.168.XXX.CCC
という具合に書いておけばOKです。普通はrootにマップするのは反則ですが,バックアップのとり方の都合でこのようにしています。良い子は真似をしてはいけません。

posted by MOR at 04:00Comment(0)Computer

dailyバックアップサーバー(設定編)

というわけで,設定をはじめます。

/etc/rc.confに以下の設定を書き込みます。

#
zfs_enable="YES"
# Set dumpdev to "AUTO" to enable crash dumps, "NO" to disable
dumpdev="NO"
#
# Daemons
saver="star"
sshd_enable="YES"
powerd_enable="YES"
#
# Network
#
hostname="hoge.example.com"
ifconfig_em0="inet 192.168.XXX.YYY netmask 255.255.255.0"
defaultrouter="192.168.XXX.1"
#
# Strage Services
#
rpcbind_enable="YES"
mountd_enable="YES"
nfs_server_enable="YES"
nfs_client_enable="YES"
#
# NTP
#
ntpd_enableble="YES"
ntpdate_flags="-b ntp.example.com"
ntpd_enable="YES"
#

また,ntpdの設定を/etc/ntp.confに書きます。もともと置いてあるファイルはバックアップしておきます。
cd /etc/
mv ntp.conf ntp.conf.org
vi ntp.conf
として,以下を書き込みます。

#
server ntp.example.com
#
restrict default notrust nomodify noquery ignore
restrict 127.0.0.1 mask 255.255.255.255
restrict 192.168.XXX.0 mask 255.255.255.0

LAN内で使っているのでrestrictは不要ですが,一応,書いておきます。

次にpostfixをインストールします。

pkg install postfix

とすれば勝手にインストールしてくれます。昔はインストーラがpostfixを有効化するか,と聞いてきてyesと答えればmailer.confのインストールもやってくれたのですが,どうも今のバージョンはそういうお節介なことはやらなくなったようです。インストーラが最後に書き出すメッセージに従って作業が必要になったようです。

mkdir -p /usr/local/etc/mail
install -m 0644 /usr/local/share/postfix/mailer.conf.postfix /usr/local/etc/mail/mailer.conf

とやれ,と書いてあるのでそのとおりにやります。

とりあえず今動いているsendmailを止めます。

sysctl sendmail stop

続いて,

sysrc postfix_enable="YES"
sysrc sendmail_enable="NONE"

とやって/etc/rc.confに設定を追加します。たんに,/etc/rc.confをviで開いて
postfix_enable="YES"
sendmail_enable="NONE"
を書き加えることと同じなのですが,なんでこういうコマンドが必要なのかよぉわかりません。

さらに/etc/periodic.confがなければこのファイルを作って,以下を書き込みます。
daily_clean_hoststat_enable="NO"
daily_status_mail_rejects_enable="NO"
daily_status_include_submit_mailq="NO"
daily_submit_queuerun="NO"

service postfix start

でpostfixが起動します。

/etc/aliasesの最後にroot宛のメールが自分に届くようにaliasを設定しておいて,/usr/local/bin/newaliasesを走らせて設定を反映させます。

バックアップサーバー上でmail rootとしてroot宛のメールを送って自分宛に転送されていればOKです。

FreeBSDのバイナリをアップデートします。
# freebsd-update fetch
# freebsd-update install
とすればOKです。リリースされたばかりのわりにはp3がでていました。再起動してから新しいカーネルが有効になります。

pkg audit -Fとやって問題のあるパッケージがないか確認します。インストール直後では普通はないはずです。問題があれば,pkg upgradeでアップデートします。

あとは,いくつか必要または普通に使いそうなツールをインストールしておきます。全部pkg install XXXXでOKです。インストールしたのは以下のとおりです。
1. dns
bind-tools
BINDがデフォルトでインストールされなくなってから久しいですが,nslookupは使いたいのでこれをインストールします。パッケージの名前を忘れていつもオタオタしてしまいます。

2 archivers
gtar, gzip, untar, unzip, zip, sharutils
lhaはなぜかlhasaという名前のようなので、pkg install lhasaとしなくてはなりません。コマンド名もlhaではなくlhasaです。なんかすぐに忘れてしまいそうです。

3 converters
base64, dosunix, iconv, mpack, unix2dos

4 ftp
wget, wput

5 japanese
ja-a2ps, ja-less, mtools, ja-nkf, ja-kon2-14dot, ja-w3m
jvim3はcannaとFreeWnnがついてくるようなので余計なデーモンを走らさない、ということを考えてインストールしませんでした。

6. net
rsync

次はデイスクまわりの設定です。
posted by MOR at 16:00Comment(0)Computer

dailyバックアップサーバー(能書き編)

日々のバックアップをとっているサーバーのHDDがクラッシュして死んでました。2週間気がついていませんでした。ひどい話です。

ディスクの容量を稼ぐためにPATA 250GB x 2とSATA 4TB, SATA 750GBのここに書いたシステムで日々のバックアップを取っていました。ここではweeklyのバアクアップサーバーとして使う前提で書いてありますが,途中で日々のバックアップに昇格(?)してweeklyのバックアップは別の機械に代わっています。

だいたい,PATAを使う時点でなんなんだ,って話もありますが,どうせstripeで容量を稼ぐだけなのでたくさんディスクを繋ぎたい,というそれだけです。マザーボードにはSATAが4個しかないので,PATAも動員した,というだけです。

ログインもできない状態で死んでましたが,強制的に落として起動すると何事もなかったように起動したのでログを見てみました。最初,8/31にSATA 750GBのディスク(ada3)がアクセスエラーを吐いていてい,それはすぐにおさまったようなのですが,9/3にPATAの250GBのディスク(ada0)が突然死したらしくエラーを吐き続けていました。再起動で何事もなく動くってのもどうかと思いますが,いったん落として,再度起動するとふたたびSATA 750GBのディスクがエラーを吐いてカーネルパニックで起動できませんでした。何回か再起動を繰り返しているうちに偶然のように起動に成功したので,/etcと/usr/local/etcだけバックアップして電源を落として,バラしてHDDを抜き出しました。

HDDには自分のメモがあって,SATA 750GBのディスクには2010年と書いていましたのでよく今まで動いていたものだと思います。もちろん,PATAのHDDなんてもっと古いので毎日休みなく動き続けていたことが驚きです。OSがFreeBSD 10.0Rですから10.0Rがリリースされた2014年1月以降,次の10.1Rがリリースされた2014年8月までの間から使っていてこれまで5年以上連続運転していたことになります。壊れて当然です。

とりあえずPATA 250GBの2個のHDDとSATA 750GBのディスクはさっさと捨てることにして,手持ちのストックのなかからPATA 500GBを2個,SATA 1.5TBを持ってきて交換します。1 TBほどですが容量が増えます。

FreeBSD 11.3Rが2019年7月にリリースされたばかりなので,これをインストールすることにします。昔と違って,zfsのルートをオートで作成してOSをインストールすることができてしまうので,インストーラから4つのディスク(PATA 500GB x 2, SATA 4TB, SATA 1.5TB)でstripeを構成してインストールしようとしたのですが,ファイルシステムを作成するところで応答がなくなっていつまでたっても返ってきません。よくわからんので,すっぱり諦めて手持ちのSATA 80GBのHDDをさらに追加してOSはこのディスクにインストールして,他の4個のHDDはあとからzfsを構成してマウントしてしまおう,と考えました。マザーボードにはSATAが4個しかないのでSATA 80GBのHDDはada4に接続してada3はインストール用のDVD-ROMドライブを接続します。

SATA 80GBにOSをインストールするのはオートで簡単にできました。

OSをインストールしたらさっさと設定をしてしまいます。これといって設定すべきものもありませんが,NFSのサーバーとクライアントにはならないといけないのでそれに必要な設定をします。また,時計の同期とメールの設定もしておきます。そうしないとエラーに気がつかない,という罠にはまってしまいます(結局,気がつかなかったんだけど)。

続きは設定編へ。
posted by MOR at 10:23Comment(0)Computer