2013年2月26日火曜日

Samba で「特定のグループやユーザからだけ見える共有を作成」したときのアクセス権の問題

長年の問題が解決したので一言。

職場の Linux で Samba2.2.8 を使っていた時に、Linux のグループが root になっているユーザにだけ、特定の Samba の共有が見えるようにするため、特定のグループやユーザからだけ見える共有を作成する を見て設定した。

Samba3.0.33 ではこの設定のままでも使えていたが、Samba3.5.2 では、この共有に Windows からアクセスしようとすると「[共有名] に対するアクセス許可がありません」 と表示されるという現象になり困っていた。

この現象は、Linux のディレクトリのパーミションが drwxrwx--- だと発生して drwxrwxrwx だと発生しない。でも後者にすると Linux 上で root グループ以外のユーザにも読み書きされてしまうので意味がない、という状態ではまっていた(また Windows7 では発生するが WindowsXP では発生しなかった)。

が、今日たまたま Samba [実践] 入門という本を眺めていたら、偶然開いたページに原因が書いてあった。

原因は smb.conf の [global] セクションに "profile acls = Yes" と書いてあったこと。これは Samba サーバを WindowsXP SP1  以降の ドメインコントローラにして、移動プロファイルを使うために必要な設定だが、[global] ではなく 、移動プロファイルが保存される共有に書くべきものだったようだ。この1行を [homes] セクションに移したら現象は解消した。
「Samba [実践] 入門 (P213)」:  「profile acls = Yes」を有効に設定したファイル共有では、Windows から ACL を参照した際に、この ACL チェックで問題が発生しないような形にアクセス許可が強制的に変更されて返却されます。このため、このファイル共有は移動ユーザープ口ファイルの格納専用として用いることを強くお勧めします。
とのこと。

この本、他にも知らないことがいろいろ書いてあるっぽい。ちゃんと読もう。

2012年8月12日日曜日

Shuttle XS35 V2 に FreeBSD を入れる

結論

Shuttle XS35 V2 に FreeBSD9.0 をインストールした場合、有線 LAN で省電力対応のギガビットスイッチングハブに接続すると、デフォルトではリンクアップしない。いまどきのギガビットスイッチはほとんど省電力対応なので困る。


ファンレスサーバが作りたい

