[linux/Debian] Debian/kFreeBSDでZFS メモリパラメータの設定

今まででZFSを使う準備はできているのですが、快適にというか、安全に使おうと思ったらもうちょっと設定が必要。

404 Blog Not Found 備忘録 – HP ProLiant MicroServer + FreeBSD + ZFS
にもあるように、ZFSが使うメモリサイズを指定しておきたい。
デフォルトの設定のままだと、メモリを使いすぎてカーネルごと落ちてしまうことがあるらしい。
メモリが溢れるまでの状態になるのは、ZFSの重複排除(dedup)を有効にした場合のようなので、普通に使っていると問題無さそうですが。

で、FreeBSDだと、/boot/loader.confを編集したら良いみたいですが、Debian/kFreeBSDだとそんなファイルはありません。

色々調べてみても全く情報が無い。
でも、全く情報が無いわけでは無く、探してみたら見つかりました。

/etc/grub.d/10_kfreebsdファイルで設定します。

設定前

# sysctl -a | grep arc_max
vfs.zfs.arc_max: 7229382656

/etc/grub.d/10_kfreebsdファイルの最後に
set kFreeBSD.vfs.zfs.arc_max=”4G”
を追加してやります。

# vim /etc/grub.d/10_kfreebsd
set kFreeBSD.vfs.zfs.arc_max=”4G”

必要なら他のパラメータも設定してやりましょう。

ファイル修正後、

# update-grub
# reboot

再起動した後に確認すると、

# sysctl -a | grep arc_max
vfs.zfs.arc_max: 4294967296

設定が変更されていることが解ります。

サンワサプライ 下L型シリアルATA3ケーブル 0.5m TK-SATA3-05SL
サンワサプライ
売り上げランキング: 95

[linux/Debian] 接続されているHDDの一覧と、シリアル番号を確認する方法

NASで沢山HDDを接続していると、いざDiskを交換するときにどれを交換したら良いのやらって事になります。
そこで、あらかじめそれぞれのHDDのシリアル番号と、HDDが接続されているポートをメモしておけば、交換するときに役に立ちます。

HDDのシリアル番号の確認方法は、HDDのラベルを直接見る方法が確実ですが、既に装着済みだったらどうするかって事になります。
その時は、smartctlを使いましょう。

# smartctl -a /dev/sda
smartctl 5.41 2011-06-09 r3365 [i686-linux-3.6.11] (local build)
Copyright (C) 2002-11 by Bruce Allen, http://smartmontools.sourceforge.net

=== START OF INFORMATION SECTION ===
Model Family: Kingston branded X25-V SSDs
Device Model: KINGSTON SSDNow 40GB
Serial Number: XXXXXXXXXXXXXX
LU WWN Device Id: 5 001517 9590d8db8
Firmware Version: 2CV102HA

といった感じで表示されます。FreeBSDなら、/dev/ada0とか指定してやります。
他に簡単に確認出来る方法はあるのかな?

次に、各HDDがどのデバイスに割り当たってるかの確認ですが、
Linuxの場合は、

cat /proc/scsi/scsi
Attached devices:
Host: scsi2 Channel: 00 Id: 00 Lun: 00
Vendor: ATA Model: KINGSTON SSDNow Rev: 2CV1
Type: Direct-Access ANSI SCSI revision: 05
Host: scsi3 Channel: 00 Id: 00 Lun: 00
Vendor: ATA Model: ST2000DM001-1ER1 Rev: CC43
Type: Direct-Access ANSI SCSI revision: 05
・・・・

と表示される前から順番に、sda、sdb・・・と割当たっているようです。
もっと、直接的に解る方法はないのかな。

FreeBSDだと、

# camcontrol devlist
<INTEL SSDSA2M080G2GC 2CV102HD> at scbus0 target 0 lun 0 (ada0,pass0)
<ST3320620AS 3.AAK> at scbus3 target 0 lun 0 (ada1,pass1)

camcontrolコマンドで直ぐ解るようになっています。

/dev/sdaがどのハードデスクで、シリアル番号まで解っていたら、いざ/dev/sdaが壊れた時に、どのHDDが壊れたかシリアル番号で確認出来て、それを基にHDD交換ができるので、確実になります。

サンワサプライ 下L型シリアルATA3ケーブル 0.5m TK-SATA3-05SL
サンワサプライ
売り上げランキング: 72

[linux/Debian] Debian/kFreeBSDでZFS お試し編 その2

