hack のためのネタ帳, etc,,,

公式ページ等

インストール (2012-11-01, 2012-11-04)

方法としては2通りかな?
  • FreeNAS-8.3.0-RELEASE-x64.iso を CD に焼いて CD boot 後、メニューから適当なストレージにインストール
  • FreeNAS-8.3.0-RELEASE-x64.img.xz を拾ってきて適当なストレージに直接書き込む
CD から起動してインストールする場合も、結局 CD に入ってる FreeNAS-8.3.0-RELEASE-x64.img.xz (ファイル名は FreeNAS_x64.img.xz になっている)が展開されて、ストレージの先頭部分に書き込まれるだけなので、どちらの方法でも同じものが出来る。
ただし、CD から起動してインストールする場合、フラッシュメモリにインストールすると極端に時間がかかる(約10倍程度)。
単純に xz で展開して dd で書いてるだけだと思うのだが、dd で書き込み単位のブロックサイズ調整がきちんとフラッシュメモリのページ・ブロックサイズを考慮して行われていないんじゃないかと思う。ひょっとすると xz の展開をかけながら書いているのが悪いのかもしれない。
ストレージに直接書き込める環境があるなら、ブロックサイズを 4KiB 以上の 2 の累乗に設定して直接書いたほうが断然早い。

BUFFALO RUF2-E2G-K に install してみたところ次のような結果であった。
CD 起動でインストールした場合には、書き込み速度は 850〜880KiB/s 辺りを推移する。02:28 に開始した install が、 20 分後の 02:48 に途中経過で 1006.4MiB まで書き込み済みとなり、その後ちょっと目を離していたので正確な終了時刻は記録し損ねたが 39 分後の 03:07 までにはインストールを完了した。
一方で 32bit 版の Windows XP SP3 上の cygwin から ddrescue を用いてイメージの書き込みを行ったところ以下のように平均 8,848kB/s の書き込み速度でわずか4分弱しかかからなかった。
$ time ddrescue --force -b 1MiB FreeNAS-8.3.0-RELEASE-x64.img /dev/sdd FreeNAS-8.3.0-RELEASE-x6
4.log


Press Ctrl-C to interrupt
rescued:     2000 MB,  errsize:       0 B,  current rate:     365 kB/s
   ipos:     1999 MB,   errors:       0,    average rate:    8849 kB/s
   opos:     1999 MB,     time from last successful read:       0 s
Finished

real    3m44.718s
user    0m0.655s
sys     0m4.327s

インストールに必要な容量は公式には 2GB とされており、FreeNAS-8.3.0-RELEASE-x64.img.xz を展開すると 2,000,000,000 Bytes 丁度になる。
もし手元に余らせてる 2GB の フラッシュメモリがあるなら、無駄にする容量が少ないのでそれを使うのがベストだろう。
インストールイメージは以下のように MBR 形式のパーティションテーブルにパーティションタイプ a5 (= FreeBSD) のプライマリパーティションが4つ切られている。
$ partinfo.rb FreeNAS-8.3.0-RELEASE-x64.img
"FreeNAS-8.3.0-RELEASE-x64.img"
MBR: initialized.
B a5 [    0,  1, 1]-[  122, 15,63]             63(     1,930,257) 3^2 * 7(3^3 * 7^2 * 1459)
- a5 [  123,  1, 1]-[  245, 15,63]      1,930,383(     1,930,257) 3^2 * 7 * 13 * 2357(3^3 * 7^2 * 1459)
- a5 [  246,  0, 1]-[  248, 15,63]      3,860,640(         3,024) 2^5 * 3^2 * 5 * 7 * 383(2^4 * 3^3 * 7)
- a5 [  249,  0, 1]-[   33, 15,63]      3,863,664(        41,328) 2^4 * 3^2 * 7 * 3833(2^4 * 3^2 * 7 * 41)
2,000,000,000 Bytes (= 2^10 * 5^9)
3,906,250 Blocks (= 2 * 5^9)
第4パーティションの末尾はまでは 1,999,355,904 Bytes しかないので、最低と言う意味ではこれだけあれば良い。
余った領域は使われないのであまり大きなストレージにインストールしても容量が無駄になる。
また、見ての通り、アライメントは全く考慮されてない。
NAS 用の OS としては定番のような感じがしていたのだが、フラッシュメモリや AFT 対応という意味ではまだチューニングが十分とは言えない印象を感じる。

起動については、FreeNAS をインストールした USB メモリを USB ハブ経由で接続すると自分の環境ではどうも調子が悪いと言うか、どうも Django の起動に失敗しているらしく、Web GUI を開こうとしても nginx というタイトルだけが出る状態になってしまう。
本体の USB ポートに直付けすると問題は解決した。

パーティション分割のアライメント調整(2012-11-06)

USB メモリの容量に若干余裕があるようなので、フラッシュメモリのページ・ブロックサイズを考慮してたパーティションの配置のアライメントを試してみた。
例えば、東芝製の NAND 型フラッシュメモリ の場合、page/block が 2KiB/128KiB、4KiB/256KiB のような構成になっており、256KiB 以上の 2 の累乗に境界をそろえておけば多分問題は起き難いはず。

不安要素としては UFS フォーマットの内部構造を把握できてない点。
モダンなファイルシステムであれば 4KiB くらいのブロックで管理してくれてることを期待出来そうなところなのだが、第1,2パーティションの容量を見ると 1,930,257(63 * 30,639)セクタになっており、どっちかと言うと CHS に引きずられたレガシーな管理がされてる雰囲気が強い。せめて 512B 単位でブロック管理されるならまだマシなのだが、63 セクタ単位で管理されてるとアライメントしてもしなくても効果は変わらないと言うことになってしまう。

