FBWF 使XP享有强大的文件保护(内存缓冲)能力,ubuntu下该功能实现极其简单

不同视角、不同观点、深度探讨,禁止人品和道德攻击
头像
cat650
帖子: 386
注册时间: 2009-05-18 13:51

FBWF 使XP享有强大的文件保护(内存缓冲)能力,ubuntu下该功能实现极其简单

#1

帖子 cat650 » 2009-09-27 14:22

FBWF是微软在Windows XP Embedded FP2007及以后版本的XPE开发工具中推出的最新写保护技术。在FBWF开启的状态下,如果有写入操作,FBWF将重定向写操作到内存上的一个区域中,我们通常称之为覆盖层。覆盖层类似于原始磁盘的一个投影,对原始磁盘做的任何写操作都将映射到覆盖层中,而我们看到的最终文件内容则是原始磁盘和覆盖层的总和。当覆盖层被删除的时候,例如重新启动计算机,原始磁盘上的数据将保持不变。
FBWF和EWF技术都是以写入过滤为目的的磁盘和文件保护技术。所不同的是EWF保护的是某一个或者某几个磁盘分区,它可操作的最小单位是磁盘分区。而 FBWF保护的最小单位则是文件,也就是说我们可以设置一个磁盘分区上的某一个或者某几个文件夹可以写入,而该磁盘分区上的其他文件夹则是只读状态。在大多数情况下,FBWF由于其灵活性,是更好的选择。然而,只有EWF能够完全的支持NTFS文件格式
最早接触EWF,实现c盘的覆盖保护(重启后一切复原)。当然最吸引我的是,所有对c盘的写操作都是在内存中进行。对于内存很大的机子,那就意味着上网所有网页、多媒体都是在内存中(没有硬盘碎片、内存速度>硬盘)缓冲。使用P2P技术(不停下载、不停上传的下载方式,如迅雷、电骡、所有网络电视,如: PPS、QVOD……)的软件,特别是电影一类没有保存价值的数据,从此不再伤害硬盘了(P2P以前曾称之为“硬盘终结者”,因为频繁读写操作会提前结束硬盘寿命)。所有这些数据是不写入硬盘的,也就是说你复制、删除十万次文件,对硬盘也没损伤。
但是EWF有内存泄露的问题(随操作内存无法释放,最终导致内存耗尽--死机)
因为EWF是基于扇区的,把写入扇区的数据写入内存。但文件系统的写入是有一定的随机性的,也就是说,两次写入的数据不一定是在同一个扇区。比较直观的就是,把一个100M的文件拷进来,那么EWF的覆盖内存就会占用掉100M。当你把这个文删掉,覆盖内存还是占用100M。当再把这个文拷一次的话,覆盖内存占用就会变成200。(晕)而基于文件的FBWF,拷进去的时候是100,删了之后就变成0了,再拷进去,还是100.
警告:FBWF在多台机器测试。结果有可能出现“无法读取……”,数据缓冲错误等。估计可能是bug,对内存管理依然有问题。或者是作者编译问题,网络上的都来源于同一作者。如果您的机子出现类似问题,请卸载该软件。
所以,选择了Linux因为其内存管理机制很好。
所有调用到内存的数据直到内存不足才开始释放,可以高效的利用内存。比如启动firefox第一次很慢,因为要从硬盘读取。可是以后再次启动firefox时,由于内存还保存有数据,直接使用,速度快得多了。(PS:微软据说没法很好的回收内存,所以程序结束,内存马上释放。再次启动软件依然慢如蜗牛。所以它的服务器卖的很不好,你想,服务器平均每小时可能同一个程序被开启关闭N次,微软的硬盘要多坚强才能应付)
微软为了弥补软件启动特慢(特别是与linux比),在vista系统中开发了内存预读表存于SD卡。我试过,除了会缩短SD卡寿命,效果不大。