Shuttle XS35 V2 に FreeBSD9.0 をインストールした。このマシンはファンレスなので、SSD を搭載すれば完全無音サーバが実現できる。今回は SSD ではなく、USB メモリに OS をインストールしてみた。
Shuttle Japan XS35 V2


    USB メモリからの起動

    使った USB メモリは Buffalo の RUF2-PS16GS (16GB)。製品の写真からわかるようにやたら小さい。あとからこの PC がかなり発熱することがわかったので、USB メモリは延長ケーブル経由で本体から少し離しておくことにした。
    Buffalo: RUF2-PS16GS

    FreeBSD のインストールと USB メモリからの起動は問題なく終わった(以前別の製品で、どうしても OS をインストールできなかった USB メモリがあった。経験上、起動メディアに使うなら国産の USB メモリにした方が良い気がする)。USB メモリは /dev/da0 として認識されている。
    % df -h
    Filesystem       Size    Used   Avail Capacity  Mounted on
    /dev/da0p2      13G    6.9G    5.8G    54%    /
    devfs               1.0k    1.0k      0B   100%    /dev
    tmpfs               953M    4.0k    953M     0%    /tmp
    OS の起動はさすがに HDD/SSD より遅いが、一度起動してしまえばさほどストレスなく利用できる。OS の起動時間を計ってみたら下記の通りだった。

    • 電源ONからブートメニュー画面が表示されるまで:72秒
    • 電源ONからログインプロンプトが出るまで: 101秒
    USBの読み書き速度は
    • 読み込み: 18.5 MByte/s
    • 書き込み: 3.4 MByte/s
    くらいだった。

    有線 LAN の問題

    Shuttle XS35 V2 の有線 LAN には JMicron JMC250 というチップが使われているらしい。FreeBSD9.0 にはドライバが用意されていて、何もしなくても jme0 として認識された。

    ところがここで問題が発生。この PC、特定のギガビットのスイッチングハブに接続した場合だけ通信できない。通信できない場合は、スイッチングハブの LINK ランプもつかない(リンクアップしない)。 

    JMicron JMC250 を省エネルギー対応のハブと接続するとリンクが確立しないというのは、実は既知の問題で、FreeBSD9.0 の jme のマニュアルページに明記してあった。

    % man jme
    CAVEATS
    (**snip**)
    There are two known 1000baseT link establishment issues with JMC25x.  If
    the full mask revision number of JMC25x controller is less than or equal
    to 4 and link partner enabled IEEE 802.3az Energy Efficient Ethernet fea-
    ture,  the controller would not be able to establish a 1000baseT link.
    Also if the length of cable is longer than 120 meters, controller can not
    establish a 1000baseT link.  The known workaround for the issue is to
    force manual link configuration with 100baseTX instead of relying on
    auto-negotiation.  The full mask revision number of controller could be
    checked with verbose kernel boot option.  Use lower nibble of chip revi-
    sion number to get full mask revision of the controller.
    訳してみると以下の通り(full mask revision numberについては後述)。
    %man jme
    警告
    (略)
    JMC25x には 1000baseT でのリンクに関して2つの問題がある。JMC25x の full mask revision number が 4以下で、接続先が IEEE 802.3az 省電力型イーサネットを有効にしている場合、このコントローラは 1000baseT でリンクを確立できない。また、ケーブル 長が120m以上の場合も1000baseT でリンクを確立できない。対策はオートネゴシエーションを使わず手動で100baseTX接続を設定することである。full mask revision number は詳細なカーネル起動オプションで確認できる。full mask revision number はチップのリビジョンの低ニブルから得られる。

    低速でも接続できればいいというなら
    # ifconfig jme0 media 100baseTX
    を実行すれば、省エネルギー対応のハブとも 100Mbps で接続できる。起動時に毎回設定するなら /etc/rc.conf に

    ifconfig_jme0="inet 192.168.100.100 media 100baseTX"
    などと書いておけばよい。ただせっかくのギガビット NIC なのに100Mbps接続になってしまう。

    省電力でないハブに変えて試してみるとギガビットで接続できた。でもいまどき省電力でないハブなんてなかなか手に入らない。
     1Gbit接続可能だったハブ(省電力機能がない製品)
    • Buffalo LSW-GT-8NP
    • FUJITSU SH1508AT

    1Gbit接続不可だったハブ(製品の箱に「省電力」とは書いてあるが IEEE 802.3az とは書いていない)
    • Buffalo LSW3-GT-5NS
    • ELECOM LAN-GSW08/PHB 

    補足

    マニュアル中の full mask revision number とは「詳細なカーネル起動オプション」を指定して起動すると表示される 「チップのリビジョン」の下位4bit らしい。「詳細なカーネル起動オプション」を指定するために、OS のブート画面で [2] キーを押して止め "boot -v" と入力して起動してみた。/var/log/messages に残ったログは以下の通り。「チップのリビジョン」は 0x23 で「低ニブル(下位4bit)」は 3。4以下なので、確かにギガビット接続に問題のあるチップに該当していたようだ。

    Aug 13 11:33:50 lait kernel: jme0: <JMicron Inc, JMC25x Gigabit Ethernet> port 0xdc00-0xdc7f,0xd800-0xd8ff mem 0xfeaf4000-0xfeaf7fff irq 17 at device 0.5 on pci2
    Aug 13 11:33:50 lait kernel: jme0: MSIX count : 8
    Aug 13 11:33:50 lait kernel: jme0: MSI count : 8
    Aug 13 11:33:50 lait kernel: jme0: attempting to allocate 1 MSI-X vectors (8 supported)
    Aug 13 11:33:50 lait kernel: msi: routing MSI-X IRQ 257 to local APIC 0 vector 50
    Aug 13 11:33:50 lait kernel: jme0: using IRQ 257 for MSI-X
    Aug 13 11:33:50 lait kernel: jme0: Using 1 MSIX messages.
    Aug 13 11:33:50 lait kernel: jme0: PCI device revision : 0x0250
    Aug 13 11:33:50 lait kernel: jme0: Chip revision : 0x23
    Aug 13 11:33:50 lait kernel: jme0: ethernet hardware address not found in EEPROM.
    Aug 13 11:33:50 lait kernel: jme0: PHY is at address 1.
    Aug 13 11:33:50 lait kernel: jme0: Read request size : 512 bytes.
    Aug 13 11:33:50 lait kernel: jme0: TLP payload size : 128 bytes.
    Aug 13 11:33:50 lait kernel: miibus0: <MII bus> on jme0
    Aug 13 11:33:50 lait kernel: jmphy0: <JMP211 10/100/1000 media interface> PHY 1 on miibus0
    Aug 13 11:33:50 lait kernel: jmphy0: OUI 0x00d831, model 0x0021, rev. 1
    Aug 13 11:33:50 lait kernel: jmphy0:  none, 10baseT, 10baseT-FDX, 10baseT-FDX-flow, 100baseTX, 100baseTX-FDX, 100baseTX-FDX-flow, 1000baseT, 1000baseT-master, 1000baseT-FDX, 1000baseT-FDX-master, 1000baseT-FDX-flow, 1000baseT-FDX-flow-master, auto, auto-flow
    Aug 13 11:33:50 lait kernel: jme0: bpf attached

    Aug 13 11:33:50 lait kernel: jme0: Ethernet address: 80:ee:73:**:**:**
    【2013/2/9追記】
    このサーバが毎晩深夜 3:00 にkernel: panic する現象が発生。/var/log/messages には
      Jan 20 12:42:10 lait kernel: panic: ufs_dirbad:  /: bad dir ino 243130 at offset 76: mangled entry
    というのが残っていたが原因不明。検索しても同じ例はあまり見つからない。シングルユーザモードで ルートファイルシステムに fsck を実行してみても治らない。

    試行錯誤の結果、毎晩自動で実行されるセキュリティチェックの中の /etc/periodic/secirity/110.neggrpperm がkernel: panicの原因だったので、このファイルを削除したところ落ちなくなった。このスクリプトはファイルのパーミションを確認して、others に与えられているパーミションが group に与えられていない、というファイルを探すためのものらしい。


    自宅 PC 無音化計画

    概要

    実家とアジトの2拠点に、それぞれ Windows と FreeBSD があり、合計4台の PC が常時稼働中。すべての PC から可能な限り回転部分をなくしてみようという計画。

    実家

    PC1

    OSWindows Xp Professional SP3
    ハードウェアDELL Latitude X1
    スペックCPU=Pentium M 733(1.10GHz/超低電圧), RAM=768MB
    備考内蔵HDD をそのまま使用しているので回転部分あり

    PC2

    OSFreeBSD9.0
    ハードウェアDELL Inspiron Mini 9
    スペックCPU=Atom N270 (1.6GHz), RAM=2GB

    アジト

    PC3

    OSWindows Xp Professional SP3
    ハードウェアDELL Latitude X1
    スペックCPU=Pentium M 733(1.10GHz/超低電圧), RAM=768MB
    備考内蔵HDD を SSD(KSD-CF18.1-016MJ) に換装。 プチフリーズが激しい。

    PC4

    OSFreeBSD9.0
    ハードウェアShuttle XS35 V2
    スペックCPU=Atom D525(1.8GHz), RAM=2GB
    備考OS を USB メモリ(Buffalo RUF2-PS16GS, 16GB)にインストール

    FreeBSD で Kernel panic 時に再起動させる

    Kernel panic 後に再起動しない

    FreeBSD9.0 でディスクアクセスのエラーで Kernel Panic すると


    Automatic reboot in 15 seconds - press a key on the console to abort (15秒後に再起動します -  中断する場合はコンソールでキー入力してください)

    という表示が出る。しかしそのまま15秒待っていても自動で再起動しない問題が発生 (mdconfig コマンドで作成した RAMDISK に書き込んだ時にも Kernel Panic が発生して、同様の現象になったことがあった)。

    これでは、サーバが遠隔地に置いてあると、電源を入れなおしに行かなくてはいけない。

    対策

    とりあえずの解決策は以下の通り。ただ、対症療法なので、本当にこれでいいのかは不明だし Kernel  の再構築が必要で大変。もっと適切な方法を知っている方がいたら教えてください。

    Kernel panic 時に即座に再起動させるには(FreeBSD9.0)
    1. オプションに "options DDB"を付けて Kernel を再構築する
    2. /etc/rc.local を作成して /sbin/ddb script kdb.enter.panic=reset と書く
    3. # chmod a+x /etc/rc.local

    補足

    カーネルパニック時に再起動させる方法について検索したところ、Linux の情報は見つかったが、FreeBSD については見つけられなかったのでこの記事を書いた。掲示板には FreeBSD では
    # ddb script kdb.enter.panic=reset
    を実行しておけばよいという書き込みがあったが、これを GENERIC のカーネルで実行すると
    ddb: sysctl: debug.ddb.scripting.scripts: No such file or directory
    というエラーが出てうまくいかなかったので、オプションに "options DDB" を付けてカーネルの再構築をした次第。

    デバッガについては知識がなくて、どうしてこの方法でうまくいくのかは分からない。またそもそもなぜ最初の状態で、15秒後に自動で再起動できないのかも分からない。

    FreeBSD で Windows 用の NAS をマウントする (3)

    [シリーズの先頭から読む]
    (このシリーズはこれが最終です)


    ネットワークが切れたらどうなる?


    ネットワークのトラブルで 、急に FreeBSD から仮想 HDD への LAN 接続が切れたらどうなるのか。LAN が切れただけでファイルシステムが壊れて 1.4TBの HDD が簡単に全滅してしまったのでは困る。そこで、アクセス中(仮想 HDD 内で大きなファイルのコピー中)にLAN ケーブルを引っこ抜くという強引な方法で試してみた。すると

    • LAN が短時間(15~120秒?)のうちに回復すれば何事もなく復旧する
    • ある程度切れっぱなしだと Kernel panic で OS が落ちる

    という結果になった。少なくともファイルシステムが壊れて再起不能になるようなことはないようだ。Kernel panic に陥るまでの時間が一定しないのが困ったものだが。

    LAN が切断してしばらく回復しないと、コンソールに次のようなエラーが表示される。(仮想ファイルシステムを暗号化しているため?)

    messages:Aug 12 15:18:31 lait kernel: GEOM_ELI: g_eli_read_done() failed md1a.eli[READ(offset=1252104634368, length=131072)]
    messages:Aug 12 15:18:31 lait kernel: GEOM_ELI: Crypto WRITE request failed (error=9). md1a.eli[WRITE(offset=1107275448320, length=32768)]

    実行中のコマンドが
    Bad file descriptor

    というエラーで終了する場合もある。その後しばらくリトライしているようだが、いつまでも LAN が回復しないと、なんとKernel panic で OS が落ちる。まあ突然 HDD が消滅したようなものなのでしょうがないのか。

    再起動後は、仮想 HDD をマウントしなおして復旧できる。ただし記事の [その1] の「マウントできなくなった場合の対応」に書いたように、手動で fsck を実行する必要がある。

    Kernel Panic 時に再起動したい


    困ったのは、FreeBSD9 が Kernel Panic した後に
    Automatic reboot in 15 seconds - press a key on the console to abort
    という表示を出すにもかかわらず、そのまま15秒待っていても自動で再起動しない点。サーバが遠隔地に置いてあると、電源を入れなおしに行かなくてはいけない。

    一応なんとか解決できたが、カーネルの再構築が必要で結構おおごとだった。詳しくは別稿で。

    まだ試していないこと


    • 今回は UFS2 で仮想 HDD をフォーマットしたが、ZFSの方が良いかもしれない
    • 万一暗号化ファイルシステムが破損したらどうするのか。仮想ファイルシステムなら気軽に実験できそうなので、いずれ試してみたい


    2012年8月11日土曜日

    FreeBSD で Windows 用の NAS をマウントする (2)

    [シリーズの先頭から読む]


    アクセス速度の測定

    Windowsファイル共有(SMB) 用の NAS 上に作成した仮想ファイルシステム(仮想 FS) を /fs/img にマウントすることができた。仮想 FS の方は UFS2 のファイルシステムなので、普通にパーミションが付けられるし、シンボリックリンクも使える。試しに packages/All 以下の全ファイル(21479個)を /fs/img 以下にコピーして、ls -l を実行してみたところ、所要時間は 2.1秒。SMB 共有をそのまま使ったときは 10-30秒くらいかかっていたので、劇的に快適になった。ように見える。

    しかし、実際の転送速度はどうなっているのか。仮想FSのオーバーヘッドがあるはずだし、今回はファイルシステムの暗号化までしている。少なくとも元より早くなることはないはず。

    ちなみに、今回使った NAS(I/O-DATA HDL-GTR3.0) のパフォーマンス測定をきちんとやってくれている記事があったので読んでみると、ギガビット環境で接続すれば、かなりのパフォーマンスの出るNASらしい。

    元記事とは測定方法が違うが、FreeBSD から、SMB 共有に直接アクセスした場合と、今回作成した仮想FSにアクセスした場合の、読み書き速度を測定してみた。

    測定条件

    FreeBSD 上の RAMDISK(tmpfs) との間で、cp コマンドで下記のファイルの読み書きをして、速度を測定してみた。

    • 単一ファイル: ファイル数 = 1個, 632MB
    • 複数ファイル: ファイル数 = 289個, 合計 668MB

    スイッチングハブは Gigabit 対応。ケーブルは CAT6, NAS 側で Jumboframe を使用するようには設定していない(フレームサイズ = 1500byte)

    測定結果


    ファイルシステム 単一ファイル (読み込み) 複数ファイル ( 読み込み )  単一ファイル (書き込み)複数ファイル ( 書き込み )
    SMB 共有に直接アクセス(/mnt/smb)14.4 [MByte/s]11.7 [MByte/s]12.0 [MByte/s]10.6 [MByte/s]
    SMB 共有内の仮想FS(UFS2)にアクセス (/mnt/img)13.2 [MByte/s]10.0 [MByte/s]12.0 [MByte/s]9.4 [MByte/s]

    速度的には SMB 共有に直接アクセスした時と比べてほとんど遅くなっていない。体感的にも実用になるレベルだと思う。

    問題点

    単一の cp コマンドを実行して、コピー時間を測定した場合は上述のように特に遅くなることはなかったのだが、複数のプロセスが同時に仮想FSを読み書きすると、アクセス速度が極端に遅くなる場合があった。具体的には以下のような問題が発生した。

    1. 仮想 FS (/mnt/img) 以下にホームディレクトリを置く
    2. 仮想 FS に置いた巨大なファイル(15GByte)の MD5 値を算出(md5 /mnt/img/FILENAME)。このコマンドは終了するまでに時間がかかる
    3. md5 コマンドの実行が終わる前に新しくログインすると、異常に時間がかかる(1-3分)

    おそらくログイン時にホームディレクトリの .cshrc 等を読むのに時間がかかったのが原因だと思う。まだ詳しく調べていないが、複数ユーザが巨大ファイルをフルスピードでアクセスする用途には使えないのではないか。

    [続く]

    2012年8月10日金曜日

    FreeBSD で Windows 用の NAS をマウントする (1)

    まとめ

    1. NFS(Network File System) に非対応の Windows 用の NAS(LANハードディスク, SMB 用) を、なんとかして FreeBSD から普通に使いたい
    2. そのために Windows 用の NAS 内に巨大な1個のイメージファイル(fs.img)を作り、そのファイルを仮想ファイルシステム(仮想 HDD) として ufs2 でフォーマットして、FreeBSD9.0 からマウントする 
    3. geli コマンドで仮想ファイルシステム全体の暗号化もしてみた 
    4. このような使い方でも、ファイルへのアクセス速度は極端に遅くはならなかった(が同時アクセスには弱い。本文参照)
    5. この状態でネットワークに重大なエラーが発生すると FreeBSD9.0 が kernel panic で止まる。その場合でもマウント中の仮想 HDD が致命的に破損するケースには遭遇していない 



    動機


    FreeBSD サーバからネットワークストレージをマウントして使いたい。最近 NAS は簡単に買えるようになったが、なぜか NFS に対応した NAS がほとんど見当たらない(昔は普通に対応していた気がするのだが)。職場で使っているネットギア社の ReadyNAS シリーズでは、NFSに対応しているのは「ハイパフォーマンスモデル」だけ。「スタンダードモデル」だとWindowsファイル共有(SMB,CIFS) と Macファイル共有(AFP)のみに対応と書いてある。しかもかなり高価。

    FreeBSD も Windowsファイル共有(SMB)には対応しているので、Windows 用の NAS を一応直接マウントすることはできる。マウントするためのコマンドはこんな感じ(オプションの詳細は後述)。
    # mount_smbfs -E euc-jp:cp932 -I 192.168.100.200 //nas@LANDISK/share /mnt/smb

    試しにこれで FreeBSD から Windows ファイル共有を使ってみたが、以下の問題があってかなり使いにくかった。
    1. パーミションが自由に設定できない 
    2. シンボリックリンクが作れない 
    3. ディレクトリに大量のファイルがある時に、ファイルの一覧表示に異常に時間がかかる(ls -l packages/All/ を実行した時など。ファイル数=約20000 で約10-30秒。しかもキャッシュされていないようで毎回遅い) 

    そこで、一番上の図のように、まず FreeBSD サーバから Windows 用の NAS を SMB でマウントして、そこに巨大な(1.4TB)ファイルを作り、これを mdconfig コマンドで仮想ファイルシステムにする。その仮想ファイルシステムを ufs2 でフォーマットしてマウントしたところ(マウント先にあるファイルをさらにマウントするという、二重で妙な形にはなるが)、上記の問題 1,2,3 が解決して、NFS とほぼ同様に使うことができるようになった。

    こういう使い方をした場合、以下のような懸念があったので、本当に大丈夫なのかの実験もしてみた。
    1. ファイルへのアクセス速度は遅くならないか 
    2. ネットワークのエラーで仮想ファイルシステムが破損したりしないか 

    使った機器


    ◇ FreeBSD サーバ
    Shuttle Japan XS35 V2
    • OS: FreeBSD9.0-RELEASE, 起動 CD-ROM(FreeBSD-9.0-RELEASE-i386-bootonly.iso) から起動してネットワークインストール
    • ハードウェア: Shuttle Japan XS35 V2, Atom D525(1.8GHz), RAM 2GB, ファンレスマシン。ただし HDD/SSD は今回搭載せず、USB メモリ(Buffalo RUF2-PS16GS, 16GB)に OS をインストールしてあるちょっと変わったマシン
    • XS35 V2 の有線 LAN のチップは JMicron JMC250 (FreeBSD で使われるデバイスドライバは jme。省電力対応のギガビットハブと通信できない問題がある)

    ◇ Windows ファイル共有に対応した NAS

    I/O-DATA HDL-GTR3.0
    • I/O-DATA HDL-GTR3.0
    • RAID1+0 で使用、容量1.5TB
    • 他の機種では試していないが、巨大なファイルを作成する必要があるので,NAS 内蔵の HDD のフォーマット形式に注意する必要がありそう

    初期設定の手順

    1. NAS の設定

    NAS の Web インタフェースにログインして、ユーザ(今回は "nas" というユーザ名)を作成し、パスワードを付けておく。IP アドレス(192.168.100.200)、マシン名(LANDISK)を設定、共有(share)を作成しておく

    2. FreeBSD サーバから Windows 用の NAS をマウントする

    FreeBSD から以下のコマンドで NAS で作成した共有をマウントする。

    # mount_smbfs -E euc-jp:cp932 -f 600 -d 700 -I 192.168.1.200 //nas@LANDISK/share /mnt/smb

    このコマンドを実行すると NAS 側で設定したユーザ (ユーザ名=nas) のパスワードを聞かれるので入力する。実際にはここでマウントした先 (/mnt/smb) には巨大なイメージファイル fs.img を1個置くだけ。それ以外には直接は使用しない。

    mount_smbfs コマンドの引数の説明
    • -E: -E FreeBSD側の文字コード : NAS側の文字コード
    • -f: ファイルに対するパーミション
    • -d: ディレクトリに対するパーミッション
    • -I: NAS のIPアドレス
    • マウント元: NASのユーザ名=nas, NASのマシン名=LANDISK, 共有名=share (あらかじめ NAS の Web インタフェースで作成しておく)
    • マウント先: /mnt/smb
    引数ではパーミッションも指定している。/mnt/smb は root だけが読み書きできるだけでよい(それでも他のユーザは仮想ディスクに読み書きできる)し、誤って一般ユーザが仮想HDDのファイルを書き換えたり消したりすると、ディスクが全滅するので、パーミションの値は 600,700 として root のみに読み書きを許可した。

    3. マウントした Windows 共有上に空のイメージファイルを作成する

    # dd if=/dev/zero of=/mnt/smb/fs.img bs=1M seek=1400000 count=1
    このコマンドで約1.4TB(1468007448576 byte)の空のファイル /mnt/smb/fs.img が作成できた。巨大な空のファイルを作成するときには、 dd コマンドで seek オプションを使うのが便利。seek オプションを使わないと(大量の通信が発生して)おそらくものすごく時間がかかる。

    4. 作成したイメージファイルを仮想HDDにする

    # mdconfig -a -t vnode -f /mnt/smb/fs.img -u 1
    # bsdlabel -w md1 auto

    実行すると /mnt/smb/fs.img が /dev/md1 というデバイスファイルに割り当てられて、これ以降このデバイスファイルが仮想 HDD のように扱える。

    5. 仮想HDDを暗号化する

    # geli init -s 4096 /dev/md1a
    # geli attach /dev/md1a

    仮想 HDD の暗号化を行ってみた。上のコマンドを実行すると、/dev/md1a.eli というデバイスファイルができ、このデバイスファイルが暗号化された仮想HDDとして扱える。つまりイメージファイル fs.img への書き込みが自動的に暗号化されて、fs.img を生で読んでも解読できなくなる。"geli init" コマンドの実行時にパスフレーズを付けるように要求される。

    ※ 後日パスフレーズを変更する場合は
    # geli setkey /dev/md1a

    6. ファイルシステムの作成

    # newfs /dev/md1a.eli
    # tunefs -j enable -n enable /dev/md1a.eli
    実行すると、5で作った暗号化仮想 HDD /dev/md1a.eli が ufs2 でフォーマットされる。tunefs コマンドは FreeBSD9.0 で使えるようになったジャーナリング(Soft Update Journaling, SU+J) を有効にするため。有効にしておくとクラッシュ時の fsck が高速になるはず。

    7. マウント

    # mount /dev/md1a.eli /mnt/img
    実行すると、仮想 HDD が /mnt/img にマウントされて、読み書きできるようになる。実際の読み書きは(暗号化された上で) NAS 上のファイル fs.img に対して行われる。

    マウントする


    一度上記の手順で初期化すれば、二回目からは以下の手順でマウントできる。シェルスクリプトにでもしておこう。

    # mount_smbfs -E euc-jp:cp932 -f 600 -d 700 -I 192.168.100.200 /nas@LANDISK/share /mnt/smb
    # mdconfig -a -t vnode -f /mnt/smb/fs.img -u 1
    # geli attach /dev/md1a
    # mount /dev/md1a.eli /mnt/img
    mount_smbfs コマンドでは nas のパスワードを、 geli コマンドでは暗号化時に付けたパスフレーズを聞かれるので、それぞれ入力する。

    マウントしてから mount, df -H コマンドを実行すると、それぞれ次のように表示された。

    # mount
    /dev/da0p2 on / (ufs, NFS exported, local, noatime, journaled soft-updates)
    devfs on /dev (devfs, local, multilabel)
    tmpfs on /tmp (tmpfs, local)
    //NAS@LANDISK/SHARE on /mnt/smb (smbfs)
    /dev/md1a.eli on /mnt/img (ufs, local, journaled soft-updates)
    # df -H
    Filesystem       Size    Used   Avail Capacity  Mounted on
    /dev/da0p2      14G    7.4G    6.3G    54%    /
    devfs               1.0k    1.0k      0B   100%    /dev
    tmpfs               1.0G    4.1k      1G     0%    /tmp
    /dev/md1a.eli    1.4T    528G    801G    40%    /mnt/img

    マウントできなくなった場合の対応(重要)


    システムのクラッシュ後にマウントしようとすると、最後の
    # mount /dev/md1a.eli /mnt/img

    を実行したときに
    mount: /dev/md1a.eli : Operation not permitted

    というエラーが出てマウントできなくなる。その場合は以下のコマンドで仮想 HDD に手動で fsck_ufs を実行してからマウントすればよい。ジャーナリングのおかげで fsck はすぐに終わるはず。

    (上記の「マウントする」の "geli attach /dev/md1a" までを実行してから)
    # fsck_ufs /dev/md1a.eli
    # mount /dev/md1a.eli /mnt/img

    アンマウントする


    手動で強制的にアンマウントする手順

    # umount -f /mnt/img
    # geli detach md1a.eli
    # mdconfig -d -u 1
    # umount -f /mnt/smb


    [続く] 

    2010年10月6日水曜日

    RAID1 の HDD に WindowsXP を入れる話



    HDD がクラッシュしてしまったので、部品を買ってきて PC 新調。今回は RAID カードを使って 2台の SATA-HDD で RAID1 を組んで、WindowsXP をインストールすることにした。
    RAIDカード: グリーンハウス GH-PEX-ESA2
    マザーボード: ASRock H55M-LE
    RAIDカード: グリーンハウス GH-PEX-ESA2
    HDD: ST3320418AS 2台
    OS: WindowsXP Home/Pro

    このような拡張ボード形式の RAID カードを使うのは初めてだったので、実験してみた。

    まとめとしては

    ◇ RAIDカード GH-PEX-ESA2 に SATA-HDD を2台接続して RAID1 にして、WindowsXP Home/Pro SP3 をインストールして、そこから起動できた
    ◇ WindowsXP のインストーラに RAID カードを認識させるために、フロッピーディスクに RAID カード H55M-LE のドライバをコピーしておいて、OS のインストール時に読ませる必要がある。USB FDD でも大丈夫だった。
    ◇ ただし WindowsXP Home SP1a では、インストール中に固まった。SP3 では問題なかった。
    ◇ いろいろ構成を変えて試しているうちに、WindowsXP Home の再アクティベーションを要求されたケースがあった

    当初 WindowsXP  SP1a  の CD-ROM からインストールしてしまって、何度やってもうまくいかなくて困った。後で見ると RAID カードの対応 OS 欄には確かに WindowsXP(SP2) と書いてある。SP までは気にしていなかった。

    無事 OS がインストールできたので、RAID1 の HDD が単独の HDD として読めるかを実験してみた。

    ◇ WindowsXP  をインストールした RAID1 の HDD のうち1台を外して、マザーボードの SATA インタフェースに直接接続しても、HDD の内容はそのままで無事 OS が起動した
    ◇ 逆に、マザーボードの SATA インタフェースに直接 HDD を1台だけ接続して、WindowsXP  をインストールし直し、その HDD を RAIDカード H55M-LE に接続しても、  OS はそこから起動した。その後もう一台 HDD を追加し、RAID1 のミラーリングを組むこともできた(RAID カード GH-PEX-ESA2 の説明書にこういう場合の手順あり)

    注意としては、RAID1 を組んでいる状態から構成を変えるときは、一旦 RAID カードの BIOS から、RAID の解除を行っておく必要がありそうな点。今回それを忘れたままつなぎ替えたりしてしまったが(幸い何事もなかったが)、場合によっては意図しないリビルドが行われて、HDD の内容が消えてしまうこともありそう。

    【2010/10/7追記】
    本文のように、RAIDカードを使わずにOSをインストール→ その HDD をRAID カードに繋ぎ変えて RAID1を組む、とやってみたが、その後のリビルドにはとても時間がかかった。300GBのHDD 2台で10時間くらいかかったのだが、これで正常? 途中で Windows を再起動すると、最初からリビルドをやり直しているようだ。

    下記の画像はリビルド終了後に SATARAID5 の GUI アプリ(Java アプリケーション!)で確認したもの。リビルド中は、この図では緑色のHDDの領域の部分が黄色で表示されていた。


    リビルド中は "Operation" 欄が "Reduced" になり、"Progress" 欄に進行度が % 表示されていた。



    【2013/2/9追記】
    ディスクアクセスが突然遅くなる現象が発生。ただし上記の ATARAID5 の GUI アプリで見る限りでは RAID は正常の模様。

    デバイスマネージャを見たところ PCI Devide に ? マークがついていた。

    これは RAID カードではなく、オンボードの SATA のデバイスの問題のようだったので、ASRock のページからマザーボード(ASRock H55M-LE)のドライバ "Intel ラピッド・ストレージ・テクノロジードライバー andツールプログラム バージョン:8.9.0.1023" をダウンロードして(重い!!) インストールしたら解決した。

    その後 Security Essentials で「お使いのWindowsが正規品として確認される必要があります。」 という警告が表示されたが、指示通りオンラインで正規品の確認をしたところ、無事通って解決した。

    2010年10月4日月曜日

    電子工作時のメモの書き方

    しかし他の皆さんは電子工作をするときにどういうメモを書いているのか。他人のプライベートなメモはめったに見る機会がないのでよく分からない。
    http://gigazine.net/index.php?/news/comments/20080512_nes_controller_table/
    この辺りを見ると、ピンアサインをメモした紙がわずかに写っているので、ああ、他の人も書いていたのか、と思った程度。

    メモの公開

    Blogger の使い方がまだよく分からないのでテストも兼ねて書き込み。
    これまで、電子工作でいろいろ作りながら書いたメモがだいぶたまってきた。私は普段はA4用紙に鉛筆で、やるべきことや気づいたことを書きながら工作やプログラミングをしている。最近はソース中にメモを書いたり、自分用Wikiに書いたりすることもあるかも。とにかく全部どこかに書いておかないとすぐに自分で何を考えていたか忘れてしまう。忘れっぽいのです。

    VoidServer を作ったときには、LAN の規格や AVR、ネットワーク関係の回路など、あちこちではままって、そのときのメモが大量に残っている。ネットで調べて解決した問題もずいぶんあるので、自分も製作中に書いたメモをいずれ公開すれば、同じところではまっている人に役に立つかなと思った次第。といっても、元が自分にしか意味のわからない書きなぐりメモなので、ちゃんと他人が読んで分かる文章にするのは結構大変かも。

    Blogger を使ってみる

    ハードウェア関係の話題をまとめようと思ったものの、どのシステムを使うかちょっと迷い中。Wiki、Google サイトなんかも試してみたけれど、とりあえずBlogger で始めてみる。
    Blogger を使うのはは初めてで(存在も知らなかった)、どこにどのメニューがあるかあちこちいじってようやくつかめてきた感じ。
    検索するとテンプレートの HTML(スタイルシート? JavaScript?)を変更してカスタマイズする方法を書いてあるページが見つかったりして、いろいろできるのかも。
    たださっぱり分からないので、とりあえずちょっとだけ設定を変えて、あとはデフォルトのまま使ってみよう。