玩式草子─ソフトウェアとたわむれる日々

第10回 P-Plamoの内部構造[その2]

この記事を読むのに必要な時間:およそ 5.5 分

前回はP-Plamo独自のinitスクリプトの前半,squashfsのイメージファイルを見つけるまでの処理を紹介しました。今回は引き続いてinitスクリプトの後半の処理を紹介しましょう。

この部分では書き込み不可なsquashfsをルートファイルシステムとして利用するための作業が中心で,多くの処理がaufsに関する操作になるため,まずaufsについて紹介してからinitスクリプトの解説に移ります。

aufsとは

aufsについては,前の連載でも簡単に紹介したように,linuxにおけるunion mountの実装のひとつです。

aufsはJunjiro Okajima氏が開発しているunion mountの実装で,Another Union FSという名称が示すように,元々はStony Brooks UniversityのErez Zadok教授のチームが開発していたUnion FSを元に,独自のアイデアや実装を追加して開発したファイルシステムです。

Erez Zadok教授のUnion FSは,より大きなFiST(Stackable Filesystem Language and Template)というプロジェクトの 一部で,このプロジェクトは重ね合わせ可能(Stackable)な汎用的ファイルシステムを作ることを目指しているそうです。Union FSもaufsと刺激しあいながら進歩を続け,現在はバージョン2.5.4が公開されています。

aufsについて理解するには,実際の動作を見てもらうのが手っ取り早いでしょう。aufsは公式のカーネルには含まれておらず,必要なファイルはgit経由で入手する必要がありますが,Plamo-4.72ではあらかじめaufs機能を組み込んだカーネルを用意していますので,aufsモジュールドライバをmodprobeで組み込めばすぐに使用できるようになります。

# modprobe aufs
# dmesg | tail
aufs 2-standalone.tree-32-20100208

aufsの典型的な使い方として,ROなCD/DVDメディアに擬似的に書き込む例を紹介しましょう。以下の例では/cdromにP-PlamoのDVDをマウントしています。

% df
Filesystem           1K-ブロック    使用   使用可 使用% マウント位置
/dev/sda4             27435156  15801396  10240100  61% /
none                   1557276       192   1557084   1% /dev
/media                 1557276         0   1557276   0% /media
 ....
/dev/sr0               1632774   1632774         0 100% /cdrom
% ls /cdrom
ChangeLog  initrd  isolinux/

/tmpにaufs用の領域を用意し,/cdrom上に重ねます。

# mkdir /tmp/aufs ; chmod 777 /tmp/aufs
# mount -t aufs -o br:/tmp/aufs:/cdrom none /cdrom
# df
Filesystem           1K-ブロック    使用   使用可 使用% マウント位置
/dev/sda4             27435156  15803972  10237524  61% /
none                   1557276       192   1557084   1% /dev
/media                 1557276         0   1557276   0% /media
....
/dev/sr0               1557276     26180   1531096   2% /cdrom
none                   1557276     26180   1531096   2% /cdrom

この状態で/cdromを見ると,以前と同じようにDVDメディアの中身が表示されます。

% ls /cdrom
ChangeLog  initrd  isolinux/

一方,本来は書き込みできないはずの/cdromディレクトリに一般ユーザから書き込むことができます。

% touch /cdrom/aufs_test
% ls -l /cdrom
合計 6,299,136
-r--r--r-- 1 root   root      5,271  3月 28日  23:53 ChangeLog
-rw-r--r-- 1 kojima users         0  5月  3日  10:42 aufs_test
-r--r--r-- 1 root   root  6,291,456  3月 28日  01:47 initrd
dr-xr-xr-x 2 root   root      2,048  3月 28日  11:13 isolinux/

ChangeLogは本来DVDメディア上に存在する変更不可なファイルですが,ファイルの所有者(root)の権限で書き込み許可を与えると,aufsのレイヤで複製され,一般ユーザからも修正することができます。

