ラベル ZoL の投稿を表示しています。 すべての投稿を表示
ラベル ZoL の投稿を表示しています。 すべての投稿を表示

2018年6月12日火曜日

ZoLのsplがzfsのrepositoryにmergeされた

ZFSはlicenseの問題でmainline kernelに含まれずout-of-treeなので、Linuxで使いたい場合は大きく2つの選択肢がある:

* ZFS on Linux (ZoL)
* ZFS-FUSE

ZoLがkernel moduleとしてのimplementationで、ZFS-FUSEはuserland (FUSE)でのimplementation。

OSがLinuxでなくて良いならillumos (OpenSolaris)やFreeBSD (TrueOS)などを使う手もある (出所的あるいはlicense的にはこっちの方が素直か?)。

さて、この度、ZoLをsource (git)からbuildする手順が簡単になった。これまではzfsをbuildするにはspl (Solaris porting layer)というSolarisとLinuxの違いを吸収するlayerが必要で、それを別途build & installしなければならかった。

それが先日、splのgit repositoryからautogen.shが削除されていたのでどうしたのかと思いgit logを見てみたら、zfsのrepositoryにmergeされたとあった。今後はsplをgit cloneしてautogen.sh→configure→make→make installという手順が不要になった。

2016年10月23日日曜日

Debian unstableのgcc-6 6.2.0-7以降でLinux kernelなどのbuildができない件への対処 (2016-12-03更新)

Debian unstableのgcc-6は、6.2.0-7から--enable-default-pieというflag付きでbuildされており、これがあちこちで問題を引き起こしている。

cf. https://bugs.debian.org/cgi-bin/pkgreport.cgi?package=gcc-6

影響を受けているのはLinux kernelやSeaBIOSなど。

今の所backoutされる予定はなさそうなので、upstream (kernel側)で対応する迄は以下のworkaroundで我慢するか、自前でgcc-6 (6.2.0-6)をbuildするしかない。

Linux kernelのbuild

(2016-12-03追記)

Linux kernel 4.8.11でDebianのGCCで行われた変更に対応した。よって、それ以降のversionを利用する場合以下のworkaroundは不要。

stack protectorをenableにしていると:

> -fstack-protector not supported by compiler

と出てbuildが止まったり、そうでなくても:

> error: code model kernel does not support PIC mode

と出てbuildが止まったりする。

何れも、KCPPFLAGS=-fno-picをmake-kpkgあたりに渡してbuildするというworkaroundが紹介されている (cf. https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=841533)。

著者の環境ではworkaroundによりmake-kpkgでkernelがbuildできた。

ccache userへ


FirefoxやEmacsのbuildにも影響が出た。

一旦、ccache -C -zでcacheを破棄してrebuildすると良い。


ZoL (ZFS on Linux)

(2016-10-28追記)

ZoLはkernel modulesとしてbuildする関係から、もろにこの変更の影響を受ける。しかも、KCPPFLAGS=-fno-picを渡しても./configure scriptが途中でコケる。

(2016-12-03追記)

SPLもZFSも正常にbuildできるようになった。

それがGCC側の変更なのか、kernel sourceのupgradeの結果なのかは切り分けられなかった。

2016年9月8日木曜日

Linux kernel 4.8-rc4でZoL (2016-12-26更新)

ZFS on Linux (ZoL)を試してみたいと思い、Linux kernel 4.8-rc4 (注: 9/8現在の最新版は4.8-rc5)で実験してみた。

(2016-12-26追記)

Linux kernel 4.9.0でも利用可能。

(2016-12-03追記)

Linux kernel 4.8.12でも以下の手順でZoLを利用可能。

Installation

Debian package版ではbuildに失敗した (確か9/8現在で対応しているkernel versionは4.6が最新)ので、gitから直接build & installする。

まずはSPL (Solaris Porting Layer)から:

% git clone https://github.com/zfsonlinux/spl.git
% cd spl
% ./autogen.sh
% make
% sudo make install

ZFSも手順は同じ:

% git clone https://github.com/zfsonlinux/zfs.git
% cd zfs
% ./autogen.sh
% make
% sudo make install

これで、spl.koやzfs.koなどのkernel modulesや、zfs、zpool、zdb commandsなどがinstallされるはず。

もしかしたら、buildの際にlibzfsとかのdevelopment package (header file)が必要かも知れない。

Pool作り

まず、zfs関連のkernel moduleをmodprobeして突っ込む。

% sudo modprobe zfs

多分、自動的にdependencyが解決されてsplとかも突っ込まれるはず。

% lsmod | grep zfs

あたりでcheckする。

% sudo zpool create -o ashift=12 -f -m <mount_point> <pool> <disks>

Poolが作られると自動的にmountされる。

ちなみに、最近のHDDはAFTを使っていると思うのでその場合はashift=12を指定すると速くなるとのこと。

zdbが"no such file or directory"を吐く問題

必要な(?) cache fileがgenerateされていないのが原因っぽい。Package systemとかDKMSとかで入れれば何かしらのscriptで自動生成されたりするんだろうか?

% sudo mkdir /etc/zfs/
% sudo zpool set cachefile=/etc/zfs/zpool.cache <pool>

これでgenerateされたので、後は好き放題zdbを使えるはず。

% sudo zdb -C -U /etc/zfs/zpool.cache <pool>

でも、

% sudo zdb -S -U /etc/zfs/zpool.cache <pool>

でもissueし放題。

cf. [FAQ · zfsonlinux/zfs Wiki · GitHub](https://github.com/zfsonlinux/zfs/wiki/faq)

In-band deduplication

ZFSを使う利点 (というか動機)にもなるであろうdeduplication (重複排除)だが、

どんなdataを抱えているかにもよるが、一度zdb -Sでどのくらい節約できるかを見てみると良い。ratioが2を割るようであれば無駄かなと。何しろ仕組み上ものすごく時間が掛かるし、diskに負荷も掛かるので。

cf. [How To Size Main Memory for ZFS Deduplication](http://www.oracle.com/technetwork/articles/servers-storage-admin/o11-113-size-zfs-dedup-1354231.html)