Unix/Linuxプログラミング 理論と実践 4章

年賀状をッ…書かないとッ…もう年末ッ…。
それはそうと4章読み終わったのでログでも残しておく。

4章

pwdを書くのを通してUnixファイルシステムを学んでいく章。ファイルシステム、iノード、ハードリンク、シンボリックリンク、マウント等の話。
iノードの間接ブロックの話は知らなかった。他は大体既出。
ちなみにこの章で作ったpwdパーティションの継ぎ目を越えられない問題はstatのst_devをチェックすりゃ大丈夫っしょ。ちなみに getcwd(3) のマニュアル見ると、「古いシステムでは /proc/self/cwd を参照する」、とかあったがこれは知らなんだ。
coreutilspwd見るとgetcwdを使っていて、glibcのソース見てみるとst_dev使ってるっぽいから理解は正しいのかなぁ。と言いつつman見るとgetcwd(3)は最近システムコールだとか書いてるけど…。自分の見てるもんが正しいのかさっぱり自身が無い…。うわーん


以下章末研究課題で考えたもの*1。お約束だけど当ってるか知らないみゃ。

4.2

パーティションとiノードの数を調べるには。
df(1)でオプション-iで見れる、でいいのかな。

4.7

ディレクトリのリンク数。少なくとも2個以上な理由。
親のディレクトリからのリンクと、自身の.で最低2つ。

4.9

隠しサブツリー。mount(8)でマウントポイントが存在しないor存在してファイルを含む場合。

vko:seikichi% ls -R
.:
KMCD_NF2009.iso  iso1  iso2

./iso1:

./iso2:
hoge  wahu

./iso2/wahu:

vko:seikichi% sudo mount -t iso9660 -o loop KMCD_NF2009.iso iso0
mount: mount point iso0 does not exist
vko:seikichi% sudo mount -t iso9660 -o loop KMCD_NF2009.iso iso1
vko:seikichi% sudo mount -t iso9660 -o loop KMCD_NF2009.iso iso2
vko:seikichi% ls -i
3427761 KMCD_NF2009.iso     2176 iso1     2176 iso2

とかやるとiso1もiso2も同じinodeになって、もともとiso2にあった内容が隠れちゃってる。

4.10

ディレクトリに移動したあとそのディレクトリを削除してpwdをすると、…ちゃんと見えるやーん。
そういやpwdはシェルに組込みでコマンドあるからそっち使われてるのか、と type pwd して気付く。/bin/pwd で実行すると 「/bin/pwd: couldn't find directory entry in `..' with matching i-node」と怒られる。ふぅ。

4.11

シリンダグループについて調べる。

初期のUNIXで使っていた小さいディスクではこれで十分であったが、技術の進歩と共にディスク容量が大きくなり、inodeのある部分とデータブロックの間をヘッドが行き来することによる(いわゆる)スラッシングが無視できなくなってきた。BSDではこれを最適化した FFS (Fast File System) を導入した。これは、シリンダグループという概念を発明したもので、ディスクを小さい部分に分け、それぞれにinodeとデータブロックを配置する構成である。

http://ja.wikipedia.org/wiki/Unix_File_System

らしい。

4.12

iノード領域を増やす/減らすのはどういう時か。
でかいファイルばっかり置く予定なら減らして、ちっちゃいのばっかりなら増やす感じ?


ということで次は「5章 接続をコントロールする - sttyを研究する」

*1:めんどくなって数が減ってきた…。まずい…