% sudo chmod a+rw /cdrom/ChangeLog
パスワード: *****
% emacs /cdrom/ChangeLog
...

% ls -l cdrom
合計 6,309,888
-rw-rw-rw- 1 root   root      5,305  5月  3日  10:46 ChangeLog
-rw-rw-rw- 1 kojima users     5,271  3月 28日  23:53 ChangeLog~
-rw-r--r-- 1 kojima users         0  5月  3日  10:42 aufs_test
-r--r--r-- 1 root   root  6,291,456  3月 28日  01:47 initrd
dr-xr-xr-x 2 root   root      2,048  3月 28日  11:13 isolinux/

ファイルの先頭を見ると,確かに変更した内容が記録されています。

% head /cdrom/ChangeLog
-*- text -*-

平成22年5月3日(月)

テストの入力

平成22年3月28日(日)
...

また,このファイルは削除することもできます。

% rm /cdrom/ChangeLog
% ls -al /cdrom
 合計 6,305,792
drwxrwxrwx  5 root   root        160  5月  3日  10:57 ./
drwxr-xr-x 26 root   root      4,096  4月 30日  13:59 ../
-rw-rw-rw-  1 kojima users     5,271  3月 28日  23:53 ChangeLog~
-rw-r--r--  1 kojima users         0  5月  3日  10:42 aufs_test
-r--r--r--  1 root   root  6,291,456  3月 28日  01:47 initrd
dr-xr-xr-x  2 root   root      2,048  3月 28日  11:13 isolinux/

この例のように,aufsを使えば本来は変更不可能なCD/DVDメディア上に擬似的にデータを書き込むことが可能になります。これらの修正はaufsを外す(umount)と元の状態に戻ります。

% sudo umount /cdrom
% df 
Filesystem           1K-ブロック    使用   使用可 使用% マウント位置
/dev/sda4             27435156  15804032  10237464  61% /
none                   1557276       192   1557084   1% /dev
..
/dev/sr0               1632774   1632774         0 100% /cdrom
% ls -al /cdrom
合計 6,299,136
-r--r--r-- 1 root root     5,271  3月 28日  23:53 ChangeLog
-r--r--r-- 1 root root 6,291,456  3月 28日  01:47 initrd
dr-xr-xr-x 2 root root     2,048  3月 28日  11:13 isolinux/

aufsに書き込まれたデータは,実際には先に作った/tmp/aufs/に保存されているので,必要に応じて別途利用することもできます。

% ls -al /tmp/aufs/
合計 8,192
drwxrwxrwx  4 root   root    160  5月  3日  10:57 ./
drwxrwxrwt 15 root   root    660  5月  3日  11:00 ../
-r--r--r--  2 root   root      0  5月  3日  10:38 .wh..wh.aufs
drwx------  2 root   root     40  5月  3日  10:38 .wh..wh.orph/
drwx------  2 root   root     40  5月  3日  10:38 .wh..wh.plnk/
-r--r--r--  2 root   root      0  5月  3日  10:38 .wh.ChangeLog
-rw-rw-rw-  1 kojima users 5,271  3月 28日  23:53 ChangeLog~
-rw-r--r--  1 kojima users     0  5月  3日  10:42 aufs_test

今回はROメディアを例に用いましたが,aufsを使えば,システム上の通常は書き込み不可の領域にユーザの一時的な変更を許可し,必要が無くなれば元の状態に戻す,といった処理も簡単に実現できます。aufsはこのようにさまざまな場面で応用可能な便利なファイルシステムです。

著者プロフィール

こじまみつひろ

Plamo Linuxとりまとめ役。もともとは人類学的にハッカー文化を研究しようとしていたものの,いつの間にかミイラ取りがミイラになってOSSの世界にどっぷりと漬かってしまいました。最近は田舎に隠棲して半農半自営な生活をしながらソフトウェアと戯れています。

URLhttp://www.linet.gr.jp/~kojima/Plamo/index.html

コメント

コメントの記入