ufs

いってきた: 第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

次回以降

名無ファイル

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は使われていないとしてビットマップを修正するだろう。

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

    タグ絞り込み検索
    ギャラリー
    • 今日の練習 2018-11-15
    • 今日の練習 2018-11-15
    • 今日の練習 2018-11-13
    • 今日の練習 2018-11-11
    • 今日の練習 2018-11-11
    • 今日の練習 2018-11-10
    Amazon
    楽天市場
    adby google
    LINE読者登録QRコード
    LINE読者登録QRコード
    • ライブドアブログ