と言うことで、効果についてはあまり期待できそうにないことに加え、設定変更しない限り基本的に読み込みだけなので、実はアライメント狂っても実害はほとんどないのだが、とりあえず、やらないよりはやっておいたほうが気分的にすっきりするので、
パーティション配置を 1MiB 境界にそろえて、以下のように調整してみた。
startcount用途
01MBR
12,047blank
2,0481,930,257da0s1
1,932,3051,007blank
1,933,3121,930,257da0s2
3,863,5691,007blank
3,864,5763,024da0s3
3,867,6001,072blank
3,868,67241,328da0s4
3,910,000
作業は Cygwin で以下のように行った(/dev/sdX は適当に変更)。
dd if=FreeNAS-8.3.0-RELEASE-x64.img of=FreeNAS-8.3.0-RELEASE-x64-aligned.img bs=512                           count=1
dd if=FreeNAS-8.3.0-RELEASE-x64.img of=FreeNAS-8.3.0-RELEASE-x64-aligned.img bs=512 skip=63      seek=2048    count=1930257
dd if=FreeNAS-8.3.0-RELEASE-x64.img of=FreeNAS-8.3.0-RELEASE-x64-aligned.img bs=512 skip=1930383 seek=1933312 count=1930257
dd if=FreeNAS-8.3.0-RELEASE-x64.img of=FreeNAS-8.3.0-RELEASE-x64-aligned.img bs=512 skip=3860640 seek=3864576 count=3024
dd if=FreeNAS-8.3.0-RELEASE-x64.img of=FreeNAS-8.3.0-RELEASE-x64-aligned.img bs=512 skip=3863664 seek=3868672 count=41328

echo -e "d\n1\nd\n2\nd\n3\nd\n4\nc\nn\np\n1\n2048\n1932304\nn\np\n2\n1933312\n3863568\nn\np\n3\n3864576\n3867599\nn\np\n3868672\n3909999\na\n1\nt\n1\na5\nt\n2\na5\nt\n3\na5\nt\n4\na5\nw\nq\n" | /usr/sbin/fdisk FreeNAS-8.3.0-RELEASE-x64-aligned.img
ddrescue FreeNAS-8.3.0-RELEASE-x64-aligned.img /dev/sdX FreeNAS-8.3.0-RELEASE-x64-aligned.log
アライメント結果
$ partinfo.rb FreeNAS-8.3.0-RELEASE-x64-aligned.img
"FreeNAS-8.3.0-RELEASE-x64-aligned.img"
MBR: initialized.
B a5 [    2,  0,33]-[  255, 15,63]          2,048(     1,930,257) 2^11(3^3 * 7^2 * 1459)
- a5 [  255, 15,63]-[  255, 15,63]      1,933,312(     1,930,257) 2^15 * 59(3^3 * 7^2 * 1459)
- a5 [  255, 15,63]-[  255, 15,63]      3,864,576(         3,024) 2^11 * 3 * 17 * 37(2^4 * 3^3 * 7)
- a5 [  255, 15,63]-[  255, 15,63]      3,868,672(        41,328) 2^11 * 1889(2^4 * 3^2 * 7 * 41)
2,001,920,000 Bytes (= 2^13 * 5^4 * 17 * 23)
3,910,000 Blocks (= 2^4 * 5^4 * 17 * 23)

蛇足的に

256KiB アライメントの場合

雑感

Web GUI で手軽に操作が可能なのが売りのはずなのだが、Web GUI からパーティションを切るための画面が見当たらない。
パーティションを切れないと ZFS で RAID-Z や mirro を組む場合に、非常に困ることになる。
なぜかと言うと、異なるメーカーの HDD を混在すると容量が若干異なる場合があり、わずかに小さい容量の HDD は後から mirror とか raid-z のスペアや replace 等の冗長目的で pool に参加させることが出来ない(わずかに容量が足らないため)。このため、あらかじめ切りの良い数字でパーティションを切っておいて、末尾の領域は使わないで放置しておくというのが半ば常套手段と化しているのだが、それの設定が Web GUI からでは出来ない。
もちろん Shell が使えるので、コマンドラインからパーティションを切ってやれば済む話ではあるが、それでは何のための Web GUI なのか、何のための FreeNAS なのかという話になる。8.3.0 からは zpool v28 に対応したというのに勿体無い話だと思う。

USB マスストレージの扱い関しては、ちょっと微妙。
フラッシュメモリについて、FAT32 フォーマットの pqi Traveling Disk U230、FAT16 フォーマットの BUFFALO RUF-C512M/U2、
HDD について Windows XP で NTFS フォーマットした BUFFALO HD-H250U2 などを試してみたが Web GUI の View Disks で da1 として認識まではされたものの、Import Volume すると「An error occurred while labeling the disk.」と言われて import に失敗するような状況で、なぜ失敗するのか原因がよく分からない。

USB 接続の HDD の取り外しについては、Web GUI には Windows で言うところの安全な取り外しはもとより spin down する手段も提供されてないので少し気持ちが悪い。
shell から camcontrol コマンドを用いれば
camcontrol stop da1
等とすることで spin down は可能。

Web GUI の shell はバッファがないのでスクロールアウトしてしまうと読めない。
文字入力が腐るという問題も発生。何かのはずみでターミナルが二重起動しているらしく、2つの端末間を行ったりきたりしてる模様。
マウス左ボタンがチャタリングしているのが原因じゃないかと思うのだが、原因は特定できなかった。
Ctrl+d 連打して shell を閉じて再度 shell を開くという操作を何度か繰り返すと症状が改善したが、マルチウインド対応じゃないのに複数開いてしまうと言うのはちょっと気持ち悪い。
タグ

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Wiki内検索

フリーエリア

管理人/副管理人のみ編集できます