制作livecd了解的几个工具程序
转自杜比的BLOG http://blog.chinaunix.net/u/12258/showart_469431.html 定制livecd学到的几个工具程序

杜比环绕声


定 制FreeBSD的livecd,不可避免的要与一些工具程序打交道,当然也要补充一些平时不太用到的知识,比如虚拟磁盘什么的,这些知识有的需要更仔细 的看handbook,而有些只能是通过man手册,进行针对性的了解。为了强化记忆,也为了更好的提高对相关知识的深入认识,我杂七杂八的整理一些,希 望对自己有用。

1、关于内存文件系统,简称mfs

归纳起来说,就是利用一个映像文件建立一个内存设备,然后挂载使用,这种叙述很可能是很不正确的,但我目前的理解就是这样,利用内存文件系统可以解决livecd运行时,某些分区可写的问题,在freesbie中的extra目录下,提供了如下几个脚本:

rootmfs.sh :   作用是在livecd启动时,创建一个root 内存文件系统

cp ${LOCALDIR}/extra/rootmfs/rootmfs.rc ${BASEDIR}/etc/rc.d/rootmfs

chmod 555 ${BASEDIR}/etc/rc.d/rootmfs

echo "Saving mtree structure for /root"

mtree -Pcp ${BASEDIR}/root > ${TMPFILE}

mv ${TMPFILE} ${BASEDIR}/etc/mtree/root.dist
在这些代码中值得注意的是 mtree 这个命令,在最后一行代码中,保存 /root 目录下的文件属性到 root.dist 文件中,以便在livecd 运行 rootmfs 时,在内存文件系统中恢复 /root 目录下文件的各种属性。

从上面的代码也能看出,livecd 创建 /root 这个内存文件系统是通过运行拷贝到 /etc/rc.d/ 目录下的rootmfs来得到的,具体的执行过程是:

/etc/rc.d/rootmfs 的代码:

# 按照mdconfig的参数,建立一个内存文件系统设备名
device=$(mdconfig -a -t malloc -o compress -s ${rootsize})     

# 打上磁盘标记
bsdlabel -w ${device} auto

# 建立一个内存文件系统
newfs -n -m 2 /dev/${device} > /dev/null 2>&1

# 把生成的设备与具体的 tempdir 指定的目录进行挂载
mount -o noatime /dev/${device} ${tempdir}

back=$PWD

cd /root

# 拷贝光盘 /root 目录下的文件到 tempdir 目录下
find . -print -depth | cpio -dump --quiet ${tempdir}

cd $back

# 恢复拷贝到 tempdir 下的文件的属性
mtree -PUer -q -p ${tempdir} < /etc/mtree/root.dist > /dev/null 2>&1

# 释放内存文件系统与tempdir的联系
umount ${tempdir}

# 把刚才生成的内存文件系统设备挂到 /root 这个目录下,
mount -o noatime /dev/${device} /root

# 至此,/root目录下的文件与光盘上的/root目录已经没有关系了,而且系统当前的 /root 目录是可读写的。
上述代码是一个典型的建立内存文件系统的过程,其中用到了以下几个工具程序:

    a、mdconfig -a -t malloc -o compress -s ${rootsize) 参数t指定的内存磁盘类型,参数o指定一些选项,这里指定压缩,参数s,指定的内存磁盘的大小,单位字节。这个命令行运行后,就可以在内存中利用 malloc方式生成指定参数的内存磁盘了。

    b、bsdlabel -w ${device} auto ,bsdlabel这个命令行自动写卷标到内存磁盘。


    c、newfs