网络文件系统

257 阅读4分钟

目标:实现在不同客户端远程访问文件服务

自己对不同文件服务做了下整理,文件服务有12种,这里列举了一部分

常用文件系统

Samba

Samba是一个能让Linux系统应用Microsoft网络通讯协议的软件,而SMB是Server Message Block的缩写,即为服务器消息块 ,SMB主要是作为Microsoft的网络通讯协议,后来Samba将SMB通信协议应用到了Linux系统上,就形成了现在的Samba软件。后来微软又把 SMB 改名为 CIFS(Common Internet File System),即公共 Internet 文件系统,并且加入了许多新的功能,这样一来,使得Samba具有了更强大的功能。

Ftp

Ftp其实还分为SFtp,FtpS,Ftp还支持TLS。这些都是在安全方面的增强。因为Ftp是明文密码。

Ftp的优势是不跟windows账号及系统安全掺合在一起,只要通讯端口开启,IP没错,都能方便连接上。而且特别适合外网共享。

FTP是否匿名访问,跟Windows账号也没任何关系,可以随便设置。

Ftp主要用于客户端和服务器之间的文件上传和下载。不适用于修改服务器上的文件。因为它要存取一个文件,就必须先获得一个本地文件的副本,如果修改文件,也只能对文件的副本进行修改,然后再将修改后的文件副本传回到原节点。所以如果你要修改服务器上的一个超大文件,但是只修改几个字节的内容。你依然需要下载整个文件过来,修改完毕后,再回传回去。

Ftp的速度非常一般,没人会推荐你用它作为家庭媒体服务器的局域网播放方式。

Upnp(DLNA)

要求设备必须是处于同一网段内。共享服务的设置也比较简单。由于是专门用于局域网媒体播放的协议,所以网络传输效率也很高,超大文件的快进,后退,都很流畅。唯一的缺点是不支持外挂字幕。

另外Upnp(DLNA)的解码是服务器端实现的。所以大幅消耗的是你的路由器或NAS的硬件资源,二不是播放设备的硬件资源。如果你的路由器硬件不够强悍,可能会导致其他用户上网受影响。

NFS

允许应用进程打开一个远地文件,并能够在该文件中某一个特定位置上开始读写数据。本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。所以NFS修改服务器上的文件时,可使用户只复制一个大文件中的一个很小的片段,在网络上传送的只是少量的修改数据。

NFS的网络利用率也非常高,速度超爽。相比Upnp(DLNA),NFS还支持视频外挂字幕。只要将同名的字幕文件放在同一个目录下即可。

我主要采用了NFS来搭建的文件服务

NFC 

安装

sudo apt-get install rpcbind                # NFS需要的基础支持服务
sudo apt-get install nfs-kernel-server      # NFS核心服务

启动

sudo /etc/init.d/rpcbind start
sudo /etc/init.d/nfs-kernel-server start

NFS文件服务的配置采用 /etc/exports 文件进行配置的存储

/home/pi/Dist/kodexplorer/User/admin/home *(rw,sync,no_root_squash)

通过_export,_无需重启服务

sudo exportfs -rv

到这里为止NFS搭建基本完事

export参数说明:

  • -a: 全部挂载或者全部卸载

  • -r: 重新挂载

  • -u: 卸载某一个目

  • -v: 显示共享目录

NFS权限说明

  • ro,rw:只读或可读写

  • sync:同步,当client的写请求完成后,立即将内存中的数据写入到磁盘,这样做是安全的。

  • async:异步,当client的写请求完成后,server不是立即将数据写入到磁盘,而是在某个时机(空闲或….鬼知道)写入到磁盘,这就造成了数据丢失的可能性。

  • wdelay(write delay):写入延迟,这是一个优化选项,允许服务器延迟将数据写入磁盘,这样如果第二次client的写请求到来,将两次数据使用一次write系统调用写入到磁盘。

  • nowdelay:与上相反,仅在sync模式下可使用。

  • root_squash:“压扁”root,因为client将文件写入到server时,是使用client写入用户的uid直接映射为server同uid的用户,这样root用户存放到nfs share volume上的文件,在server端属主和属组还是root,有一定的安全隐患,所以可用此选项将root压扁为nfsnobody用户。

  • all_squash:压扁所有用户,可使用anonuid=,anongid=来指定压扁为哪个用户。

NFS挂载

这里就列举mac是如何挂载

mount -t nfs -o rw,nolock 10.147.17.201:/home/pi/Dist /Users/lichenglong/pinfs

这里使用mount来挂载nfs

-t 挂载文件类型

-o 设置权限

:需要挂载的目标目录,和本地目录映射

NFS卸载

卸载

sudo umount /Users/lichenglong/pinfs

强制卸载

umount -lf /mnt