今日偶然发现 FBWF,使我想提问题。为什么ubuntu没有开发 覆盖层,或者影子系统。让我们能全面保护自己的系统。
虽然linux安全机制很好,linux病毒很少。可是linux菜鸟很多,很多涉及sudo ;sudu su的操作时刻危及系统。
如我为了了解内存使用时间参数,重做了两次系统(系统莫名不稳定)。如果有保护机制,那我不仅可以随意测试系统,也可随意测试软件(有些软件好安不好卸,比如wine的附加库文件)。
对于视频缓冲、下载数据缓冲还是用内存好一点。
还好firefox可以只使用内存来上网(关闭硬盘缓冲),要不真想回xp了
ubuntu9.04已经使用上这个文件系统了。
代码:
df -h
您会看到
引用:
tmpfs 1.9G 696K 1.9G 1% /dev/shm
类似的信息,说明 /dev/shm 已经被虚拟到内存中。对这个文件夹的所有操作都是在内存中进行,换句话:对这个文件夹的所有操作将不会真实的写到硬盘中去。对于没有价值的缓冲文件(比如pps的缓冲)、下载缓冲,如果全扔到内存中去,那岂不是可以高枕无忧了。
哇哈哈!!来,跟我一起来。很简单的
引用:
介绍 tmpfs
如果我必须一下子说清楚 tmpfs,我会说 tmpfs 就象虚拟磁盘(ramdisk),但不一样。象虚拟磁盘一样,tmpfs 可以使用您的 RAM,但它也可以使用您的交换分区来存储。而且传统的虚拟磁盘是个块设备,并需要一个 mkfs 之类的命令才能真正地使用它,tmpfs 是一个文件系统,而不是块设备;您只是安装它,它就可以使用了。总而言之,这让 tmpfs 成为我有机会遇到的最好的基于 RAM 的文件系统。
tmpfs 和 VM
让我们来看看 tmpfs 更有趣的一些特性吧。正如我前面提到的一样,tmpfs 既可以使用 RAM,也可以使用交换分区。刚开始这看起来可能有点武断,但请记住 tmpfs 也是我们知道的“虚拟内存文件系统”。而且,您可能也知道,Linux 内核的虚拟内存资源同时来源于您的 RAM 和交换分区。内核中的 VM 子系统将这些资源分配到系统中的其它部分,并负责在后台管理这些资源,通常是透明地将 RAM 页移动到交换分区或从交换分区到 RAM 页。
tmpfs 文件系统需要 VM 子系统的页面来存储文件。tmpfs 自己并不知道这些页面是在交换分区还是在 RAM 中;做这种决定是 VM 子系统的工作。tmpfs 文件系统所知道的就是它正在使用某种形式的虚拟内存。
不是块设备
这里是 tmpfs 文件系统另一个有趣的特性。不同于大多数“标准的”文件系统,如 ext3、ext2、XFS、JFS、ReiserFS 和其它一些系统,tmpfs 并不是存在于一个底层块设备上面。因为 tmpfs 是直接建立在 VM 之上的,您用一个简单的 mount 命令就可以创建 tmpfs 文件系统了。
代码:
mount tmpfs /mnt/tmpfs -t tmpfs

执行这个命令之后,一个新的 tmpfs 文件系统就安装在 /mnt/tmpfs,随时可以使用。注意,不需运行 mkfs.tmpfs ;事实上,那是不可能的,因为没有这样的命令存在。在 mount 命令执行之后,文件系统立即就被安装并且可以使用了,类型是 tmpfs 。这和 Linux 虚拟磁盘如何使用大相径庭;标准的 Linux 虚拟磁盘是块设备,所以在使用它们之前必须用您选择的文件系统将其格式化。相反,tmpfs 是一个文件系统。所以,您可以简单地安装它就可以使用了。
Tmpfs 的优势
动态文件系统的大小
您可能想知道我们前面在 /mnt/tmpfs 安装的 tmpfs 文件系统有多大。这个问题的答案有点意外,特别是在和基于磁盘的文件系统比较的时候。/mnt/tmpfs 最初会只有很小的空间,但随着文件的复制和创建,tmpfs 文件系统驱动程序会分配更多的 VM,并按照需求动态地增加文件系统的空间。而且,当 /mnt/tmpfs 中的文件被删除时,tmpfs 文件系统驱动程序会动态地减小文件系统并释放 VM 资源,这样做可以将 VM 返回到循环当中以供系统中其它部分按需要使用。因为 VM 是宝贵的资源,所以您一定不希望任何东西浪费超出它实际所需的 VM,tmpfs 的好处之一就在于这些都是自动处理的。 请参阅 参考资料。
速度
tmpfs 的另一个主要的好处是它闪电般的速度。因为典型的 tmpfs 文件系统会完全驻留在 RAM 中,读写几乎可以是瞬间的。即使用了一些交换分区,性能仍然是卓越的,当更多空闲的 VM 资源可以使用时,这部分 tmpfs 文件系统会被移动到 RAM 中去。让 VM 子系统自动地移动部分 tmpfs 文件系统到交换分区实际上对性能上是 好的,因为这样做可以让 VM 子系统为需要 RAM 的进程释放空间。这一点连同它动态调整大小的能力,比选择使用传统的 RAM 磁盘可以让操作系统有好得多的整体性能和灵活性。
没有持久性
这看起来可能不象是个积极因素,tmpfs 数据在重新启动之后不会保留,因为虚拟内存本质上就是易失的。我想您可能猜到了 tmpfs 被称为“tmpfs”的一个原因,不是吗?然而,这实际上可以是一件好事。它让 tmpfs 成为一个保存您不需保留的数据(如临时文件,可以在 /tmp 中找到,还有 /var 文件系统树的某些部分)的卓越的文件系统。
使用 tmpfs
为了使用 tmpfs,您所需要的就是启用了“Virtual memory file system support(以前是 shm fs)”选项的 2.4 系列内核;这个选项在内核配置选项的“File systems”部分。一旦您有了一个启用了 tmpfs 的内核,您就可以开始安装 tmpfs 文件系统了。其实,在您所有的 2.4 内核中都打开 tmpfs 选项是个好主意,不管您是否计划使用 tmpfs。这是因为您需要内核 tmpfs 支持来使用 POSIX 共享的内存。然而, System V共享的内存不需要内核中有 tmpfs 就 可以工作。注意,您 不需要为了让 POSIX 共享的内存工作而安装 tmpfs 文件系统;您只需要在内核中支持 tmpfs 就可以了。POSIX 共享的内存现在使用得不太多,但这种情况可能会随着时间而改变。

