网络文件系统(NFS)简介
网络文件系统(Network File System, NFS)是一种分布式文件系统协议,最初由Sun Microsystems公司开发,并于1984年发布。其功能旨在允许客户端主机可以像访问本地存储一样通过网络访问服务器端文件。NFS和其他许多协议一样,是基于开放网络运算远程过程调用(Open Network Computing Remote Procedure Call, ONC RPC)协议之上的。它是一个开放、标准的RFC(Request For Comments, 请求意见稿)协议,任何人或组织都可以依据标准实现它。
NFS版本包括:(1). NFSv1: 只在SUN公司内部用作实验目的;(2). NFSv2: RFC 1094,1989年3月发布;(3). NFSv3: RFC 1813,1995年6月发布;(4). NFSv4: RFC 3010,2000年12月发布; (5). NFSv4.1: RFC 5661,2010年1月; (6). NFSv4.2: RFC 7862,2016年11月发布。
NFS通常用在Unix操作系统上和其他类Unix的操作系统。同时在其他一些操作系统也提供了NFS实现,例如Mac OS、OpenVMS、Microsoft Windows。
NFS的启动需要透过所谓的远程过程调用(RPC),也就是说,我们并不是只要启动NFS就好了,还需要启动RPC这个服务才行。
NFS最大的功能就是可以透过网络,让不同的机器、不同的操作系统、可以彼此分享个别的档案(share files)。所以,你也可以简单地将它看做是一个文件服务器(file server)。这个NFS服务器可以让你的PC来将网络远程的NFS服务器分享的目录,挂载到本地端的机器当中,在本地端的机器看起来,那个远程主机的目录就好像是自己的一个磁盘分区槽一样(partition),使用上相当的便利。如下图所示:当我们的NFS服务器设定好了分享出来的/home/sharefile这个目录后,其它的NFS客户端就可以将这个目录挂载到自己系统上面的某个挂载点(挂载点可以自定义),例如下图所示中的NFS client1与NFS client2挂载的目录就不相同。我只要在NFS client1系统中进入/home/data/sharefile内,就可以看到NFS服务器系统内的/home/sharefile目录下的所有数据了(当然,权限要足够)。这个/home/data/sharefile就好像NFS client1自己机器里面的一个partition。只要权限对了,那么你就可以使用cp, cd, mv, rm…等等磁盘或档案相关的指令。
因为NFS支持的功能相当的多,而不同的功能都会使用不同的程序来启动,每启动一个功能就会启用一些端口来传输数据,因此,NFS的功能所对应的端口才没有固定住,而是随机取用一些未被使用的小于1024的埠口来作为传输之用。但如此一来又造成客户端想要连上服务器时的困扰,因为客户端得要知道服务器端的相关埠口才能够联机。此时,我们就得需要RPC的服务。RPC最主要的功能就是在指定每个NFS功能所对应的port number,并且回报给客户端,让客户端可以连接到正确的埠口上去。那RPC又是如何知道每个NFS的埠口呢?这是因为当服务器在启动NFS时会随机取用数个埠口,并主动的向RPC注册,因此RPC可以知道每个埠口对应的NFS功能,然后RPC又是固定使用port 111来监听客户端的需求并回报客户端正确的埠口。要启动NFS之前,RPC就要先启动,否则NFS会无法向RPC注册。另外,RPC若重新启动时,原本注册的数据会不见,因此RPC重新启动后,它管理的所有服务都需要重新启动来重新向RPC注册。
NFS服务器在启动的时候就得要向RPC注册,所以NFS服务器也被称为RPC server之一。 那么NFS服务器主要的任务是进行文件系统的分享,文件系统的分享则与权限有关。 所以NFS服务器启动时至少需要两个daemons ,一个管理客户端是否能够登入的问题,一个管理客户端能够取得的权限。
NFS本身的服务并没有进行身份登入的识别,服务器端会以客户端的使用者UID与GID等身份来尝试读取服务器端的文件系统。
一般来说,NFS的服务仅会对内部网域开放,不会对因特网开放的。然而,如果你有特殊需求的话,那么也可能会跨不同网域。
NFS好处:(1). 节省本地存储空间,将常用的数据存放在一台NFS服务器上且可以通过网络访问,那么本地终端将可以减少自身存储空间的使用;(2). 用户不需要在网络中的每个机器上都建有Home目录,Home目录可以放在NFS服务器上且可以在网络上被访问使用;(3). 一些存储设备如软驱、CDROM和Zip(一种高储存密度的磁盘驱动器与磁盘)等都可以在网络上被别的机器使用,这可以减少整个网络上可移动介质设备的数量。
NFS组成:NFS体系至少有两个主要部分,一台NFS服务器和若干台客户机,如下图所示,客户机通过TCP/IP网络远程访问存放在NFS服务器上的数据。在NFS服务器正式启用前,需要根据实际环境和需求,配置一些NFS参数。
uint8_t MemoryManager::getByte(uint32_t addr) {
if (!this->isAddrExist(addr)) {
dbgprintf("Byte read to invalid addr 0x%x!\n", addr);
return false;
}
uint32_t i = this->www.gaozhuoyiqi.com/ getFirstEntryId(addr);
uint32_t j = this->getSecondEntryId(addr);
uint32_t k = this->getPageOffset(addr);
return this->memory[www.shengyunyule.cn][j][k];
}
关于MemoryManager实现的更多信息,参见src/MemoryManager.cpp。
3.2 可执行文件的装载、初始化
本模拟器的可执行文件加载部分采用了GitHub上的开源库ELFIO(https://github.com/serge1/ELFIO),由于这个库只有头文件,所以导入工程相当容易,相关头文件在include/文件夹下。
使用这个库进行ELF文件加载相当容易
// Read ELF file
ELFIO::elfio reader;
if (!reader.load(elfFile)) {
fprintf(stderr, "Fail to load ELF file %s!\n", elfFile);
return -1;
}
加载ELF文件进内存的代码如下,直接按照ELF文件头的信息将每个数据段拷贝到指定的内存位置即可,唯一需要注意的是文件内数据长度可能小于指定的内存长度,需要用0填充。值得一提的是本模拟器在设计时并未考虑支持32位以上的内存,因为内存占用如此之大的用户程序是比较罕见的,在我们用的测试程序中不会出现这种情况。
void loadElfToMemory(ELFIO::elfio *reader, MemoryManager *memory) {
ELFIO::Elf_Half seg_num = reader-www.wanmeiyuele.cn>segments.size();
for (int i = 0; i < seg_num; ++i) {
const ELFIO::segment *pseg = reader->segments[i];
uint64_t fullmemsz = pseg->get_memory_size();
uint64_t fulladdr = pseg->get_virtual_address();
// Our 32bit simulator cannot handle this
if (fulladdr + fullmemsz > 0xFFFFFFFF) {
dbgprintf(
"ELF address space larger than 32bit! Seg %d has max addr of 0x%lx\n",
i, fulladdr + fullmemsz);
exit(-1);
}
uint32_t filesz = pseg->get_file_size(www.yunshengpt.com);
uint32_t memsz = pseg->get_memory_size(www.hengtongyoule.com);
uint32_t addr = (uint32_t)pseg->get_virtual_address();
for (uint32_t p = addr; p <www.huarenyl.cn addr + memsz; ++p) {
if (!memory->isPageExist(p)) {
memory->addPage(p);
}
if (p < addr + filesz) {
memory->setByte(p, pseg->get_data()[p - addr]);
} else {
memory->setByte(p, 0);
NFS应用:NFS有很多实际应用,下面是比较常见的一些:(1). 多个机器共享一台CDROM或者其它设备,这对于在多台机器中安装软件来说更加便宜跟方便;(2). 在大型网络中,配置一台中心NFS服务器用来防止所有用户的home目录可能会带来便利。这些目录能被输出到网络以便用户不管在哪台工作站上登录,总能得到相同的home目录;(3). 不同客户端可以NFS上观看影视文件,节省本地空间;(4). 在客户端完成的工作数据,可以备份保存到NFS服务器上用户自己的路径下。NFS是运行在应用层的协议,随着NFS多年的发展和改进,NFS既可以用于局域网也可以用于广域网,且与操作系统和硬件无关,可以在不同的计算机或系统上运行。
网络文件系统(NFS)简介的更多相关文章
- Linux下网络文件系统NFS服务搭建易错点总结
一.环境准备: 1 [root@czh ~]# cat /etc/redhat-release 2 CentOS release 6.7 (Final) 3 [root@czh ~]# uname - ...
- 网络文件系统nfs文件系统使用(很全面)
一.NFS简介 1.NFS就是Network FileSystem的缩写,它的最大功能就是可以通过网络让不同的机器,不同的操作系统彼此共享文件(sharefiles)——可以通过NFS挂载远程主机的目 ...
- 网络文件系统nfs文件系统使用(比较全面)
一.NFS简介 1.NFS就是Network FileSystem的缩写,它的最大功能就是可以通过网络让不同的机器,不同的操作系统彼此共享文件(sharefiles)——可以通过NFS挂载远程主机的目 ...
- 网络文件系统NFS
NFS介绍 什么是NFS? NFS是Network File System的缩写,即网络文件系统.它的主要功能是通过网络(一般是局域网)让不同的主机系统之间可以共享文件或目录.NFS客户端(一般为应用 ...
- Centos 7网络文件系统nfs服务的安装与配置
实验环境>>>>>>>>> nfs服务端:(nfs-server)192.168.100.2 nfs客户端:(nfs-client)192.168 ...
- Linux网络文件系统NFS详解
什么是文件系统,NFS文件系统又是什么? 简单的说,文件系统就是通过软件对磁盘上的数据进行组织和管理的一种机制,对其的一种封装或透视. 你女朋友拍了美美的暧昧照片,放一个文件夹里发送给了A服务器,当你 ...
- 网络文件系统-NFS
1. 什么是NFS NFS是 Network File System 的缩写,即网络文件系统.一种使用于分散式文件系统的协议,有Sun公司开发,于1984年向外公布.功能是通过网络让不同的机器.不同的 ...
- NFS的安装以及windows/linux挂载linux网络文件系统NFS
1.创建linux的NFS服务端安装centos6.4,关闭防火墙/etc/init.d/iptables status yum install nfs-utils rpcbind [root@lin ...
- 网络文件系统nfs在ubuntu16.04的安装
1.搜索nfs-sudo apt-cache search nfs- 2.安装sudo apt-get install nfs-kernel-server 3.配置:/etc/exports /hom ...
随机推荐
- docker vm 性能优劣
Docker容器与虚拟机区别 - unixfbi.com - 博客园 http://www.cnblogs.com/pangguoping/articles/5515286.html docker与虚 ...
- jenkins 迁移后 提示 反向代理设置有误
jenkins报:反向代理设置有误-布布扣-bubuko.comhttp://www.bubuko.com/infodetail-2038758.html [Linux][Jenkins]系统配置报反 ...
- 三、如何设置npm镜像
一.临时使用 npm --registry https://registry.npm.taobao.org install express 二.永久使用 npm config set registry ...
- day 7-5 守护线程
一. 守护线程 无论是进程还是线程,都遵循:守护进程(线程)会等待主进程(线程)运行完毕后被销毁. 需要强调的是:运行完毕并非终止运行. 1.对主进程来说,运行完毕指的是主进程代码运行完毕. 2.对主 ...
- js中this指向、箭头函数
普通函数:this指向分为4种情况,1. obj.getName();//指向obj2.getName();//非严格模式下,指向window,严格模式下为undefined3. var a = ne ...
- cookie,localStorage和sessionStorage区别
三者的异同 特性 Cookie localStorage sessionStorage 数据的生命期 一般由服务器生成,可设置失效时间.如果在浏览器端生成Cookie,默认是关闭浏览器后失效 除非被清 ...
- java学习之—排序
package test3; public class Sort{ /** * 冒泡排序 * @param array */ public void bubbleSort(int[] array) { ...
- win10远程桌面连接提示身份验证错误,要求的函数不受支持的解决方案
转自https://www.baidu.com/link?url=67JXh4h79mN47mEenuH_ElGkSh9_GdOiY-Xp9Ihw0_mQIZHrPx-HxY3EIm_nTZKPoRZ ...
- python之路--反射
一 . isinstance, type, issubclass isinstance 可以判断该对象是否是XXX家族体系中的(只能往上判断) class Base: pass class Foo(B ...
- python设计模式第十七天【解释器模式】
1.应用场景 (1)解释预先定义的文法 2.代码实现 #!/usr/bin/env python #!_*_ coding:UTF-8 _*_ from abc import ABCMeta, abs ...