网络文件系统(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 ...
随机推荐
- iptables的增删改查
iptables是linux系统自带的防火墙,功能强大,学习起来需要一段时间,下面是一些习iptables的时候的记录.如果iptables不熟悉的话可以用apf,是一款基于iptables的防火墙, ...
- mysql索引及优化
索引; 2.索引入门对于任何DBMS,索引都是进行优化的最主要的因素.对于少量的数据,没有合适的索引影响不是很大,但是,当随着数据量的增加,性能会急剧下降.如果对多列进行索引(组合索引),列的顺序非常 ...
- 多线程系列之四:Guarded Suspension 模式
一,什么是Guarded Suspension模式如果执行现在的处理会造成问题,就让执行处理的线程等待.这种模式通过让线程等待来保证实例的安全性 二,实现一个简单的线程间通信的例子 一个线程(Clie ...
- Codeforces Round #546 (Div. 2)
http://codeforces.com/contest/1136 A #include <bits/stdc++.h> using namespace std; ; int N, K; ...
- 数组建 BST
#include <bits/stdc++.h> using namespace std; const int maxn = 1e5 + 10; int N, root = 1; int ...
- Angular MVC
<!DOCTYPE html><html ng-app="myApp"><head lang="en"> <meta ...
- 转《在浏览器中使用tensorflow.js进行人脸识别的JavaScript API》
作者 | Vincent Mühle 编译 | 姗姗 出品 | 人工智能头条(公众号ID:AI_Thinker) [导读]随着深度学习方法的应用,浏览器调用人脸识别技术已经得到了更广泛的应用与提升.在 ...
- Python memecache
memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载,故常用来做数据库缓存.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态 ...
- 十一、ASP.NET Boilerplate
一.ASP.NET Boilerplate 实体是 DDD(领域驱动设计)的核心概念之一.Eric Evans 是这样描述的“很多对象不是通过它们的属性定义的,而是通过一连串的连续性事件和标识定义的” ...
- CSAW 2016:Rock-100
ELF文件 拖进ida 震惊: 这一堆堆都是什么神仙函数呀!! f5看一下伪代码 可以看出来 其实看起来函数很多 但是真正管用的函数也就那么几个 如果sub_4017E6的值是0 那么就会输出flag ...