差点忘了说:在ubuntu9.04中,tmpfs的最大分配量被限制了,最大只有实际内存的1/2。这么做是为了防止内存被耗尽引起系统崩溃。所以你尽情使用吧。

使用举例:
对于PPS的缓冲你就可以这么做:
代码:
sudo mount tmpfs /tmp/pps -t tmpfs

内存想被释放,要么把pps文件夹彻底删除,要么卸载
代码:
sudo umount tmpfs /tmp/pps -t tmpfs

让p2p狂读你的缓冲文件吧,一点不伤硬盘噢!! :em04
程序运行产生的临时文件,我觉得tmpfs天生就是为tmp目录设计的=.=| ,如果是用在服务器上更是前途无量,比如squid,网站,之类
那么可以在这些应用的临时目录挂载tmpfs系统
但是服务器级别的应用本菜一窍不通,这里面向desktop用户,说说如何加速/tmp/的读写
(tmp是个特殊的目录,用于存放临时文件。linux会周期性的清空这个文件夹,所以不能存放重要文件)
在2.4以上内核中(汗,现在ubuntu9.04发布时都2.6.28了)您可以使用这样一条命令,但不推荐:),一会再说为什么不推荐
mount tmpfs /tmp -t tmpfs
#之所以不推荐这样做,是因为mount之后/tmp会被立即替换(即:空无一物,直到卸载),如果你有程序有在/tmp中打开的文件(比如socket),会出错,而且每次都要手动挂载,多麻烦=.=
#基于以上原因,最好还是编辑/etc/fstab文件来让系统启动时帮你搞定

推荐方法如下:

sudo gedit /etc/fstab

在最后添加如下内容:

# mount tmpfs in /tmp/ (注释)

tmpfs /tmp tmpfs defaults 0 0

保存,关闭,然后在下次启动时你就用上tmpfs了:)
/tmp分区是我最常拿来解压,编译的目录(不用清理,方便),用tmpfs在这里折腾,就不用看着硬盘灯狂闪了
上次由 cat650 在 2010-01-15 11:50,总共编辑 6 次。
狸花猫的小网站http://cat650.iok.la:650
头像
adagio
论坛版主
帖子: 22110
注册时间: 2008-02-17 23:47
来自: 美丽富饶的那啥星球

Re: FBWF 使XP享有强大的内存缓冲能力(文件保护),这是ubuntu无法具备的

#2

帖子 adagio » 2009-09-27 14:29

看不懂,等楼下说……
明天就换大三八!
——8核CPU、8G内存、8T硬盘……
8卡交火,80寸大屏放8个……
IPv8的光纤要8条……

---------------------------------------------------------------------------------
[图片版]新手当自强(续)FAQ
[新手进阶]挂载、fstab、调整linux分区
[图片版]E17桌面环境配置手把手
头像
32idea
帖子: 1251
注册时间: 2006-12-15 9:32
系统: linux