ZFSをVirtualBoxに入れたDEbian/kFreeBSDで試してみるのその2です。
Diskが壊れた時の交換方法と、大きいDiskに交換していって、領域を確認する方法を確認します。

1GBのアレイが順番に壊れたり、交換していく想定で、交換するのは3GBのDiskです。

まずは1台交換してみる

いきなり抜くのでは無く、offlineにしてDiskを交換してみます。
これは、大きいHDDに交換するときの手順を想定しています。

# zpool offline vol1 ada1

# zpool status
pool: vol1
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’.
scan: none requested
config:

NAME STATE READ WRITE CKSUM
vol1 DEGRADED 0 0 0
-0 DEGRADED 0 0 0
13334899667277329527 OFFLINE 0 0 0 was /dev/ada1
ada2 ONLINE 0 0 0
ada3 ONLINE 0 0 0
-1 ONLINE 0 0 0
ada4 ONLINE 0 0 0
ada5 ONLINE 0 0 0
ada6 ONLINE 0 0 0

errors: No known data errors

ada1がofflineになって、プールがDegradedになっているのが確認出来ます。

HDD付け替え

電源を落としてDiskを同じ所に付け替えます。
Diskのサイズは3GBです。

電源ONにしたあと、

# zpool online vol1 ada1
warning: device ‘ada1’ onlined, but remains in faulted state
use ‘zpool replace’ to replace devices that are no longer present
# zpool status
pool: vol1
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
scan: scrub repaired 0 in 0h0m with 0 errors on Sun Aug 3 01:36:22 2014
config:

NAME STATE READ WRITE CKSUM
vol1 DEGRADED 0 0 0
-0 DEGRADED 0 0 0
13334899667277329527 UNAVAIL 0 0 0 was /dev/ada1
ada2 ONLINE 0 0 0
ada3 ONLINE 0 0 0
-1 ONLINE 0 0 0
ada4 ONLINE 0 0 0
ada5 ONLINE 0 0 0
ada6 ONLINE 0 0 0

errors: No known data errors

onleineにしただけでは、まだDegradedのままです。

# zpool replace vol1 ada1
# zpool status
pool: vol1
state: ONLINE
scan: resilvered 64.5K in 0h0m with 0 errors on Sun Aug 3 01:37:33 2014
config:

NAME STATE READ WRITE CKSUM
vol1 ONLINE 0 0 0
-0 ONLINE 0 0 0
ada1 ONLINE 0 0 0
ada2 ONLINE 0 0 0
ada3 ONLINE 0 0 0
-1 ONLINE 0 0 0
ada4 ONLINE 0 0 0
ada5 ONLINE 0 0 0
ada6 ONLINE 0 0 0

errors: No known data errors

# zpool list
NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT
vol1 8.95G 290K 8.95G 0% 1.00x ONLINE –

zpool replaceをしてはじめてプールが回復します。
1GBのRAID-Zアレイのうち、1台を3GBにしたままでは、まだサイズは増えていません。

2台目はいきなりHDDを交換してみる

今度は、Diskが壊れたことを想定して、いきなりHDDを交換します。
これも3GBのDiskに交換しました。

# zpool status
pool: vol1
state: DEGRADED
status: One or more devices could not be opened. Sufficient replicas exist for
the pool to continue functioning in a degraded state.
action: Attach the missing device and online it using ‘zpool online’.
see: http://www.sun.com/msg/ZFS-8000-2Q
scan: resilvered 64.5K in 0h0m with 0 errors on Sun Aug 3 01:37:33 2014
config:

NAME STATE READ WRITE CKSUM
vol1 DEGRADED 0 0 0
-0 DEGRADED 0 0 0
ada1 ONLINE 0 0 0
18306556529790232082 UNAVAIL 0 0 0 was /dev/ada2
ada3 ONLINE 0 0 0
-1 ONLINE 0 0 0
ada4 ONLINE 0 0 0
ada5 ONLINE 0 0 0
ada6 ONLINE 0 0 0

errors: No known data errors

# zpool replace vol1 ada2
root@debian:/home/bayashi# zpool status
pool: vol1
state: ONLINE
scan: resilvered 59.5K in 0h0m with 0 errors on Sun Aug 3 01:42:43 2014
config:

NAME STATE READ WRITE CKSUM
vol1 ONLINE 0 0 0
-0 ONLINE 0 0 0
ada1 ONLINE 0 0 0
ada2 ONLINE 0 0 0
ada3 ONLINE 0 0 0
-1 ONLINE 0 0 0
ada4 ONLINE 0 0 0
ada5 ONLINE 0 0 0
ada6 ONLINE 0 0 0

