Linux是目前蛮热门的一个操作系统很多人都知道它很是免费的而且它也很稳定更重要的是它不会出现蓝色画面可是你知道吗? Linux所支持的档案系统高达十几个除了为它量身打造的Ext之外它还支持了MinixFATVFATNFSNTFS…等等有没有想过它是怎么做到使得可以同时支持十多个档案系统呢? 没错就是VFS也就是这篇文章的重点在这篇文章里我会跟各位介绍Linux档案系统的结构VFS所扮演的角色 Linux档案系统结构 图 Linux的档案系统在外型上其实跟UNIX档案系统是一样的它是一个反转过来的树最上层是系统的根目录也就是/系统根目录底下可以是目录也可以是档案目录里也可以包含目录档案等如此就形成一个反转过来的树我们知道在Windows如果你有二个partition一个叫C另一个叫D当你要到D这个partition时只要打D:就可以了但是在Linux里可不是这样要去读取另一个partition的资料必须要经由mount的动作像 mount t ext /dev/hda /mnt 就会将硬盘第三个partition挂在/mnt这个目录底下Mount完之后/mnt原本的内容会看不到只会看到hda里的内容其中/mnt我们称为hda的mount point而/mnt这个目录则是被hda所cover经过mount以后我们就可以经由/mnt去读取hda的内容就好象hda的内容本来就放在/mnt底下一样整个过程如图所示 图(a)是原本的档案结构图(b)则是hda这个partition的内容将hda mount到/mnt之后整个档案系统就变成图(c)的样子不管如何Linux会保持其档案系统为一个tree的形状这样mount下去我们很容易可以推想到从根目录开始的这个tree很有可能包含好几种的档案系统可能挂在/mnt上的是Ext档案系统挂在/home上的是FAT而挂在/cdrom上的则是iso档案系统我们知道当使用者去读取这些目录里的内容时他本身是不用去管这个目录挂的档案系统是什么基本使用者也不会感到有什么不同而就programmer的观点来看我们也不会说去读/mnt里的档案和去读/home里的档案要下不同的参数Linux是怎么做到这一点的呢? 它就是利用VFS来做到的 |