zfs/raidz1のディスクを交換する(2ヶ月でorz…)

購入したHDDが2ヶ月ほどでお亡くなりに。ディスク自体は保証期間内なので何とかするとして、せっかく組んだzfsで早くもディスク交換を実行することに。手順は次の通り。

  1. ディスクをofflineに変更
  2. シャットダウン後にディスクを取り替える
  3. ディスクをonlineに変更
  4. 同期

状況確認。ada0がREMOVE状態になっている。ソフトウェア上はオンラインだがハードウェア上では「ディスクが外された」状態ということか。

# zpool status
  pool: zpool0
 state: DEGRADED
 scrub: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        zpool0      DEGRADED     0     0     0
          raidz1    DEGRADED     0     0     0
            ada0    REMOVED      0     0     0
            ada1    ONLINE       0     0     0
            ada2    ONLINE       0     0     0
            ada3    ONLINE       0     0     0

errors: No known data errors

ディスクをofflineに変更。ソフトウェアにも「外したよ」と伝える。

# zpool offline zpool0 ada0
# zpool status
  pool: zpool0
 state: DEGRADED
status: One or more devices has been taken offline by the administrator.
        Sufficient replicas exist for the pool to continue functioning in a
        degraded state.
action: Online the device using 'zpool online' or replace the device with
        'zpool replace'.
 scrub: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        zpool0      DEGRADED     0     0     0
          raidz1    DEGRADED     0     0     0
            ada0    OFFLINE      0     0     0
            ada1    ONLINE       0     0     0
            ada2    ONLINE       0     0     0
            ada3    ONLINE       0     0     0

errors: No known data errors

シャットダウン後にディスクを取り替えて状況確認。

# zpool status
  pool: zpool0
 state: DEGRADED
status: One or more devices has been taken offline by the administrator.
        Sufficient replicas exist for the pool to continue functioning in a
        degraded state.
action: Online the device using 'zpool online' or replace the device with
        'zpool replace'.
 scrub: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        zpool0      DEGRADED     0     0     0
          raidz1    DEGRADED     0     0     0
            ada0    OFFLINE      0     0     0
            ada1    ONLINE       0     0     0
            ada2    ONLINE       0     0     0
            ada3    ONLINE       0     0     0

errors: No known data errors

ディスクをonlineに変更。onlineにすること自体は成功するが状況がUNAVAILとなる(これは正常)。

# zpool online zpool0 ada0
warning: device 'ada0' onlined, but remains in faulted state
use 'zpool replace' to replace devices that are no longer present

# zpool status
  pool: zpool0
 state: DEGRADED
status: One or more devices could not be used because the label is missing or
        invalid.  Sufficient replicas exist for the pool to continue
        functioning in a degraded state.
action: Replace the device using 'zpool replace'.
   see: http://www.sun.com/msg/ZFS-8000-4J
 scrub: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        zpool0      DEGRADED     0     0     0
          raidz1    DEGRADED     0     0     0
            ada0    UNAVAIL      0     0     0  corrupted data
            ada1    ONLINE       0     0     0
            ada2    ONLINE       0     0     0
            ada3    ONLINE       0     0     0

errors: No known data errors

データのリプレイス。

#zpool replace zpool0 ada0

リプレイスの途中経過。

# zpool status
  pool: zpool0
 state: DEGRADED
status: One or more devices is currently being resilvered.  The pool will
        continue to function, possibly in a degraded state.
action: Wait for the resilver to complete.
 scrub: resilver in progress for 0h0m, 1.04% done, 1h25m to go
config:

        NAME            STATE     READ WRITE CKSUM
        zpool0          DEGRADED     0     0     0
          raidz1        DEGRADED     0     0     0
            replacing   DEGRADED     0     0     0
              ada0/old  UNAVAIL      0     0     0  cannot open
              ada0      ONLINE       0     0     0  1.28G resilvered
            ada1        ONLINE       0     0     0
            ada2        ONLINE       0     0     0
            ada3        ONLINE       0     0     0

errors: No known data errors

1時間21分でで完了です。

# zpool status
  pool: zpool0
 state: ONLINE
 scrub: resilver completed after 1h21m with 0 errors on Tue Nov  1 00:27:20 2011
config:

        NAME        STATE     READ WRITE CKSUM
        zpool0      ONLINE       0     0     0
          raidz1    ONLINE       0     0     0
            ada0    ONLINE       0     0     0  123G resilvered
            ada1    ONLINE       0     0     0
            ada2    ONLINE       0     0     0
            ada3    ONLINE       0     0     0

errors: No known data errors

rsyncとsshを利用してファイルのバックアップ(同期)を行う

rsyncを利用してファイルのバックアップを行う。sshdおよびrsyncはインストール済みとする。

サーバー側のsshdの設定を行う。下記2行の#を外して再起動する。

#PubkeyAuthentication yes
#AuthorizedKeysFile      .ssh/authorized_keys
userTo:~$ /etc/init.d/sshd restart

キーペアをクライアント側で作成する。このときにpassphraseは空白のままにしておく。もし入力をするとsshの実行時にパスワードを聞かれるため、自動実行が不可能になる。

userFrom:~$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/user_from/.ssh/id_rsa):
/home/userFrom/.ssh/id_rsa already exists.
Overwrite (y/n)? y
Enter passphrase (empty for no passphrase):(空白にする)
Enter same passphrase again:(空白にする)
Your identification has been saved in /home/userFrom/.ssh/id_rsa.
Your public key has been saved in /home/userFrom/.ssh/id_rsa.pub.
The key fingerprint is:
05:41:78:63:93:3c:65:e1:66:85:b3:dd:28:3a:57:9f userFrom@server

公開鍵をサーバー側のauthorized_keysへ追加する。

userTo:~$ cat id_rsa.pub >> /home/userFrom/.ssh/authorized_keys

sshのテストを行う。下記のコマンドを実行した際にパスワードは聞かれずにログインできれば問題ない。

userFrom:~$ ssh 192.168.1.***

rsyncを開始する。nohupを付けることにより、処理をユーザーがログアウト後も実行し続ける。

userFrom:~$ nohup rsync -avz -e ssh /path/to/files 192.168.1.***:/home/userTo/backup&
nohup: appending output to `nohup.out'
[1] 1333

場合により –delete を付けてバックアップを行う。バックアップ先に存在しないファイルはバックアップ元でも削除される。上記のように付けない場合には単純にコピーを行う。

userFrom:~$ nohup rsync -avz -delete -e ssh /path/to/files 192.168.1.***:/home/userTo/backup&

参考:rsyncとsshで別のマシンにバックアップ

zfs/raidz on FreeBSD

zpoolの作成からファイルシステムの作成とマウント、それぞれの削除、アンマウントまでのコマンド備忘録。

ada0からada3までを使ってraidzのzpoolを作成する。

#zpool create zpool0 raidz ada0 ada1 ada2 ada3

作成したzpoolの状態はzpool statusコマンドで表示する。

#zpool status
	NAME	STATE	READ	WRITE	CKSUM
	zpool0	ONLINE	 0	0	0
	 raidz1	ONLINE	 0	0	0
	  ada0	ONLINE	 0	0	0
	  ada1	ONLINE	 0	0	0
	  ada2	ONLINE	 0	0	0
	  ada3	ONLINE	 0	0	0

zfsのファイルシステムの状態はzfs listコマンドで表示する。

#zfs list
        USED	AVAIL	REFER	MOUNTPOINT
zpool0	155K	5.34T	31.4K	/zpool0
zpool0/storage	31.4K	5.34T	31.4K	/zpool0/storage

zpool0以下にstorageという名前のファイルシステムを作成する。

#zfs create zpool0/storage
#zfs list
        USED	AVAIL	REFER	MOUNTPOINT
zpool0	155K	5.34T	31.4K	/zpool0
zpool0/storage	31.4K	5.34T	31.4K	/zpool0/storage

作成したzpool0/storageを/mnt/storageにマウントする。

#mkdir /mnt/storage
#zfs set mountpoint=/mnt/storage zpool0/storage
#zfs list
        USED	AVAIL	REFER	MOUNTPOINT
zpool0	155K	5.34T	31.4K	/zpool0
zpool0/storage	31.4K	5.34T	31.4K	/mnt/storage

マウントポイントを消去する。

#zfs set mountpoint=none zpool0/storage
#zfs list
        USED	AVAIL	REFER	MOUNTPOINT
zpool0	155K	5.34T	31.4K	/zpool0
zpool0/storage	31.4K	5.34T	31.4K	none

ファイルシステムを消去する。

#zfs destroy zpool0/storage
#zfs list
        USED	AVAIL	REFER	MOUNTPOINT
zpool0	155K	5.34T	31.4K	/zpool0

その他1:zpool0を消去する。

#zpool destroy zpool0

その他2:ada0とada1を使ってmirrorのzpoolを作成する。

#zpool create zpool0 mirror ada0 ada1