Re: FBWF 使XP享有强大的内存缓冲能力(文件保护),这是ubuntu无法具备的

#3

帖子 32idea » 2009-09-27 14:58

沙盘或者虚拟转存?

说实话,我也希望找到相似功能的软件,在实机系统上配置安装虚拟或沙盘软件,以最大程度的保护系统。

基于软件保护的沙盘和基于系统保护的虚拟转存,linux应该及时在应用方面跟上。

也许linux下安全形势没有win下那么严峻吧,而且别的办法依然可以有效实现系统和软件的安全保护、备份还原等。

-----------------------
好像之前看到过一个linux软件,可以动态监视系统文件之变化,用户可以随时进行恢复操作,不过这个应该是没有加入虚拟转存方面的技术
onelynx
帖子: 817
注册时间: 2008-11-13 16:03

Re: FBWF 使XP享有强大的文件保护(内存缓冲)能力,这是ubuntu无法具备的

#4

帖子 onelynx » 2009-09-27 15:00

cat650 写了:
FBWF是微软在Windows XP Embedded FP2007及以后版本的XPE开发工具中推出的最新写保护技术。在FBWF开启的状态下,如果有写入操作,FBWF将重定向写操作到内存上的一个区域中,我们通常称之为覆盖层。覆盖层类似于原始磁盘的一个投影,对原始磁盘做的任何写操作都将映射到覆盖层中,而我们看到的最终文件内容则是原始磁盘和覆盖层的总和。当覆盖层被删除的时候,例如重新启动计算机,原始磁盘上的数据将保持不变。
FBWF和EWF技术都是以写入过滤为目的的磁盘和文件保护技术。所不同的是EWF保护的是某一个或者某几个磁盘分区,它可操作的最小单位是磁盘分区。而 FBWF保护的最小单位则是文件,也就是说我们可以设置一个磁盘分区上的某一个或者某几个文件夹可以写入,而该磁盘分区上的其他文件夹则是只读状态。在大多数情况下,FBWF由于其灵活性,是更好的选择。然而,只有EWF能够完全的支持NTFS文件格式
最早接触EWF,实现c盘的覆盖保护(重启后一切复原)。当然最吸引我的是,所有对c盘的写操作都是在内存中进行。对于内存很大的机子,那就意味着上网所有网页、多媒体都是在内存中(没有硬盘碎片、内存速度>硬盘)缓冲。使用P2P技术(不停下载、不停上传的下载方式,如迅雷、电骡、所有网络电视,如: PPS、QVOD……)的软件,特别是电影一类没有保存价值的数据,从此不再伤害硬盘了(P2P以前曾称之为“硬盘终结者”,因为频繁读写操作会提前结束硬盘寿命)。所有这些数据是不写入硬盘的,也就是说你复制、删除十万次文件,对硬盘也没损伤。
但是EWF有内存泄露的问题(随操作内存无法释放,最终导致内存耗尽--死机)
因为EWF是基于扇区的,把写入扇区的数据写入内存。但文件系统的写入是有一定的随机性的,也就是说,两次写入的数据不一定是在同一个扇区。比较直观的就是,把一个100M的文件拷进来,那么EWF的覆盖内存就会占用掉100M。当你把这个文删掉,覆盖内存还是占用100M。当再把这个文拷一次的话,覆盖内存占用就会变成200。(晕)而基于文件的FBWF,拷进去的时候是100,删了之后就变成0了,再拷进去,还是100.
所以,选择了Linux因为其内存管理机制很好。
所有调用到内存的数据直到内存不足才开始释放,可以高效的利用内存。比如启动firefox第一次很慢,因为要从硬盘读取。可是以后再次启动firefox时,由于内存还保存有数据,直接使用,速度快得多了。(PS:微软据说没法很好的回收内存,所以程序结束,内存马上释放。再次启动软件依然慢如蜗牛。所以它的服务器卖的很不好,你想,服务器平均每小时可能同一个程序被开启关闭N次,微软的硬盘要多坚强才能应付)
微软为了弥补软件启动特慢(特别是与linux比),在vista系统中开发了内存预读表存于SD卡。我试过,除了会缩短SD卡寿命,效果不大。

