Unix/Linuxプログラミング 理論と実践 4章
年賀状をッ…書かないとッ…もう年末ッ…。
それはそうと4章読み終わったのでログでも残しておく。
4章
pwdを書くのを通してUnixのファイルシステムを学んでいく章。ファイルシステム、iノード、ハードリンク、シンボリックリンク、マウント等の話。
iノードの間接ブロックの話は知らなかった。他は大体既出。
ちなみにこの章で作ったpwdがパーティションの継ぎ目を越えられない問題はstatのst_devをチェックすりゃ大丈夫っしょ。ちなみに getcwd(3) のマニュアル見ると、「古いシステムでは /proc/self/cwd を参照する」、とかあったがこれは知らなんだ。
coreutilsのpwd見るとgetcwdを使っていて、glibcのソース見てみるとst_dev使ってるっぽいから理解は正しいのかなぁ。と言いつつman見るとgetcwd(3)は最近システムコールだとか書いてるけど…。自分の見てるもんが正しいのかさっぱり自身が無い…。うわーん
以下章末研究課題で考えたもの*1。お約束だけど当ってるか知らないみゃ。
4.2
パーティションとiノードの数を調べるには。
df(1)でオプション-iで見れる、でいいのかな。
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:めんどくなって数が減ってきた…。まずい…