用于python的nfs客户端。
libnfs的Python项目详细描述
此模块是一个用于python的nfs客户端。
此项目托管在https://github.com/sahlberg/libnfs python
此模块取决于libnfs库。
在使用此模块之前,必须先安装libnfs。
libnfs可以在https://github.com/sahlberg/libnfs上找到nfs和nfsfh。
nfs表示一个描述装入点的nfs上下文。
nfsfh是实现nfs文件类文件对象的主要类。
license
===
此模块在lgpl版本2.1下分发。
请参阅复制以获取此许可证的全文。
context full在context full模式下,首先需要装载nfs共享并创建nfs上下文,然后才能访问任何文件。然后,此nfs上下文将用于
将来对该装入点中文件的所有访问。
此模式的好处是,由于执行实际的nfs装入非常昂贵,因此只需执行一次,在创建nfs对象时
,并且可以对以后要访问的任何文件重新使用装载。
在此模式下,绝对路径相对于nfs对象的装载点。
示例:
--
import libnfs
nfs=libnfs.nfs('nfs://127.0.0.1/data/tmp/')
a=nfs.open('/foo test',,mode='w+')
a.write(“test string”)
a.close()
print nfs.open('/foo test',mode='r').read()
context free access
=====
此模块还提供了一种模式,您可以直接打开和访问类似文件的对象,而无需首先实例化nfs装载。
在这种情况下,类似文件的对象将在文件类对象的生命周期内,在内部创建一个nfs mount
函数。
在此模式下,使用指向文件的nfs url
调用libnfs.open()函数示例:
--
import libnfs
a=libnfs.open('nfs://127.0.0.1/data/tmp/foo test',mode='w+')
a.write(“测试字符串”)
a.close()
print libnfs.open('nfs://127.0.0.1/data/tmp/foo test',mode='r').read()
首先,我们创建并写入文件,第二次读取并打印文件。然而,这既昂贵又可能性能不佳。
原因是,当我们使用类似于无上下文文件的对象时,我们必须为每个对象在内部创建一个nfs装载,这很昂贵。
基本上,在创建nfs装载时,nfs协议要求我们执行以下操作/往返:
发送portmapper getport命令以获取mount daemon在哪个端口上运行。
关闭TCP连接。
4、建立到mount daemon的TCP连接
5、发送mount null命令以验证mount daemon是否活动。
6、发送mount mnt命令以获取装入点的nfs文件句柄。
关闭TCP连接。
7,建立到服务器上端口映射器(TCP端口111)的TCP连接。
8,发送一个端口映射器空命令,以验证我们是否连接到真正的端口映射器,并且它是否处于活动状态。
9,发送portmapper getport命令以获取守护进程
正在运行的端口。
关闭TCP连接。
10、建立到nfs守护进程的TCP连接
11、发送nfs空命令以验证nfs守护进程是否活动。
12、发送nfs fsinfo命令以获取有关
文件系统的一些基本信息我们只是已装入。
13,发送nfs getattr命令以获取有关此装入的根目录的一些信息。
使用无上下文句柄时,我们必须在每次创建一个新的类文件对象时执行这些步骤,这会使其非常昂贵。
缺点是每个上下文无关的句柄都必须在内部执行自己的nfs挂载。如果您计划访问多个/多个文件,则应考虑使用上下文完整句柄。
此项目托管在https://github.com/sahlberg/libnfs python
此模块取决于libnfs库。
在使用此模块之前,必须先安装libnfs。
libnfs可以在https://github.com/sahlberg/libnfs上找到nfs和nfsfh。
nfs表示一个描述装入点的nfs上下文。
nfsfh是实现nfs文件类文件对象的主要类。
license
===
此模块在lgpl版本2.1下分发。
请参阅复制以获取此许可证的全文。
context full在context full模式下,首先需要装载nfs共享并创建nfs上下文,然后才能访问任何文件。然后,此nfs上下文将用于
将来对该装入点中文件的所有访问。
此模式的好处是,由于执行实际的nfs装入非常昂贵,因此只需执行一次,在创建nfs对象时
,并且可以对以后要访问的任何文件重新使用装载。
在此模式下,绝对路径相对于nfs对象的装载点。
示例:
--
import libnfs
nfs=libnfs.nfs('nfs://127.0.0.1/data/tmp/')
a=nfs.open('/foo test',,mode='w+')
a.write(“test string”)
a.close()
print nfs.open('/foo test',mode='r').read()
context free access
=====
此模块还提供了一种模式,您可以直接打开和访问类似文件的对象,而无需首先实例化nfs装载。
在这种情况下,类似文件的对象将在文件类对象的生命周期内,在内部创建一个nfs mount
函数。
在此模式下,使用指向文件的nfs url
调用libnfs.open()函数示例:
--
import libnfs
a=libnfs.open('nfs://127.0.0.1/data/tmp/foo test',mode='w+')
a.write(“测试字符串”)
a.close()
print libnfs.open('nfs://127.0.0.1/data/tmp/foo test',mode='r').read()
首先,我们创建并写入文件,第二次读取并打印文件。然而,这既昂贵又可能性能不佳。
原因是,当我们使用类似于无上下文文件的对象时,我们必须为每个对象在内部创建一个nfs装载,这很昂贵。
基本上,在创建nfs装载时,nfs协议要求我们执行以下操作/往返:
发送portmapper getport命令以获取mount daemon在哪个端口上运行。
关闭TCP连接。
4、建立到mount daemon的TCP连接
5、发送mount null命令以验证mount daemon是否活动。
6、发送mount mnt命令以获取装入点的nfs文件句柄。
关闭TCP连接。
7,建立到服务器上端口映射器(TCP端口111)的TCP连接。
8,发送一个端口映射器空命令,以验证我们是否连接到真正的端口映射器,并且它是否处于活动状态。
9,发送portmapper getport命令以获取守护进程
正在运行的端口。
关闭TCP连接。
10、建立到nfs守护进程的TCP连接
11、发送nfs空命令以验证nfs守护进程是否活动。
12、发送nfs fsinfo命令以获取有关
文件系统的一些基本信息我们只是已装入。
13,发送nfs getattr命令以获取有关此装入的根目录的一些信息。
使用无上下文句柄时,我们必须在每次创建一个新的类文件对象时执行这些步骤,这会使其非常昂贵。
缺点是每个上下文无关的句柄都必须在内部执行自己的nfs挂载。如果您计划访问多个/多个文件,则应考虑使用上下文完整句柄。