今日偶然发现 FBWF,使我想提问题。为什么ubuntu没有开发 覆盖层,或者影子系统。让我们能全面保护自己的系统。
虽然linux安全机制很好,linux病毒很少。可是linux菜鸟很多,很多涉及sudo ;sudu su的操作时刻危及系统。
如我为了了解内存使用时间参数,重做了两次系统(系统莫名不稳定)。如果有保护机制,那我不仅可以随意测试系统,也可随意测试软件(有些软件好安不好卸,比如wine的附加库文件)。
对于视频缓冲、下载数据缓冲还是用内存好一点。
还好firefox可以只使用内存来上网(关闭硬盘缓冲),要不真想回xp了

FBWF 可能没你想像的那么好,

为什么ubuntu没有开发 覆盖层 ::: 你太抬举ubuntu了,ubuntu只是个做的比较好的打包党
头像
xiooli
帖子: 6956
注册时间: 2007-11-19 21:51
来自: 成都
联系:

Re: FBWF 使XP享有强大的文件保护(内存缓冲)能力,这是ubuntu无法具备的

#5

帖子 xiooli » 2009-09-27 15:02

lz不知道aufs吧。
看看slax等能保存(当然也可选择不能保存数据)的live usb系统,其结合 squashfs和aufs来实现,比那个啥覆盖层先进到哪里去了。
btw:win的覆盖层是否抄袭aufs还不得而知呢。
头像
xiooli
帖子: 6956
注册时间: 2007-11-19 21:51
来自: 成都
联系:

Re: FBWF 使XP享有强大的文件保护(内存缓冲)能力,这是ubuntu无法具备的

#6

帖子 xiooli » 2009-09-27 15:12

这是我自己做的joolix其中的设置将所有对文件系统的写操作定向到内存中的一个initrd启动脚本(准确的说是arch类linux启动时的一个hook),你可以看见用squashfs和aufs是怎样实现那个xp看似很牛x的玩意的。

代码: 全选

# live2 -  live 'hook' for mkinitcpio:
#                 deal with c2r,
#                 mount base system,
#                 set up unioned root filesystem.
#
# Author: xiooli <xioooli@yahoo.com.cn> <http://joolix.com>
#
# This sctipt is part of joolix live OS, it's based on Michael Towers 
# <gradgrind[at]online[dot]de>'s larch3 script.
#
#    joolix is free software; you can redistribute it and/or modify
#    it under the terms of the GNU General Public License as published by
#    the Free Software Foundation; either version 2 of the License, or
#    (at your option) any later version.
#
#    joolix is distributed in the hope that it will be useful,
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
#    GNU General Public License for more details.
#
#    You should have received a copy of the GNU General Public License
#    along with joolix; if not, write to the Free Software Foundation, Inc.,
#    51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
#
#----------------------------------------------------------------------------
# 2009.8.7

# Mount changes block file/partition
# $1 loop device number
# $2 path to changes block file/partition
# $3 path to mount point
# $4 unused loop recoding file (for further losetup deleting)

make_loops ()
{
	local last loops haveloopdir i tmp lastnm nextnm

	if [ -d /dev/loop ]; then
		loops="$(echo /dev/loop/loop*)"
		haveloopdir="y"
	else
		loops="$(echo /dev/loop*)"
		haveloopdir="n"
	fi
	
	last=0
	for i in ${loops}; do
		tmp="$(basename "${i}")"
		tmp="${tmp#*loop}"
		if [ "${tmp}" -gt "${last}" ]; then
			last="${tmp}"
		fi
	done
	
	nextnm="$((${last}+1))"
	i="${nextnm}"
	while [ "${i}" -le "$((${nextnm}+10))" ]; do
		if [ "${haveloopdir}" = "y" ]; then
			/bin/mknod /dev/loop/loop"${i}" b 7 "${i}"
		else
			/bin/mknod /dev/loop"${i}" b 7 "${i}"
		fi
		i=$(($i+1))
	done
}

mount_changes ()
{
	# changes maybe a block file or real partition in ext? format 
	# or a dir in the ext? partition 
	if [ -d "${1}" ]; then
		/bin/mount -o bind "${1}" "${2}" >/dev/null 2>/dev/null
		if [ $? -eq 0 ]; then return 0; fi
	else
		# klibc mount dose not support -o loop, use common mount (renamed as mount1)
		/bin/mount1 -t ext3 -o loop,rw "${1}" "${2}" >/dev/null 2>/dev/null || \
		/bin/mount1 -t ext4 -o loop,rw "${1}" "${2}" >/dev/null 2>/dev/null
		if [ $? -eq 2 ]; then
			make_loops
			/bin/mount1 -t ext3 -o loop,rw "${1}" "${2}" >/dev/null 2>/dev/null || \
			/bin/mount1 -t ext4 -o loop,rw "${1}" "${2}" >/dev/null 2>/dev/null
		fi
	fi
}

