[[diary/Kojima]]

あとでどこかにまとめることにして、とりあえず書いてみた P-Plamo の解説

・P-Plamo って何ですか?

P-Plamo は,いわゆる LiveLinux の一種で,Plamo Linux をインストールしたファイルシステムイメージと
そこから起動するためのブートローダをISO ファイルにまとめたものです.
公開されている iso ファイルを書き込んだ DVD から起動すれば,
HDD にインストールしなくても Plamo Linux 4.6 相当の環境が利用できるようになります.

・CDplamo とはどう違うの?

CDplamo は700MBのCDメディアのサイズを前提にしていましたが,最近では DVD メディアの値段も
十分下ったので P-Plamo は 4.7GB のDVDメディアを前提にして,700MB というサイズ制限を外しています.

現状では1.2GB程度で DVD メディアに書き込むにはややもの足りないサイズですが,
後述するように 2GB の USB メモリに自分のデータファイルと合わせて詰め込めるように,
最大でも1.5GBくらいに抑えようと思っています.

技術的には,CDplamo はカーネルの標準機能である zisofs(ISO ファイルのイメージを圧縮)
機能を使って実現していましたが,P-Plamo では最近の LiveCD で広く使われている squash-fs + lzma 圧縮 + 
union mount の機能を使って実現しています.

CDplamo ではシークの遅い CD-ROM 上で一つ一つのファイルを読み出すためかなり時間がかかりましたが,
P-Plamo では squash-fs 上のファイルがまとめてキャッシュに入るので,
読み出しはかなり高速化できると思います.

- squash-fs って何?

squash-fs は圧縮ファイルシステムの一種で,ファイルシステムを一つのファイルに圧縮して loopback fs 
のようにマウントして使う仕組みです.ファイルの中身はカーネルレベルで透過的に展開するので
ユーザ領域からは元のファイルシステムのように利用することができます.
ただし圧縮したファイルシステムには書き込みができないので RO で使う必要があります.

Linux の圧縮ファイルシステムは,romfs や cramfs などがありますが,これらに比べても squashfs は
圧縮効率が高いそうです.squashfs は現在はカーネルソースとは別に配布されているパッチを使う必要がありますが,
2.6.29 カーネルで本体にマージされる予定です.

- lzma 圧縮って何?

lzma は,Lempel-Ziv-Markov chain Algorithm の略で,LZ77 
圧縮にマルコフチェーンモデルを組み込んだ圧縮アルゴリズムだそうです.
圧縮効率は bzip2 よりも高く,圧縮には時間がかかるものの,展開は比較的高速なので,
ファイルシステムのような読み出し速度が要求される用途には適していると思います.

このアルゴリズムは 7-zip アーカイブが,独自の 7z 形式に採用して広く使われるようになりました.

lzma 圧縮機能は Linux カーネルには採用されていないので,組み込むにはパッチが必要です.

- union mount って何

union mount とは,複数のファイルシステムを重ね合わせて,一つのファイルシステムのように見せる仕組みです.

通常の mount でもファイルシステムを重ねることはできますが,通常の mount では下になったファイルシステムは
見えなくなるのに対して,union-fs では下になったファイルシステムも透過的に見え,
そのファイルシステムへの書き込みは上になったファイルシステムに保存する,といったことが可能です.

この機能を使えば,RO な CD-ROM 上に,書き込み可能なファイルシステムを重ねて,
データの読み出しは CD-ROM から行い,書き込みは別のファイルシステム上に保存する,といったことが可能になります.

union mount の考え方自体は比較的古くから存在し,BSD 系の Unix では以前から広く使われていましたが,
Linux ではカーネル本体には含まれておらず,[[Unionfs:http://www.filesystems.org/project-unionfs.html]]と
[[aufs:http://aufs.sourceforge.net/]] の2種の実装がパッチとして提供されています.P-Plamo では後者の
aufs の方を用いて,ro な squshfs 上に tmpfs を重ねて,ホームディレクトリや設定ファイル,
ログファイルなど書き込めるようにしています.

・USB メモリにインストールできるの?

2GB 以上の容量の USB メモリならばインストール可能ですが,USB メモリから起動できるかは,
マザーボードの BIOS 依存なので,BIOS メニュー等をご確認ください.

USB メモリにインストールする手順は以下のような感じになります.
なお,USB メモリは事前に vfat 形式でフォーマットされているものとします.
フォーマットされていなければ mkdosfs コマンド等でフォーマットしてください.

(記憶で書いているので要テスト)

- DVD に書き込んだ P-Plamo でブート(以下,P-Plamo 上の root アカウントでの操作になります)

- DVD を明示的にマウント

 # mount /dev/sr0 /cdrom 等

- USB メモリを挿して適切にマウントされているかを確認(以下では /media/sdb1 にマウントされているものとします)

- DVD から isolinux 以下を USB メモリ上にコピー

 #  cp -a /cdrom/isolinux /media/sdb1 

- コピーした isolinux ディレクトリから syslinux.cfg ファイルを USB メモリのルートに移動

 # cd /media/sdb1/isolinux ; mv syslinux.cfg ..

- 起動用 MBR を USB メモリに書き込み

 # cat /usr/share/syslinux/mbr.bin > /dev/sdb 

# ファイルシステムではなく,デバイスファイル全体(/dev/sdb)を指定して,その先頭部分に書き込んでいることに注意

- syslinux で isolinux を置いたパーティションを起動可能にする

  # syslinux -s -d isolinux /dev/sdb1 

# ファイルシステム(/media/sdb1)ではなくデバイスファイル(/dev/sdb1)を指定していることに注意

- インストールした USB メモリを起動デバイスに指定して起動

USB メモリの isolinux ディレクトリと syslinux.cfg 以外の部分は自由に利用可能なので,
文書ファイルを置いたり,自分用のコマンドを置いたりすることも可能です.

なお,USB メモリは vfat ではなく ext2 形式でフォーマットすることも可能ですが,
その場合は syslinux ではなく extlinux コマンドで起動可能にする必要があります.
(未テスト)

・書きこんだデータはどこに保存されるの?

/etc や /var, /home など,書き込みが必要なディレクトリは,/tmp/ow/ ディレクトリ以下に作った
同名のディレクトリを union mount して書き込めるようにしているので,書き込んだデータは
/tmp/ow 以下に保存されています.

この部分をネットワーク経由で外部に保存したり,USB メモリ上に保存しておけば,次回はそこから 
/tmp/ow ディレクトリ以下のファイルを復旧して,作業の続きを行うことも可能です.

# 自動的に復旧できるような仕組みも組み込むつもり

・SLAX や puppy linux などがあるのに,なぜ新しい LiveLinux を作ったの?

作ってみたかったからです :-)
- puppy linuxの仕組みを知りたくて、偶然辿り着きました. -- [[koala]] &new{2010-10-09 (土) 23:51:02};
- LiveLinuxの仕組みが紹介されている数少ない文献だと思います。参考になりました! -- [[cupnes]] &new{2011-01-19 (水) 12:51:58};

#comment

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS