Unix/Linux编程:多个文件系统
其他的系统又是如何怎么做的
一个Unix系统有两个磁盘或者分区将会如何?现在已经知道,用一些简单的抽象能够将一个单一的分区组织成一颗目录树。但是如果有两个分区,需要两颗独立的树吗? 其他的系统又是如何怎么做的呢?有些操作系统将盘符分配给每个磁盘或者分区,并将字母或者名字作为一个文件全路径的一部分。另一种做法是,有些系统统一给所有的磁盘分配块的编号以创建一个虚拟的单一磁盘。 Unix使用第三种方法。每个分区有自己的文件系统树。当计算机上有多于一个的文件系统时,Unix提供一种方法将这些属整合成一颗更大的树: 也就是说用户看到的是一颗完好的目录树,但是实际上有两棵树,一个在磁盘1上,一个在磁盘2上。每个库都有一个根目录。一个文件系统被命名为根文件系统。这棵树的顶端是整棵树的真正的跟。另一个文件系统则被附加到根文件系统的某个子目录上。在内部,内核在根文件系统将一个目录作为指针,指向另一个文件系统的跟,这样两个文件系统就联系起来了。 装载点 在Unix中,装载文件系统(to mount a file system)是指将它嵌入到已有的系统以获得某些支持,子树的根目录被嵌入到根文件系统的一个目录中,子树所在的目录被称为第二个系统的装载点(mount point) 命令mount列出当前所挂载的文件系统以及他们的挂载点: Unix允许不同类型的文件系统被装载到根文件系统。 多重i-节点号和设备交叉链接 将不同文件系统合成一棵树的问题在于:不同的磁盘可能含有相同的i-节点号。这个情况怎么区分呢? 另外,如何从不同的文件系统生成指向同一个文件的链接?这一点是无法做到的,文件以数据块的集合和一个i-节点的形式出现在磁盘上,目录中的链接会指向那个i-节点。如果一个磁盘上的链接指向另一个磁盘的i-节点将会发生什么事情?如果另一个磁盘未被挂载,文件就会不存在-------------因此,link拒绝创建跨越设备的链接unix文件系统,rename拒绝在不同的文件系统间进行i-节点号的转移 符号链接 硬链接是将目录链接到树的指针,硬链接同时也是将文件名和文件本身链接起来的指针。 硬链接不能指向其他系统中的i-节点,即使根也不能生成到目录的链接。而符号链接解决了这个问题 符号链接通过名字引用文件,而不是i-节点号。 符号链接可能跨文件系统,因为它们并不存储原始文件的i-节点。符号链接也可以指向目录,因为它们与将文件系统联系在一起的真正链接不同。 系统调用symlink用于创建一个符号链接,readlink()用于获取原始文件的名字。lstat()用户获取原始文件的信息 总结 (编辑:成都站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |