截至目前為止,我們的檔案系統已經擁有基本的系統指令與工具。接下來,我們即可將建置完成的 root filesystem 製作成 ext2 格式的映像檔。
以下提供二種 ext2fs image file 的製作方式:
- 土方法
- 使用 genext2fs 工具
先說明傳統的土方法。首先,先利用dd指令做出一個空白的檔案,大小為 4M(bytes):
# dd if=/dev/zero of=ext2fs bs=1k count=4096
我們將檔案命名為 ext2fs,接著再將 ext2fs 製作成 ext2 格式的檔案系統:
# mkfs.ext2 ext2fs mke2fs 1.32(09-Nov-2002) ext2fs is not a block special device. Proceed anyway?(y,n)y
選擇y後出現以下畫面:
Filesystem label= OS type: Linux Block size=1024(log=0) Fragment size=1024(log=0) 128 inodes, 1024 blocks 51 blocks(4.98%)reserved for the super user First data block=1 1 block group 8192 blocks per group, 8192 fragments per group 128 inodes per group Writing inode tables: done Writing superblocks and filesystem accounting information: done This filesystem will be automatically checked every 26 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override.
到這裡我們已經做好一個檔案格式為 ext2 的空白映像檔,再來只要將先前做好的 root filesystem 全部複製到 ext2fs 映像檔「裡面」即可。
先將 ext2fs 附掛至任一空目錄,例如 mnt/:
# mkdir mnt/ # mount -t ext2 -o loop ext2fs mnt/ (指定檔案系統為 ext2)
複製檔案系統時,我們不使用 cp 指令,而是利用 tar 來完成:
# cd install/ # tar cz * > ../install.tar.gz (將檔案系統做成tarball,同時也備份 root filesystem。) # cd .. # cd mnt/ # tar zxvf ../install.tar.gz (再將tarball解至映像檔)
接著將映像檔 umount 並壓縮即可:
# cd .. # umount mnt/ # gzip -9c ext2fs > pub/ext2fs.gz
最後得到的 ext2fs.gz 即是完成品。請注意,若不使用 tar 來說,也應該使用 cpio 來複製檔案,避免使用 cp 指令。
使用 genext2fs
genext2fs 是一個 ext2 filesystem image file 的製作工具,可以讓我們很方便地將 root filesystem 製作成 image 檔。請由 genext2fs 的官方網站下載原始碼套件:
http://genext2fs.sourceforge.net/
編譯後可以取得 genext2fs 檔案,以下是將 install/ 目錄製作成 ext2fs image 檔的指令:
# genext2fs -b 8192 -i 1024 -d install/ ext2fs
執行後,會得到檔名為 ext2fs 的 image 檔,大小為 8 MB(透過 ‘-b’ 參數指定 image file 大小);接著同樣再用 gzip 將 ext2fs 檔壓縮即可。