技术编程|低调的 Linux 文件系统家族( 九 )
?
然而 , Linux 在一些方面上对这个想法进行了扩充 。 它的基本概念是为系统中的每个进程在 /proc 中创建一个目录 。 目录的名字就是进程 PID , 以十进制数进行表示 。 例如 ,/proc/1024 就是一个进程号为 1024 的目录 。 在该目录下是进程信息相关的文件 , 比如进程的命令行、环境变量和信号掩码等 。 事实上 , 这些文件在磁盘上并不存在磁盘中 。 当需要这些信息的时候 , 系统会按需从进程中读取 , 并以标准格式返回给用户 。
许多 Linux 扩展与 /proc 中的其他文件和目录有关 。 它们包含各种各样的关于 CPU、磁盘分区、设备、中断向量、内核计数器、文件系统、已加载模块等信息 。 非特权用户可以读取很多这样的信息 , 于是就可以通过一种安全的方式了解系统情况 。
NFS 网络文件系统
从一开始 , 网络就在 Linux 中扮演了很重要的作用 。 下面我们会探讨一下 NFS(Network File System) 网络文件系统 , 它在现代 Linux 操作系统的作用是将不同计算机上的不同文件系统链接成一个逻辑整体 。
NFS 架构
NFS 最基本的思想是允许任意选定的一些 客户端 和 服务器 共享一个公共文件系统 。 在许多情况下 , 所有的客户端和服务器都会在同一个 LAN(Local Area Network) 局域网内共享 , 但是这并不是必须的 。 也可能是下面这样的情况:如果客户端和服务器距离较远 , 那么它们也可以在广域网上运行 。 客户端可以是服务器 , 服务器可以是客户端 , 但是为了简单起见 , 我们说的客户端就是消费服务 , 而服务器就是提供服务的角度来聊 。
每一个 NFS 服务都会导出一个或者多个目录供远程客户端访问 。 当一个目录可用时 , 它的所有子目录也可用 。 因此 , 通常整个目录树都会作为一个整体导出 。 服务器导出的目录列表会用一个文件来维护 , 这个文件是 /etc/exports, 当服务器启动后 , 这些目录可以自动的被导出 。 客户端通过挂载这些导出的目录来访问它们 。 当一个客户端挂载了一个远程目录 , 这个目录就成为客户端目录层次的一部分 , 如下图所示 。
本文插图
在这个示例中 , 一号客户机挂载到服务器的 bin 目录下 , 因此它现在可以使用 shell 访问 /bin/cat 或者其他任何一个目录 。 同样 , 客户机 1 也可以挂载到 二号服务器上从而访问 /usr/local/projects/proj1 或者其他目录 。 二号客户机同样可以挂载到二号服务器上 , 访问路径是 /mnt/projects/proj2 。
从上面可以看到 , 由于不同的客户端将文件挂载到各自目录树的不同位置 , 同一个文件在不同的客户端有不同的访问路径和不同的名字 。 挂载点一般通常在客户端本地 , 服务器不知道任何一个挂载点的存在 。
NFS 协议
由于 NFS 的协议之一是支持 异构 系统 , 客户端和服务器可能在不同的硬件上运行不同的操作系统 , 因此有必要在服务器和客户端之间进行接口定义 。 这样才能让任何写一个新客户端能够和现有的服务器一起正常工作 , 反之亦然 。
NFS 就通过定义两个客户端 - 服务器协议从而实现了这个目标 。 协议就是客户端发送给服务器的一连串的请求 , 以及服务器发送回客户端的相应答复 。
第一个 NFS 协议是处理挂载 。 客户端可以向服务器发送路径名并且请求服务器是否能够将服务器的目录挂载到自己目录层次上 。 因为服务器不关心挂载到哪里 , 因此请求不会包含挂载地址 。 如果路径名是合法的并且指定的目录已经被导出 , 那么服务器会将文件 句柄 返回给客户端 。
文件句柄包含唯一标识文件系统类型 , 磁盘 , 目录的i节点号和安全性信息的字段 。
?
随后调用读取和写入已安装目录或其任何子目录中的文件 , 都将使用文件句柄 。
推荐阅读
- 电池技术,相机发烧|防爆相机多少钱能买到?
- 行业互联网|深圳第22届高交会闭幕:一大批新技术新成果集中亮相
- 电池技术|动能转换看烟台|有锂电池的地方就有创为
- 行业互联网|2020十大新兴技术揭晓!每一项都可能颠覆我们的生活
- 行业互联网|英国运输技术论坛发布网络安全标准和指南摘要
- 钉科技|“选择性过滤”太难?方太“死磕”8年突破净水技术
- 中国新闻网|告别各自为营,梧桐车联宣布开放系统“技术底座”
- 腾讯|腾讯举办科学脱口秀X-Talk,聚焦人工智能、基因编辑等前沿技术
- |「推仔说新闻」NVIDIA曝光CPU+GPU加速技术 支持两家处理器
- 产业|清华教授魏少军:信息技术产业是全球GDP增长的主要动力