errors: No known data errors

特に問題は無いですね。

ファイルが無い状態でDisk交換していても実感が無いので、ファイルを作っておきます。

# dd if=/dev/zero of=/vol1/work.img bs=1M count=800
# zpool list
NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT
vol1 8.95G 1.17G 7.78G 13% 1.00x ONLINE –

800MBのファイルを作ったけれども、実際に使われているのは1.17GB。パリティ分もあわせたサイズになっています。

3台目も交換して、プールサイズを拡張する

3台目も交換します。

# zpool replace vol1 ada3
root@debian:/home/bayashi# zpool status
pool: vol1
state: ONLINE
scan: resilvered 182M in 0h0m with 0 errors on Sun Aug 3 01:50:23 2014
config:

NAME STATE READ WRITE CKSUM
vol1 ONLINE 0 0 0
-0 ONLINE 0 0 0
ada1 ONLINE 0 0 0
ada2 ONLINE 0 0 0
ada3 ONLINE 0 0 0
-1 ONLINE 0 0 0
ada4 ONLINE 0 0 0
ada5 ONLINE 0 0 0
ada6 ONLINE 0 0 0

errors: No known data errors

# zpool list
NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT
vol1 8.95G 1.17G 7.78G 13% 1.00x ONLINE –

1GBのDiskがすべて3GBになったのに、プールのサイズが増えていません。

# zpool online -e vol1 ada1
# zpool list
NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT
vol1 15.0G 1.17G 13.8G 7% 1.00x ONLINE –
# zpool status
pool: vol1
state: ONLINE
scan: resilvered 182M in 0h0m with 0 errors on Sun Aug 3 01:50:23 2014
config:

NAME STATE READ WRITE CKSUM
vol1 ONLINE 0 0 0
-0 ONLINE 0 0 0
ada1 ONLINE 0 0 0
ada2 ONLINE 0 0 0
ada3 ONLINE 0 0 0
-1 ONLINE 0 0 0
ada4 ONLINE 0 0 0
ada5 ONLINE 0 0 0
ada6 ONLINE 0 0 0

errors: No known data errors

zpool online -eを実行してはじめてサイズが拡張されます。
指定するDiskは、拡張するアレイに属しているならどれでも良いみたいです。

あらかじめ、autoexpandを有効にしておくと、3台目が置き換わった時点で自動的にサイズ拡張されるようです(未確認)。

# zpool set autoexpand=on vol1

あるいは、プール作成時に

zpool create -o autoexpand=on vol1 raidz ada1 ada2 ada3

としておけば良いみたいです(未確認)。

この状態でdfコマンドを打ってみると、

# df -h
ファイルシス サイズ 使用 残り 使用% マウント位置
/dev/ada0s1 7.4G 853M 6.0G 13% /
devfs 1.0K 1.0K 0 100% /dev
linprocfs 4.0K 4.0K 0 100% /proc
/sys 4.0K 4.0K 0 100% /sys
fdescfs 1.0K 1.0K 0 100% /dev/fd
tmpfs 8.0G 212K 8.0G 1% /run
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs 1.6M 4.0K 1.6M 1% /run/shm
vol1 9.9G 800M 9.1G 8% /vol1
vol1/visual 9.1G 40K 9.1G 1% /vol1/visual

このような感じに。
vol1とvol1/visualのサイズと残りサイズをみると、ちょっと混乱しますな。

まとめ

これで、NAS運用に必要最低限な事は一通り確認出来ました。
しっかり運用するためには、snapshotの設定と、必要最低限なファイルのバックアップ戦略を立てることですね
ほかに、ZFSが利用するメモリ容量を制限したいのですが、Debian/kFreeBSDだとどこで設定するのかが解らない。

[linux/Debian] Debian/kFreeBSDでZFS お試し編 その1

ZFSをVirtualBoxに入れたDEbian/kFreeBSDで試してみるのその1です。

必要なツールのインストール

apt-get install zfsutils

Diskの確認

dmes | grep ada

とやると、

ada0 at ata0 bus 0 scbus0 target 0 lun 0
ada0: ATA-6 device
ada0: 100.000MB/s transfers (UDMA5, PIO 65536bytes)
ada0: 8192MB (16777216 512 byte sectors: 16H 63S/T 16383C)
ada0: Previously was known as ad0

とか出てくるので、確認。

パーティションがあるHDDは

gpart destroy -F ada2

とする必要があるらしい(未確認)

RAID-Zでプールの作成

