【ハウツー】

FreeBSD 9に新ジャーナル機能登場、fsck(8)高速化

2 SUJを有効にする方法

    後藤大地  [2010/04/28]

    SUJを試すには、24日(協定世界時)にコミットされたr207141以降のFreeBSD 9-CURRENTが必要。VirtualBoxなどの仮想環境を利用すると試しやすい。同機能を実装したシステムを用意したら、起動時の選択画面で4を押してシステムをシングルユーザモードで起動し、たとえば次のようにtunefs(8)でSUJを有効にする。この例なら/、/usr、/var、/tmpのUFS2がSUJ有効になる。アンマウントされた状態で実行しないと適用されない。

    # tunefs -j enable /
    # tunefs -j enable /usr
    # tunefs -j enable /var
    # tunefs -j enable /tmp
    

    ジャーナル機能が有効になっているかどうかはdumpfs(8)コマンドでチェックできる。有効になっていればフラグの項目に「soft-updates+journal」のようにジャーナルが表示される。Soft Updatesも有効になっていないならnoneが、Soft Updatesのみが有効になっている場合はsoft-updatesのみが表示される。

    # dumpfs / | head -20 
    magic   19540119 (UFS2) time    Tue Apr 27 12:41:31 2010
    superblock location     65536   id      [ 49847688 e19f5ebf ]
    ncg     12      size    1048576 blocks  1013015
    bsize   16384   shift   14      mask    0xffffc000
    fsize   2048    shift   11      mask    0xfffff800
    frag    8       shift   3       fsbtodb 2
    minfree 8%      optim   time    symlinklen 120
    maxbsize 16384  maxbpg  2048    maxcontig 8     contigsumsize 8
    nbfree  80777   ndir    592     nifree  272619  nffree  1719
    bpg     11758   fpg     94064   ipg     23552   unrefs  0
    nindir  2048    inopb   64      maxfilesize     140806241583103
    sbsize  2048    cgsize  16384   csaddr  3000    cssize  2048
    sblkno  40      cblkno  48      iblkno  56      dblkno  3000
    cgrotor 6       fmod    0       ronly   0       clean   0
    avgfpdir 64     avgfilesize 16384
    flags   soft-updates+journal 
    fsmnt   /
    volname         swuid   0
    
    
    cs[].cs_(nbfree,ndir,nifree,nffree):
    #
    

    SUJの実行例

    SUJが機能しているかどうかは、いきなり電源を切ったりリセットボタンを押して試せばいい。従来であれば起動途中でfsck(8)を実施するように促されるか、システム起動後にバックグラウンドfsck(8)が動き始める。しかしSUJが有効になったシステムでは次のように起動時に修正が実施され、そのままシステムが起動してくる。

    WARNING: / was not properly dismounted
    /: mount pending error: blocks 0 files 1
    (略)
    Starting file system checks:
    ** SU+J Recovering /dev/ada0s1a
    ** Reading 16777216 byte journal from inode 78.
    ** Building recovery table.
    ** Resolving unreferenced inode list.
    ** Processing journal entries.
    ** 45 journal records in 5632 bytes for 25.57% utilization
    ** Freed 13 inodes (3 dirs) 0 blocks, and 5 frags.
    ** SU+J Recovering /dev/ada0s1f
    ** Reading 33554432 byte journal from inode 228.
    ** Building recovery table.
    ** Resolving unreferenced inode list.
    ** Processing journal entries.
    ** 0 journal records in 0 bytes for nan% utilization
    ** Freed 0 inodes (0 dirs) 0 blocks, and 0 frags.
    ** SU+J Recovering /dev/ada0s1d
    ** Reading 33554432 byte journal from inode 5.
    ** Building recovery table.
    ** Resolving unreferenced inode list.
    ** Processing journal entries.
    ** 66 journal records in 10752 bytes for 19.64% utilization
    ** Freed 28 inodes (4 dirs) 0 blocks, and 14 frags.
    Mounting local file systems:
    

    当然だが、稼働しているシステムでは問題が発生すると困る。壊れても問題がないシステムを使うか、VirtualBoxなどの仮想環境で実験した方がいい。手動でfsck(8)を実施すると次のように表示内容が変わっていることがわかる。最初にジャーナルを利用するか聞かれるようになる。

    # fsck /tmp
    ** /dev/ada0s1e
    
    
    USE JOURNAL?? [yn] y
    
    
    ** SU+J Recovering /dev/ada0s1e
    ** Reading 8388608 byte journal from inode 3.
    
    
    RECOVER? [yn] y
    
    
    ** Building recovery table.
    ** Resolving unreferenced inode list.
    ** Processing journal entries.
    
    
    WRITE CHANGES? [yn] y
    
    
    ** 0 journal records in 0 bytes for nan% utilization
    ** Freed 0 inodes (0 dirs) 0 blocks, and 0 frags.
    #
    

    なおジャーナルそのものは対象となるファイルシステムのトップディレクトリ下に.sujournalという名前のファイルで作成される。ls(1)コマンドで確認でき、パーミッションがあれば中身も読める。

    # ls -alh / | head -10
    total 16484
    drwxr-xr-x  25 root  wheel      1.5K  4月 27 07:20 .
    drwxr-xr-x  25 root  wheel      1.5K  4月 27 07:20 ..
    -rw-r--r--   2 root  wheel      784B 12月 21 05:24 .cshrc
    -rw-r--r--   2 root  wheel      247B 12月 21 05:24 .profile
    -rw-------   1 root  wheel      1.0K 12月 24 09:36 .rnd
    drwxrwxr-x   2 root  operator   512B  2月  1  2009 .snap
    -r--------   1 root  wheel       16M  1月  1  1970 .sujournal
    -r--r--r--   1 root  wheel      6.1K  2月 16 05:24 COPYRIGHT
    drwxr-xr-x   2 root  wheel      1.0K  4月 26 04:36 bin
    /% ls -alh / | grep journal
    -r--------   1 root  wheel       16M  1月  1  1970 .sujournal
    # ls -alh /usr | grep journal
    -r--------   1 root  wheel       32M  1月  1  1970 .sujournal
    #
    

    ZFS、SUJ、HASTでエンタープライズレベルストレージ

    SUJの登場はFreeBSDにとってターニングポイントとなる。大規模ストレージが必要になる場合、これまではfsck(8)の問題を避けるためにZFSなどの新しいファイルシステムを採用するか、その部分だけは専門のNASアプライアンスやNASサーバを導入するケースが多かった。SUJの登場でシステム再起動時の時間がきわめて短くなるため、大規模ストレージ用途でも採用しやすくなる。デスクトップやノートPCでワークステーションとして使う場合にもシステムクラッシュ時の復旧が高速になって便利だ。

    FreeBSDプロジェクトは2010年2月、HASTの完了を発表した。HASTはGEOMレベルで高信頼が要求されるレプリケーションを実現するというもの。これもエンタープライズレベルのストレージシステムが要求されるシーンで必要とされてきたものだ。

    ZFSの移植とプロダクション品質の実現、UFS2へジャーナル機能の導入(SUJ)、高信頼レプリケーションシステムHASTの導入という3つの実現は、FreeBSDを大規模ストレージシステムとして採用しやすくするために欠かせない機能となる。FreeBSD 9における注目の新機能になる見通し。

    関連記事

    関連サイト

    関連したタグ

    新着記事

    特設サイトの情報

      求人情報

      人気記事

      一覧

      イチオシ記事

      新着記事

      特別企画

      転職ノウハウ

      あなたの仕事適性診断

      4つの診断で、自分の適性を見つめなおそう!

      Heroes File ~挑戦者たち~

      働くこと・挑戦し続けることへの思いを綴ったインタビュー

      はじめての転職診断

      あなたにピッタリのアドバイスを読むことができます。

      転職Q&A

      転職に必要な情報が収集できます

      スカウト転職する

      企業からアプローチのメッセージが届きます。

      マイナビニュースマガジン