記事検索
月別アーカイブ
アクセスカウンター

    タグ絞り込み検索

    ufs

    2012年07月21日01:56いってきた: 第9回FreeBSD勉強会 ストレージの管理: GEOM, UFS, ZFS

    DSC06029DSC06031DSC06032DSC06001DSC06004DSC06009DSC06017

    第9回FreeBSD勉強会 ストレージの管理: GEOM, UFS, ZFS / 佐藤広生

    DSC06002DSC06003

    DSC06019

    GEOM

    • 一次元の配列のように見える。
    • GEOMを回避してストレージにアクセスできない。どうやっても通る。
    • /dev/ada0とか1バイト単位でアクセスできるようになっている。FreeBSDではcdev,bdevの区別をすてた。ブロックデバイスはない。
    • デバイスノード → コンシューマ → プロバイダ → ディスクノード
    • プロバイダとコンシューマはペアになる。
    • ストレージデバイスがつながれたらGEOMの構造が自動でつくられる。伝統的なUNIXと同じように見えるようになっている。
    • BSDラベルのなかにBSDラベルをきっても対応できるらしい。
    • sysctl kern.geom.confdot でgraphviz形式でダンプできる。
    • mirror classは勝手には作られないが、デバイスの最後のブロックにgmirror(8)で書き込むとカーネルがちら見して、設定を読んでミラークラスをつくってくれる。→ tasting と呼ばれている。
    • mirror/mymirrorという名前でもいいけど、UNIX likeなgm0とかにおちついた。
    • ミラーのprimaryの指定は後から変更できるが、基本はlabelの先頭のやつ。
    • ストレージを切り離すにはgmirror forgetという分かりにくい。
    • gmirrorはGENERICに入ってないのでgmirror loadしないといけない。loader.confに入れてブート時に読み込まれるようにしておくこと。
    • 基本的に専用コマンドでGEOMメタデータを書き込む。
    • ZFSを実現するためにGEOMをくみあわせてつかっている(が表にはみえてこない)。

    ファイルシステム

    • マウントポイントはディレクトリ基本だが、一部のOSではNFSなどファイル単位でマウントできるものもある。
    • mdconfig -a -t swap -u 0 -s 10m でメモリデバイスをつくる。本当にシステムのメモリが枯渇すると落ちるので注意。
    • UFSはinode領域はディスクの真中あたりに置いてあって先頭に置くよりも平均的にはアクセスが速くなる。
    • inode=2がルートディレクトリ。
    • カーネルをアップデートしても落ちるケースはスーパーブロックやinodeが壊れているかもしれない。
    • ファイルシステムが壊れてたらmountするとパニックしちゃうのでfsckが終わるまでmountできないようになっている。
    • fsckは未使用ブロックの解放をおこなうがメモリがたくさん要る。ディスク1GBに対して0.5MBのメモリが必要。
    • fsckはswaponの前なので注意。
    • inodeを非同期で書き込むと速くなるが信頼性が落ちる。FreeBSDは遅いといわれると悲しい→softupdatesが開発された。
    • softupdatesは削除は参照されないようにしてからブロックを消す。追加はブロックをつくってから参照をいれる。
    • softupdatesを有効にしてても未使用ブロック管理の回収でfsckが必要になる。fsckの時間は短かくならないが損傷の可能性は低くなる。
    • ジャーナリングでメタデータ操作の手順を記録する→復旧時にリプレイすればok。リプレイは何度やっても同じ結果になる。fsckの時間はほぼなくなったが、電源断で戻る幅がおおきくなった。やってないことになる量が増えたということ。10分とか15分とかのオーダで戻る。
    • 現状ジャーナリングを有効にるとdump -Lがつかえなくなる。改修中。
    • Q バグは9.1で直る? A: リリース前にレポートしてほしい、リリース直後は疲弊していてメールをよみとばしてしまう傾向が..
    • Q dragonflyのhammerは移植されるか? A: hammer FSはVFSの改造が入っているのでもってくるのはむつかしい。fuseの形で動かせるが、FreeBSDにもってきてても性能が出ない。技術的に難しい。hammer2でOSもかきかわってきているので。

    [2012-07-20 20:37]

    FreeBSDとCloudCore VPSと私 / 小原聖健

    • 自宅に置く電気代よりも安いよ。
    • たくさん購入すると安くなるよ。
    • そのうち新しいメニューが出るよ。

    [2012-07-20 20:42]

    FreeBSD勉強会 / 後藤大地

    • portsはバージョン管理されていないのでどんどん新しくなってしまう、古いバージョンにセキュリティパッチだけあてるサービス。
    • RedHatのような動作検証サポート。検証結果だけでなくてプログラム自体を提供するとか。

    懇親会

    ~22:50

    日本酒がいっぱいならんでました。

    DSC06034

    DSC06038DSC06046

    次回以降



    このエントリーをはてなブックマークに追加
    2011年02月13日01:06名無ファイル

    unixでファイルをつくってからrmするとどうなるかテスト。OSはFreeBSDでファイルシステムはUFS2。

    前準備で空っぽなファイルbokeをつくる。

    catコマンドをバックグラウンドで実行してオープンした状態を維持する。

    guriandgura# df /
    Filesystem  1K-blocks   Used  Avail Capacity  Mounted on
    /dev/ad4s2a    507630 352502 114518    75%    /
    guriandgura# mkdir /hoge
    guriandgura# cd /hoge
    guriandgura# cat >boke&
    [1] 56133
    guriandgura# ls -al
    total 4
    drwxr-xr-x   2 root  wheel   512  2月 13 00:17 .
    drwxr-xr-x  32 root  wheel  1024  2月 13 00:17 ..
    -rw-r--r--   1 root  wheel     0  2月 13 00:17 boke
    guriandgura# ls -i /hoge/boke
    49952 /hoge/boke
    

    inode番号は49952で、まだ書き込んでいないのでファイルサイズは0。

    fsdbでinodeをのぞいてみる。

    -rオプションをつけてread onlyでのぞき。

    guriandgura# fsdb -r /dev/ad4s2a
    ** /dev/ad4s2a (NO WRITE)
    Examining file system `/dev/ad4s2a'
    Last Mounted on /
    current inode: directory
    I=2 MODE=40755 SIZE=1024
    	BTIME=Apr 25 04:11:35 2007 [0 nsec]
    	MTIME=Feb 13 00:17:04 2011 [0 nsec]
    	CTIME=Feb 13 00:17:04 2011 [0 nsec]
    	ATIME=Jul 20 23:54:57 2010 [0 nsec]
    OWNER=root GRP=wheel LINKCNT=32 FLAGS=0 BLKCNT=4 GEN=694ba5aa
    fsdb (inum: 2)> inode 49952
    current inode: regular file
    I=49952 MODE=100644 SIZE=0
    	BTIME=Feb 13 00:17:03 2011 [0 nsec]
    	MTIME=Feb 13 00:17:03 2011 [0 nsec]
    	CTIME=Feb 13 00:17:03 2011 [0 nsec]
    	ATIME=Feb 13 00:17:03 2011 [0 nsec]
    OWNER=root GRP=wheel LINKCNT=1 FLAGS=0 BLKCNT=0 GEN=18996b66
    fsdb (inum: 49952)> quit
    

    LINKCNT=1となっていてディレクトリからちゃんと参照されているのがわかる。

    ファイルをrmしたらinodeはどうなるか?

    rmというのはディレクトリからの参照を消すこと。

    guriandgura# ls -li boke
    49952 -rw-r--r--  1 root  wheel  0  2月 13 00:17 boke
    guriandgura# rm boke
    guriandgura# ls -li boke
    ls: boke: そのようなファイルまたはディレクトリはありません
    guriandgura# sync
    guriandgura# fsdb  -r /dev/ad4s2a
    ** /dev/ad4s2a (NO WRITE)
    Examining file system `/dev/ad4s2a'
    Last Mounted on /
    current inode: directory
    I=2 MODE=40755 SIZE=1024
    	BTIME=Apr 25 04:11:35 2007 [0 nsec]
    	MTIME=Feb 13 00:17:04 2011 [0 nsec]
    	CTIME=Feb 13 00:17:04 2011 [0 nsec]
    	ATIME=Jul 20 23:54:57 2010 [0 nsec]
    OWNER=root GRP=wheel LINKCNT=32 FLAGS=0 BLKCNT=4 GEN=694ba5aa
    fsdb (inum: 2)> inode 49952
    current inode: regular file
    I=49952 MODE=100644 SIZE=0
    	BTIME=Feb 13 00:17:03 2011 [0 nsec]
    	MTIME=Feb 13 00:17:03 2011 [0 nsec]
    	CTIME=Feb 13 00:19:28 2011 [0 nsec]
    	ATIME=Feb 13 00:17:03 2011 [0 nsec]
    OWNER=root GRP=wheel LINKCNT=0 FLAGS=0 BLKCNT=0 GEN=18996b66
    fsdb (inum: 49952)> quit
    

    リンク数が0になったのがわかる。つまりファイルシステム上ではどのディレクトリにも名前がないということ。

    ファイルにデータをかきこんだらどうなるか?

    guriandgura# fg
    cat > boke
    hoge
    hoge
    ^Z
    中断
    guriandgura# sync
    guriandgura# fsdb -r /dev/ad4s2a
    ** /dev/ad4s2a (NO WRITE)
    Examining file system `/dev/ad4s2a'
    Last Mounted on /
    current inode: directory
    I=2 MODE=40755 SIZE=1024
    	BTIME=Apr 25 04:11:35 2007 [0 nsec]
    	MTIME=Feb 13 00:17:04 2011 [0 nsec]
    	CTIME=Feb 13 00:17:04 2011 [0 nsec]
    	ATIME=Jul 20 23:54:57 2010 [0 nsec]
    OWNER=root GRP=wheel LINKCNT=32 FLAGS=0 BLKCNT=4 GEN=694ba5aa
    fsdb (inum: 2)> inode 49952
    current inode: regular file
    I=49952 MODE=100644 SIZE=10
    	BTIME=Feb 13 00:17:03 2011 [0 nsec]
    	MTIME=Feb 13 00:20:36 2011 [0 nsec]
    	CTIME=Feb 13 00:20:36 2011 [0 nsec]
    	ATIME=Feb 13 00:17:03 2011 [0 nsec]
    OWNER=root GRP=wheel LINKCNT=0 FLAGS=0 BLKCNT=4 GEN=18996b66
    fsdb (inum: 49952)> quit
    

    SIZE=10になってファイルが大きくなっているのがわかる。またBLKCNT=4になって実際にデータブロックが割り当てられているのもわかる。

    closeしたらinodeはどうなる?

    catコマンドをkillしてcloseする。

    guriandgura# fg
    cat > boke
    ^C
    guriandgura# sync
    guriandgura# fsdb -r /dev/ad4s2a
    ** /dev/ad4s2a (NO WRITE)
    Examining file system `/dev/ad4s2a'
    Last Mounted on /
    current inode: directory
    I=2 MODE=40755 SIZE=1024
    	BTIME=Apr 25 04:11:35 2007 [0 nsec]
    	MTIME=Feb 13 00:17:04 2011 [0 nsec]
    	CTIME=Feb 13 00:17:04 2011 [0 nsec]
    	ATIME=Jul 20 23:54:57 2010 [0 nsec]
    OWNER=root GRP=wheel LINKCNT=32 FLAGS=0 BLKCNT=4 GEN=694ba5aa
    fsdb (inum: 2)> inode 49952
    current inode 49952: unallocated inode
    fsdb (inum: 49952)> quit
    guriandgura# 
    

    inodeビットマップがクリアされてしまったのだろう、unallocatedと表示されてしまいディスク上のinodeがどうクリアされたかは見えず。

    まとめ

    openしたままrmするとリンク数は0になるが、inodeが再利用されないようにinodeビットマップは使用中のままである。

    もしopenしたままrmしたあとにシステムクラッシュすると、fsckはこのinodeは使われていないとしてビットマップを修正するだろう。



    このエントリーをはてなブックマークに追加