run_hook ()
{
    if [ "x${LDEV}" = "x" ]; then
        msg_ " ! ==> sorry, couldn't find boot medium ..."
        break="y"
		break
		return
    fi

    # Path to compressed modules
	apppath="${cdmount}/${DISTRO}/apps"
	appinram="/tfs/apps"
	/bin/mkdir "${appinram}"
	trash="/tfs/trash"
	/bin/mkdir "$trash"
	blockdir="/tfs/block"
	/bin/mkdir "$blockdir"
    # Make union root
	/bin/mkdir /union

    # Boot option copy-to-ram (c2r)
    if [ "${c2r}" = "y" ]; then
        msg_ ":: Copying all the apps to RAM, this will take a while ..."
		apps=""
		apps="$(echo "${apppath}"/*app)"
		for app in ${apps}; do
			cat "${app}" > "${appinram}/$(basename "${app}")"
			state="$?"
			if [ "${state}" -eq 0 ]; then
				msg_ " : ==> copying $(basename "${app}") === [DONE]"
			else
				msg_ " ! ==> copying $(basename "${app}") === [FAIL]"
			fi
		done
        if [ "$state" -ne 0 ]; then
            msg_ " ! ==> sorry, no enough RAM"
            break="y"
            return
        fi
	    # force use of swap (if available)
        :> /tfs/swapon
    elif [ "${swap}" = "y" ]; then
        :> /tfs/swapon
    fi

    msg_ ":: Mounting squashed images"

	if [ ! -d /tfs/mnt ]; then /bin/mkdir /tfs/mnt; fi

	# Looking for apps
	if [ "${c2r}" = "y" -a "$break" != "y" ]; then
		apps=""
		apps="$(echo "${appinram}"/*app)"
	elif [ "${c2r}" != "y" ]; then
		apps=""
		apps="$(echo "${apppath}"/*.app)"
	fi
	if [ "$(/bin/replace "${apps}" "*")" != "${apps}" ]; then
		apps=""
		msg_ " ! ==> no apps found"
		break="y"
		return
	fi
	
	# Mount squashed apps 

	if [ "${break}" != "y" ]; then
		i=0
		for app in ${apps}; do
			mntpoint="/tfs/mnt/$(basename "${app}")"; mntpoint="${mntpoint%.app}"
			/bin/mkdir -p "${mntpoint}"

			/bin/mount1 -r -t squashfs -o loop "${app}" "${mntpoint}" 
			state=$?
			if [ $state -eq 0 ]; then
				msg_ " : ==> mounting $(basename "${app}") === [DONE]"
				layers=":${mntpoint}=rr${layers}"
												
			# If no enough loop devices, then creat some
			elif [ $state -eq 2 ]; then
				make_loops
				/bin/mount1 -r -t squashfs -o loop "${app}" "${mntpoint}"
				if [ $? -eq 0 ]; then
					msg_ " : ==> mounting ${app} === [DONE]"
					layers=":${mntpoint}=rr${layers}"
				else
					msg_ " ! ==> mounting ${app} === [FAIL]"
				fi
			else
				msg_ " ! ==> mounting $(basename "${app}") === [FAIL]"
			fi
		done
	fi

	# Make stuff in 'system' available by providing the loader and
	# library path
	ldli=$( cd /tfs/mnt; echo lib/ld-linux*.so.2 )
	if [ ! -e ${ldli} ]; then /bin/ln -s /tfs/mnt/${ldli} /${ldli}; fi
	export LD_LIBRARY_PATH=/tfs/mnt/lib:/tfs/mnt/usr/lib
	
    # Setup changes file/device for data keeping
    msg_ ":: Initializing writable layer for union (changes)"

	/bin/mkdir -p /tfs/changes
	/bin/mkdir -p /tfs/datainram
	if [ "${changes}" ];then
		chgs="${cdmount}/${changes}"
		mount_changes "${chgs}" "/tfs/changes"
		if [ $? -eq 0 ]; then
			msg_ ":: Testing if $chgs writable ..."
			echo "test" > /tfs/changes/.writetest 2>/dev/null
			if [ $? -eq 0 ]; then
				msg_ ":: Testing for posix compatibility ..."
				/bin/ln -sf /tfs/changes/.writetest /tfs/changes/.posixtest
				if [ $? -eq 0 ]; then
					msg_ " : ==> all tests passed, use changes $chgs"
					/bin/mount -o bind /tfs/changes /tfs/datainram
				else
					/bin/umount /tfs/changes
					msg_ " ! ==> not posix compatible, use ram only"
				fi
			else
				/bin/umount /tfs/changes
				msg_ " ! ==> not writable, use ram only"
			fi
		else
			msg_ " ! ==> no changes file found, use ram only"
		fi
	fi

    msg_ ":: Setting up union file system ..."
	
	if [ "${layers}" != ":" ]; then
		layers="br:/tfs/datainram=rw${layers}"
		/bin/mount -t aufs -o "${layers}" aufs /union
		if [ $? -eq 0 ]; then
			msg_ " : ==> mounting aufs === [DONE]"
		else
			msg_ " ! ===> mounting aufs === [FAIL]"
		fi
	else
		msg_ " ! ==> can not set-up union file system"
		break="y"
	fi

	# Creat some essential devs
	/bin/mkdir /union/dev 2>/dev/null
    /bin/mknod /union/dev/console c 5 1 2>/dev/null
    /bin/mknod /union/dev/null c 1 3 2>/dev/null
    /bin/mknod /union/dev/zero c 1 5 2>/dev/null

    # Remember the boot device
    echo "${LDEV}" > /tfs/bootdevice
	
	# Make the tmpfs stuff accessible within the union
	/bin/mkdir -p /union/apps
	/bin/mkdir -p /union/mnt/livesys
	/bin/mount -o bind /tfs /union/mnt/livesys

    if [ "${c2r}" = "y" ]; then
        # Set flag to inform system of copy-to-ram
        :> /tfs/c2r
        # Unmount boot device
        /bin/umount ${cdmount}
		# bind app dir with /union/apps so we can find them in /apps after login in.
		/bin/mount -o bind "${appinram}" /union/apps
	else
		/bin/mkdir -p /union/media/medium
		/bin/mount -o bind "${cdmount}" /union/media/medium
		# make /union/apps writable. apps shoud not stored inside the union, or you can not 
		# activate them after the system booted.
		# test if /union/media/medium writable
		:> "${cdmount}/.writetest"
		if [ $? -eq 0 ]; then
			# if writable, then when adding apps we actually write them
			# in ${cdmount}/${DISTRO}/apps/
			/bin/mount -o bind "${cdmount}/${DISTRO}/apps/" /union/apps
			/bin/mount -o bind /union/apps /union/mnt/livesys/apps
		else
			# if not writable, adding apps in ram
			/bin/mount -t aufs -o "br:${appinram}=rw:${cdmount}/${DISTRO}/apps/" aufs /union/apps
		fi
    fi

	for dir in $(echo /tfs/mnt/*); do
		[ -d "$dir" ] || continue
		appdir="/union/mnt/livesys/mnt/$(basename "$dir")"
		[ -d "${appdir}" ] || /bin/mkdir -p "${appdir}"
		/bin/mount -o bind "$dir" "${appdir}"
	done

	if [ -f /tfs/changes/.posixtest ]; then
		/bin/mount -o bind /tfs/datainram /union/mnt/livesys/changes
	else
		/bin/mount -o bind /tfs/datainram /union/mnt/livesys/datainram
	fi

	# clear garbages
	/bin/mv /tfs/changes/.writetest "$trash" 2>/dev/null
	/bin/mv /tfs/changes/.posixtest "$trash" 2>/dev/null
	/bin/mv "${cdmount}/.writetest" "$trash" 2>/dev/null
    
	msg_ ":: End of live system set-up"
	
    # Now some tweaks to alter 'init' actions from non-larch hooks, etc.
    # Override rootdelay from usb hook
    if [ "x${rootdelay}" = "x"  ]; then
        # To avoid spurious udevd pid numbers
        export rootdelay=1
    else
        # Allow adjustment via boot option
        export rootdelay="${rootdelay}"
    fi
    # root must be set to something or other, even though the live system doesn't
    # need it ...
    export root="/dev/loop0"
}

#######
# The actual root switch occurs later, when 'init' execs 'kinit'.
# I handle this by overwriting the 'kinit' binary with my own script.
# This will unmount dev, sys and proc and then exec run-init.
#######
蔡万钊
帖子: 420
注册时间: 2009-02-01 19:41
联系:

Re: FBWF 使XP享有强大的文件保护(内存缓冲)能力,这是ubuntu无法具备的

#8

帖子 蔡万钊 » 2009-09-28 0:15

如果用过 EeePC 就知道 ebuntu 早用这个技术了。 MD 害我总是不知道为什么白更新 ......

后来才发现的 .......
头像
wangdu2002
帖子: 13284
注册时间: 2008-12-13 19:39
来自: 物华天宝人杰地灵

Re: FBWF 使XP享有强大的文件保护(内存缓冲)能力,这是ubuntu无法具备的

#9

帖子 wangdu2002 » 2009-09-28 0:20

内存大的使用/tmpfs应该能部分满足要求。
行到水穷处,坐看云起时。
海内生明月,天涯共此夕。
--------------------吾本独!
头像
hubert_star
论坛版主
帖子: 5373
注册时间: 2007-10-29 22:12
系统: OSX 10.9 + Ub 1304
来自: 江苏南京

Re: FBWF 使XP享有强大的文件保护(内存缓冲)能力,这是ubuntu无法具备的

#10

帖子 hubert_star » 2009-09-28 0:24

其实,楼主

如果你用livecd的话我怀疑你是不是在抱怨为什么数据没有写入到光盘上,关机就丢了
佛经说,人有八苦: 生、老、病、死、求不得、怨憎、爱别离、五阴盛 故我苦!
圣经说,人有七罪: 饕餮、贪婪、懒惰、淫欲、傲慢、嫉妒和暴怒  故我有罪!

我这篇帖子里面没有任何攻击我们伟大的中华人民共和国政府和任劳任怨的人民公仆(和本论坛高素质的版主)的文字和含义;

特此声明!

有些事,我们明知道是错的,也要去坚持,因为不甘心;有些人,我们明知道是爱的,也要去放弃,因为没结局;有时候,我们明知道没路了,却还在前行,因为习惯了。

欢迎来我的新浪微博@me
头像
cat650
帖子: 386
注册时间: 2009-05-18 13:51

Re: FBWF 使XP享有强大的文件保护(内存缓冲)能力,这是ubuntu无法具备的

#11

帖子 cat650 » 2009-09-28 17:09

所有在 tmpfs 上储存的资料在理论上都是暂时借放的,那也表示说,档案不会建立在硬盘上面。一旦重新开机,所有在 tmpfs 里面的资料都对消失不见。理论上,内存使用量会随着 tmpfs 的使用而时有增长或消减。
受教了,看来在论坛还是有高人哦。
在论坛又学到新东西了, :em05
狸花猫的小网站http://cat650.iok.la:650
头像
BigSnake.NET
帖子: 12522
注册时间: 2006-07-02 11:16
来自: 廣州
联系:

Re: FBWF 使XP享有强大的文件保护(内存缓冲)能力,这是ubuntu无法具备的

#12

帖子 BigSnake.NET » 2009-09-28 17:48

^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。
头像
xiooli
帖子: 6956
注册时间: 2007-11-19 21:51
来自: 成都
联系:

Re: FBWF 使XP享有强大的文件保护(内存缓冲)能力,这是ubuntu无法具备的

#13

帖子 xiooli » 2009-09-28 17:55

BigSnake.NET 写了:http://en.wikipedia.org/wiki/UnionFS

有人用这个做包管理
http://www.linuxfromscratch.org/hints/d ... g_trip.txt
真bt .....
unionfs 过时了,现在都用 aufs,其实,那个包管理使用 unionfs 和 chroot,我的 joolix 里面生成 squashfs 压缩软件包的脚本也是用类似的方法,使用 aufs,squashfs 和 chroot 来运作的。
头像
lll9p
帖子: 1806
注册时间: 2007-07-18 18:56
联系:

Re: FBWF 使XP享有强大的文件保护(内存缓冲)能力,这是ubuntu无法具备的

#14

帖子 lll9p » 2009-09-29 9:23

改了title吧,linux下有很多相似的技术
我的小站imtho.com
3n6uv7 2vw <---- 332 ?语星火是么什
头像
bbeikke
帖子: 880
注册时间: 2008-10-14 21:54

Re: FBWF 使XP享有强大的文件保护(内存缓冲)能力,ubuntu下该功能实现极其简单

#15

帖子 bbeikke » 2009-10-08 11:28

开始看楼主文章的时候,还没有tmpfs的介绍。。。
看文章之前还不知道这个东西,特地去试了下,FBWF一点都不好用,
改个保护目录都需要重启系统,还不如RamDisk好用。
地狱可以想象,天堂却无法描述。
回复