トップ > Live CD化 >
SquashFSとOverlayFSの併用によるLive CD化

  

圧縮ファイルシステムを使って容量を抑える

前の記事では、透過ファイルシステムを利用することで、CDから起動したにも関わらず、ファイルシステムに書き込みができるようになりました。

ただし、まだ問題が残されています。 1CD Linuxの配布用のファイルツリーをそのままCDに書き込んでいるため、CDの容量を圧迫しているのです

ここでは、配布用のファイルツリーそのままではなく、圧縮した1つのファイルとしてCDに書き込み、それをルートファイルシステムとして利用できるように修正を行います。

圧縮ファイルシステムを利用することで、1ファイルにアーカイブおよび圧縮されたファイルを、ファイルシステムとしてマウントすることができます

ファイルをファイルシステムとしてマウントすることを『ループバックマウント』と呼び、カーネルに、ループバックデバイスサポートの機能が組み込まれている必要があります

なお、1ファイルにアーカイブするのは、CDへのアクセスを減らすためです。 つまり、容量を抑えるだけではなく、読み込みにかかる時間を減らすことも目的です

利用する圧縮ファイルシステム

圧縮ファイルシステムには、ZFS、Btrfs、Cramfs、SquashFSなどがありますが、本ウェブサイトではSquashFSを使用します

  
Cramfs と SquashFS は、CD-ROMなどの読み取り専用メディア向けの圧縮ファイルシステムとして設計されており、今回のような利用方法に適しています。
  
SquashFSは、カーネルのソースファイルに最初から含まれており、パッチを当てる必要はありません。

なお、新システムでループバックマウントが行え、かつ、SquashFSの機能が使えるのは、カーネルコンフィグレーションで以下のように設定したためです。

項目 設定内容
Device Drivers --->
↓
Block devices  --->
↓
Loopback device support
ビルトイン<*>
File systems --->
↓
Miscellaneous   filesystems --->
↓
SquashFS   4.0 - Squashed file system support
ビルトイン<*>

初期RAMディスクの修正

初期RAMディスクを修正します。 Linuxシステムが収められた圧縮ファイルをマウントし、それをルートファイルシステムとして利用できるよう修正します。

なお、引き続き、Fedora上でチェンジルートはせずに作業してください

  
作成した新システムから起動するのではなく、Fedoraを起動し、チェンジルートせずに作業を行ってください。

初期RAMディスクの展開

初期RAMディスクを展開します。


rm -vfr $MYLINUX/tmp/initrd
mkdir -vp $MYLINUX/tmp/initrd
pushd $MYLINUX/tmp/initrd
zcat $MYLINUX/boot/initrd.img-4.0.4 | cpio -i --make-directories
popd

 
  
$MYLINUX/tmp/initrd は存在しないはずですが、念のために最初に削除しています。

ディレクトリの作成

ディレクトリを新たに作成します。


mkdir -vp $MYLINUX/tmp/initrd/squashfs

 

/squashfs は、Linuxシステムが収められた圧縮ファイルをマウントするために使います。

初期RAMディスク用のinitの置き換え

初期RAMディスク用のinitを作り直します。


cat > $MYLINUX/tmp/initrd/init << "EOF"
#!/bin/bash
export PATH="/sbin:/bin"

echo
echo "My Linux initrd"
echo

mount -t proc     proc /proc
mount -t sysfs    none /sys
mount -t devtmpfs none /dev

CDROM=`grep -i "drive name" /proc/sys/dev/cdrom/info | sed -e 's/drive name.*[ \t]//'`

mount -o ro /dev/$CDROM /cdrom
mount -t squashfs /cdrom/mylinux.sfs /squashfs

mount -t tmpfs tmpfs /overlay

mkdir /overlay/upper
mkdir /overlay/work

mount -t overlay overlay -o lowerdir=/squashfs,upperdir=/overlay/upper,workdir=/overlay/work /newroot

mkdir /newroot/overlay

mount --move /overlay /newroot/overlay

umount /sys
umount /proc

exec /sbin/switch_root /newroot /sbin/init
EOF
chmod 0755 $MYLINUX/tmp/initrd/init

 

上記ファイルの変更点について詳しく見てみましょう。

まず、

mount -t squashfs /cdrom/mylinux.sfs /squashfs

は、Linuxシステムが収められた圧縮ファイル( mylinux.sfs ) を /squashfs にマウントしています。

次の、

mount -t overlay overlay -o lowerdir=/squashfs,upperdir=/overlay/upper,workdir=/overlay/work /newroot

では、下層ファイルシステムを /squashfs 上層ファイルシステムを /overlay/upper として透過ファイルシステムを作成しています。

アーカイブ

初期RAMディスク作成用のファイルツリーを、初期RAMディスクに戻します。


pushd $MYLINUX/tmp/initrd
find . | cpio -R 0:0 -o -H newc | gzip > $MYLINUX/boot/initrd.img-4.0.4
popd

 
  
初期RAMディスクは、$MYLINUX/boot/initrd.img-4.0.4 として作成されています。

マウント方式向けの配布用ファイルツリーへのコピー

初期RAMディスクをマウント方式向けの配布用ファイルツリーにもコピーします。


rm -vf $MYLINUX/isolinux/rootforcdrommount/boot/initrd.img-4.0.4
cp -va $MYLINUX/boot/initrd.img-4.0.4 $MYLINUX/isolinux/rootforcdrommount/boot/

 

後始末

不要になった初期RAMディスク作成用のファイルツリーを削除します。


rm -vfr $MYLINUX/tmp/initrd

 

CDへの書き込み

新システムをCDに書き込みます。 書き込む対象は、1ファイルにアーカイブおよび圧縮されたルートファイルシステム、カーネル、初期RAMディスク、CD起動用ブートローダです。

圧縮ファイルシステム方式向けの配布用ファイルツリーの作成

圧縮ファイルシステム方式向けの配布用ファイルツリー、つまり、CDに収めるファイル群を準備します。 今まで使用していた rootforcdrommount ディレクトリではなく、圧縮ファイルシステム方式向けに新たに rootforcompressedfs ディレクトリに作成します。

  
rootforcdrommount はマウント方式向けの配布用ファイルツリーです。
  
rootforcompressedfs は圧縮ファイルシステム方式向けの配布用ファイルツリーです。

rm -vfr $MYLINUX/isolinux/rootforcompressedfs
mkdir -vp $MYLINUX/isolinux/rootforcompressedfs
mkdir -vp $MYLINUX/isolinux/rootforcompressedfs/boot
cp -va $MYLINUX/isolinux/rootforcdrommount/isolinux.bin          $MYLINUX/isolinux/rootforcompressedfs/
cp -va $MYLINUX/isolinux/rootforcdrommount/isolinux.cfg          $MYLINUX/isolinux/rootforcompressedfs/
cp -va $MYLINUX/isolinux/rootforcdrommount/ldlinux.c32           $MYLINUX/isolinux/rootforcompressedfs/
cp -va $MYLINUX/isolinux/rootforcdrommount/boot/vmlinuz-4.0.4    $MYLINUX/isolinux/rootforcompressedfs/boot/
cp -va $MYLINUX/isolinux/rootforcdrommount/boot/initrd.img-4.0.4 $MYLINUX/isolinux/rootforcompressedfs/boot/

 

圧縮ファイルの作成

マウント方式向けの配布用ファイルツリーを圧縮して1つのファイル ( mylinux.sfs ) にします。


rm -vf $MYLINUX/isolinux/rootforcompressedfs/mylinux.sfs
mksquashfs $MYLINUX/isolinux/rootforcdrommount $MYLINUX/isolinux/rootforcompressedfs/mylinux.sfs

 

以下のように圧縮が開始されます。 なお、圧縮にはしばらく時間がかかります。

Parallel mksquashfs: Using 1 processor
Creating 4.0 filesystem on /mylinux/isolinux/rootforcompressedfs/mylinux.sfs, block size 131072.
[============\                                                ]  1313/13837   9%

圧縮ファイルの作成が完了したら、ファイルサイズを確認してみましょう。


ls -l $MYLINUX/isolinux/rootforcompressedfs/mylinux.sfs

 

以下のようにファイルサイズが小さくなっています。

-rw-r--r-- 1 root root 100630528 May 25 06:25 /mylinux/isolinux/rootforcompressedfs/mylinux.sfs

ISOイメージの作成

では、ISOイメージを作成します。


mkisofs \
  -o $MYLINUX/isolinux/mylinux.iso \
  -b isolinux.bin \
  -c boot.cat \
  -L \
  -J \
  -R \
  -no-emul-boot \
  -boot-load-size 4 \
  -boot-info-table \
  $MYLINUX/isolinux/rootforcompressedfs

 

前の記事の時と同じオプションで実行しています。

ただし、書き込む対象が、圧縮ファイルシステム方式向けの配布用ファイルツリーのトップディレクトリである $MYLINUX/isolinux/rootforcompressedfs に変わっています。

CD-Rへの書き込み

前の記事の時と同じ手順でISOイメージファイルをCD-Rへ書き込んでください。 1ファイルにアーカイブおよび圧縮したことで、100M前後にまで小さくなっているはずです

  

起動テスト

では、起動テストを行います。 作成した起動用CDを光学ドライブにセットし、電源を投入してください

rootでログインし、最小システムの構築 > 新システムの起動と動作テスト - 新システムの動作テスト -と同じ手順でテストを実施してください。

  

ひとまずの完成

本ウェブサイトが目指していた、

  1. CDから起動する
  2. ネットワークに接続できる(有線)
  3. 一般的な用途で最低限必要となるソフトウェアのみを含む
  4. X Window Systemは含まない

というLinux系OSを作成することができました。 つまり、とりあえずの完成です。

メニュー