1GBの仮想ハードディスクを3台つないでやる。
それぞれのドライブが、ada1、ada2、ada3と認識されているので、フォーマットをすることも無く

zpool create vol1 raidz ada1 ada2 ada3

でプールを作成。この時点で2GBの領域を確保。

このプールは/vol1に自動的にマウントされているので、後はそこに好き勝手にファイルを置いたり、ディレクトリを作成したりすれば良いのですが、バックアップ戦略とかで更にプールを分けることもできる。

zfs create vol1/visual

Diskを追加してプールを拡張する

ZFSでは、一旦構築したRAIDアレイにHDDを追加することはできない仕組みになっている。
なので、追加のHDDはストライプ構成で追加される。
なので、RAID-Zでプールを作ったのなら、HDDを追加するときもRAID-Zで追加していかないと、冗長性を確保出来ないことに。

それを踏まえてvol1にHDDを追加してみます。
2GBのHDDを追加で3台つないだとして、

zpool add vol1 raidz ada4 ada5 ada6

ステータスを確認すると、

# zpool list
NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT
vol1 8.95G 380K 8.95G 0% 1.00x ONLINE –

# zpool status
pool: vol1
state: ONLINE
scan: none requested
config:

NAME STATE READ WRITE CKSUM
vol1 ONLINE 0 0 0
-0 ONLINE 0 0 0
ada1 ONLINE 0 0 0
ada2 ONLINE 0 0 0
ada3 ONLINE 0 0 0
-1 ONLINE 0 0 0
ada4 ONLINE 0 0 0
ada5 ONLINE 0 0 0
ada6 ONLINE 0 0 0

vol1がストライプ構成になってると確認できる。

zpool listで表示されるのは、HDDの総量みたい。
1GB×3+2GB×3=9GB
実際に使えるサイズはdf -hかzfs listで確認できる(ログを残していないのです)。

これで、NASを構築する手順は確認出来ました。あとは、samba設定するくらいですね。

WD Red 3.5inch IntelliPower 3.0TB 64MBキャッシュ SATA3.0 WD30EFRX
Western Digital
売り上げランキング: 322

[linux/Debian] Debian/kfreebsdでZFS 準備編

はじめに

そのうちに、自宅ファイルサーバーをZFSを使った構成にしたいなと思っています。
主に耐故障性を向上させるためにです。

ZFSを使うには、
1.Solarisを使う
2.FreeBSDを使う
上記はZFSがシステムに組み込まれているので、そのまま使うことができます。
他に、
3.LinuxとZFS on LinuxのZFSを組み合わせて使う
と言う手段もあります。

色々考えた結果、FreeBSDで使うのが確実だろうという結論に達しました。

でも、FreeBSDはよく解らないので、Debian/kFreeBSDを使うことにしました。
カーネル部分はFreeBSDだけど、それ以外はDebianなので、Debian/GNU Linuxを使っている人には扱いやすい、らしい。

VirtualBoxにインストールして色々確認するのを目的としています。
ただ、OSインストールだけは空いてるマシンと使っていない80GBのSSDがあったので、それに入れて準備だけしました。

インストール

netinstなイメージを持ってきてインストールするのがいちばんラクでお手軽。
VirtualBoxでお試しインストール。
特に迷うところは無いのですが、日本語インストールにはまだ対応していないのね・・・。

インストール時には最低限必要なものだけ選択。ファイルサーバーだけ選べばOK。

おまけ。
実機ではUSBメモリからインストールする予定が、なんか解らないがUSBメモリからnetistなイメージがブートしない。
Debian GNU/LinuxのnetinstなISOイメージからはUSBブートできるのでUSB-CD ROMからインストール・・・。
が、USB-CD ROMからもインストール出来なかったので、内蔵CDROMドライブをつないでインストールしました。

インストール後の最低限必要な設定

インストール時にDHCPでIPアドレスを取得するようになってしまっているので、固定IPに変更。
設定はDebian GNU/Linuxと同じ。

# vi /etc/network/interface

auto lo0
iface lo0 inet loopback

# The primary network interface
auto re0
iface re0 inet static
address 192.168.xxx.yyy
netmask 255.255.255.0
gateway 192.168.xxx.zzz
dns-nameservers 192.168.xxx.zzz

aptをつかって、sshをインストール。

# apt-get install ssh

日本語ロケールの設定

# dpkg-reconfigure locales

でja_JP.UTF-8にチェック、デフォルトにして

# update-locale LANGUAGE=”ja_JP:ja” LANG=”ja_JP.UTF-8″

これで再起動させたら準備は完了