概要
参考:https://blog.csdn.net/weixin_34249678/article/details/92973397
NFSとは、Network File System、ネットワークファイルシステムの略称です。NFS の主な機能は、ローカル エリア ネットワークを通じて、異なるホスト システム間でファイルまたはディレクトリを共有することです。
NFS システムは、Windows のネットワーク共有とネットワーク ドライブに似ていますが、Windows がローカル エリア ネットワークに使用され、NFS がエンタープライズ クラスター アーキテクチャで使用される点が異なります。大規模な Web サイトの場合は、より複雑な分散ファイル システム FastDFS、glusterfs、HDFS が使用されます。
NFS のサービス自体はデータ転送用のプロトコルを提供していません。データやその他の関連メッセージを転送する場合、NFS はリモート プロシージャ コール (RPC) と呼ばれるプロトコルを使用して、NFS 自体の動作を支援します。NFS は RPC サーバーとみなすことができます。NFS を開始するホスト上で RPC サービスをアクティブ化することに加えて、NFS ディレクトリをマウントするクライアント マシンも RPC を同期的にアクティブ化する必要があり、サーバーとクライアントは RPC プロトコルを使用してプログラム ポートに対応します。NFS は主に共有ディレクトリを管理し、データの転送は RPC プロトコルによって操作されます。
NFS の目的:
- 複数サーバー間でのファイル共有を実現
- 複数サーバー間のデータ整合性を実現
NFS を実行して外部サービスを提供するには、合計 2 つのパッケージが必要です。彼らです:
-
nfs-utils: NFS の主要コンポーネント。rpc.nfsd および rpc.mountd、これら 2 つの NFS デーモン、およびその他の関連ドキュメント、説明ファイル、実行可能ファイル、およびその他のコンポーネントを提供します。これ
-
portmap: ポートマッピングの機能を提供します。
クライアントが nfs サーバーのファイルにアクセスしたい場合、NFS サーバーは NFS サービスを提供する必要があります。NFS サービスは、次の 2 つのデーモン (バックグラウンド プロセス) によって完了します。
-
rpc.nfsd: クライアントがホストにログインできるかどうかを管理し、ログイン ユーザーの ID の識別も含みます。
-
rpc.mountd: NFS ファイル システムを管理します。クライアントが rpc.nfsd を通じてホストに正常にログインすると、NFS サーバーが提供するファイルを使用する前に、ファイル使用許可 (つまり、-rwxrwxrwx および所有者、グループ許可) の認証プロセスも実行されます。NFS 構成ファイル /etc/exports を読み取り、クライアントの権限を比較します。このレベルに合格すると、クライアントは NFS ファイルを使用する権限を取得できます。
したがって、NFS 共有ディレクトリの権限とセキュリティ設定は、/etc/exports ファイルを通じて管理できます。
Linuxシステムでnfsを構築する
1. すべてのノードに NFS をインストールします。
# 检查是否安装过了nfs,没有安装nfs则通过联网yum安装或离线本地安装
rpm -qa | grep nfs
# 联网yum安装命令
yum -y install nfs-utils
# 离线本地安装
yum -y localinstall ./nfs_install_rpm/*.rpm
# 说明:nfs_install_rpm为nfs的rpm安装包目录。rpm安装包列表如下
# gssproxy-0.7.0-29.el7.x86_64.rpm
# keyutils-1.5.8-3.el7.x86_64.rpm
# keyutils-libs-1.5.8-3.el7.x86_64.rpm
# keyutils-libs-devel-1.5.8-3.el7.x86_64.rpm
# libbasicobjects-0.1.1-32.el7.x86_64.rpm
# libcollection-0.7.0-32.el7.x86_64.rpm
# libevent-2.0.21-4.el7.x86_64.rpm
# libini_config-1.3.1-32.el7.x86_64.rpm
# libnfsidmap-0.25-19.el7.x86_64.rpm
# libpath_utils-0.2.1-32.el7.x86_64.rpm
# libref_array-0.1.5-32.el7.x86_64.rpm
# libtirpc-0.2.4-0.16.el7.x86_64.rpm
# libverto-libevent-0.2.5-4.el7.x86_64.rpm
# nfs-utils-1.3.0-0.68.el7.x86_64.rpm
# rpcbind-0.2.0-49.el7.x86_64.rpm
2. すべてのノードがディレクトリを作成します
test ! -d /nfs && mkdir -p /nfs
3. NFS サーバーを展開する
# 添加防火墙规则
firewall-cmd --permanent --add-service=rpc-bind
firewall-cmd --permanent --add-service=mountd
firewall-cmd --permanent --add-port=2049/tcp
firewall-cmd --permanent --add-port=2049/udp
firewall-cmd --reload
# 配置NFS共享目录
vi /etc/exports
# 插入以下内容
/nfs 192.168.52.0/24(rw,no_root_squash,no_all_squash,sync)
# 重新加载NFS配置,启动服务,添加开机自启
exportfs -r && service rpcbind start && service nfs start && systemctl enable nfs-server
4. NFS クライアントを展開する
# 查看共享目录列表。可跳过
showmount -e 192.168.52.141
# 挂载目录
mount -t nfs 192.168.52.141:/nfs /nfs
# 将挂载命令写入 /etc/fstab文件:开机时系统就自动挂载 NSF
vi /etc/fstab
# 追加插入以下内容
192.168.52.141:/nfs /nfs nfs defaults,vers=4.0
# 测试挂载目录:在/mynfs目录中创建文件,然后在NFS服务端的共享目录中查看文件是否存在,存在则代表共享成功。
# 卸载NFS目录
umount /nfs
NFS スイートの構造
導入
-
/etc/exports: NFS のメイン構成ファイル。システムにはプリセットがない可能性があるため、このファイルは存在しない可能性があり、このファイルをアクティブに作成するには vi を使用する必要がある場合があります。
-
/usr/sbin/exportfs: NFS 共有リソースを維持するコマンド。このコマンドを使用すると、/etc/exports によって変更されたディレクトリ リソースを再共有したり、NFS サーバーによって共有されたディレクトリをアンインストールまたは再共有したりできます。このコマンドは、NFS システムにおいて非常に重要です。
-
/usr/sbin/showmount: 重要な NFS コマンド。exportfs は NFS サーバー側で使用され、showmount は主にクライアント側で使用されます。この showmount を使用すると、NFS によって共有されるディレクトリ リソースを表示できます。
-
/var/lib/nfs/*tab: NFS サーバーのログイン ファイルはすべて /var/lib/nfs/ ディレクトリに配置されます。このディレクトリには 2 つの重要なログイン ファイルがあります。1 つは etab で、主に NFS によって共有されるディレクトリの完全なアクセス許可設定を記録します。もう 1 つの xtab は、この NFS ホストに接続されている関連クライアント データを記録します。
-
/var/lib/nfs/rmtab: エクスポートされたファイルをマウントしたリモート クライアントをリストするステータス ファイル。
/etc/exports 設定ファイルの構文とパラメータ
# 格式示例
# vi /etc/exports
/tmp 192.168.1.0/24(ro) localhost(rw) *.ev.ncku.edu.tw(ro,sync)
[分享目录] [第一个主机(权限)] [可用主机名] [可用域名]
/etc/exports ファイルの内容は非常に単純で、各行は共有パス、クライアントのリスト、および各クライアントに続くアクセス オプションで構成されます。
[共有ディレクトリ] [ホスト名またはIP(パラメータ、パラメータ)]
-
パラメーターはオプションです。パラメーターが指定されていない場合、nfs はデフォルトのオプションを使用します。デフォルトの共有オプションは、sync、ro、root_squash、no_delay です。
-
ホスト名または IP アドレスが空の場合は、任意のクライアントにサービスを提供するために共有されていることを意味します。
-
同じディレクトリを複数のクライアントで共有しているが、各クライアントに異なるアクセス許可を提供している場合は、次のようにすることができます。
[共有ディレクトリ] [ホスト名 1 または IP1 (パラメータ 1、パラメータ 2)] [ホスト名 2 または IP2 (パラメータ 3、パラメータ 4)]
# NFS共享的常用参数(注意:参数之间只用逗号(,)分隔,中间不能有空格!):
ro # read-only,只读访问权限
rw # read-write,可读写的权限
sync # 资料同步写入到内存与硬盘中
async # 资料会先暂存于内存中,而非直接写入硬盘
secure # NFS通过1024以下的安全TCP/IP端口发送
insecure # NFS通过1024以上的端口发送
wdelay # 如果多个客户要写入NFS目录,则归组写入(默认)
no_wdelay # 如果多个客户要写入NFS目录,则立即写入,当使用async时,无需此设置。
hide # 在NFS共享目录中不共享其子目录
no_hide # 共享NFS目录的子目录
subtree_check # 如果共享/usr/bin之类的子目录时,强制NFS检查父目录的权限(默认)
no_subtree_check # 和上面相对,不检查父目录权限
no_all_squash # 保留共享文件的UID和GID(默认)
all_squash # 不论登入 NFS 的使用者身份为何, 他的UID和GID映射匿名客户anonymous
# (通常也就是 nobody(nfsnobody)),适合公用目录。
root_squash # 在登入NFS主机使用共享之目录的使用者如果是root时,那么这个使用者的权限将被映射成为匿名使用者
# 通常它的 UID 与 GID 都会变成nobody(nfsnobody) 那个系统帐号的身份的权限;(默认)
no_root_squas # 登入NFS主机使用共享目录的使用者,如果是root的话,那么对于这个共享的目录来说,它就具有root的权限!
# 这个项目『极不安全』,不建议使用!
anonuid=xxx # 指定NFS服务器/etc/passwd文件中匿名客户的UID
anongid=xxx # 指定NFS服务器/etc/passwd文件中匿名客户的GID
/etc/exports にクライアントのルールを記述する
-
単一ホスト: 短縮名と完全修飾名を使用することも、IP アドレスを使用することもできます。
たとえば、student01、student01.flying.com.cn、または 192.168.10.1 は、正当なホスト名です。
-
ネットグループ: /etc/netgroup ファイルまたは NFS ネットグループ マッピングで定義されているホストのグループ全体を一覧表示できます。ネットグループ名は @ で始まります。
-
ワイルドカードホスト:
.discuz.net *.*.comsenz.com
-
マスク: 192.168.1.0/255.255.255.0
例
# vi /etc/exports
# 1.将/tmp共享出去给任意主机使用,所有人都可以读写、存取,同时让root写入的文件还是具有root的权限
# 任何人都可以用 /tmp ,用通配字符(*)来处理主机名称,重点在no_root_squash
/tmp *(rw,no_root_squash)
# 2.同一目录针对不同范围开放不同权限
# 将一个公共的目录/home/public公开出去,但是只有限定局域网内192.168.0.0/24这个网段可以读写,其他人则只能读取
# 通配字符仅能用在主机名称的分辨上面,IP或网段就只能用192.168.0.0/24的状况,不可以使用192.168.0.*
/home/public 192.168.0.0/24(rw) *(ro)
# 3.仅给某个单一主机使用的目录设置
# 将一个私人的目录 /home/test 开放给192.168.0.100这个Client端的机器来使用
/home/test 192.168.0.100(rw) # 只要设定 IP 正确即可!
# 开放匿名登入的情况
# 让*.linux.org网域的主机,登入我的NFS主机时,可以存取 /home/linux,但是其存资料的时候,使的UID与GID都变成40这个身份的使用者, 假设NFS服务器上的UID 40已经有设定妥当:
# # 如果要开放匿名,那么重点是all_squash,并且要配合anonuid
/home/linux *.linux.org(rw,all_squash,anonuid=40,anongid=40)
showmount: NFS 接続の監視
showmount [-ae] [hostname|IP]
# 参数:
-a # 这个参数是一般在NFS SERVER上使用,是用来显示已经mount上本机nfs目录的cline机器
-e # 显示主机的 /etc/exports 所共享的目录。
exportfs: NFS 共有リソースを維持する
構成ファイルを変更するたびに、exportfs コマンドを使用して /etc/exports ファイルを再スキャンし、変更をすぐに有効にすることができます。
exportfs [-aruv]
# 参数:
-a # 全部挂载(或卸载)/etc/exports文件内的设置
-r # 重新挂载/etc/exports里面的设置,此外,亦同步更新/etc/exports及/var/lib/nfs/xtab 的内容!
-u # 卸载某一目录
-v # 在export的时候,将分享的目录显示到屏幕上!
例:
# 重新挂载一次 /etc/exports的设置
exportfs -arv
# 输出:
# exporting 192.168.0.100:/home/test
# exporting 192.168.0.0/24:/home/public
# exporting *.linux.org:/home/linux
# exporting *:/home/public
# exporting *:/tmp
# 全部卸载
exportfs -auv
/etc/fstab: 起動時に自動的にマウントします
etc/fstabファイルの役割
ディスクを手動でマウントした後、マウント情報を /etc/fstab ファイルに書き込む必要があります。そうしないと、次回の起動時に再マウントする必要があります。
システムの電源がオンになると、システムは /etc/fstab ファイルの内容を積極的に読み取り、ファイル内の設定に従ってディスクをマウントします。この方法では、ディスクのマウント情報をこのファイルに書き込むだけでよく、ブートのたびに手動でマウントする必要はありません。