1. 程式人生 > >01: 儲存技術與應用 iSCSI技術應用 、 udev配置 NFS網路檔案系統 、 Multipath多路徑 、 NFS網路檔案系統 、 udev配置

01: 儲存技術與應用 iSCSI技術應用 、 udev配置 NFS網路檔案系統 、 Multipath多路徑 、 NFS網路檔案系統 、 udev配置

Top

NSD CLUSTER DAY01

1 案例1:配置iSCSI服務

1.1 問題

本案例要求先搭建好一臺iSCSI伺服器,並將整個磁碟共享給客戶端:

  • 伺服器上要額外配置一塊硬碟
  • 服務端安裝target,並將新加的硬碟配置為iSCSI 的共享磁碟
  • 在客戶端上安裝initiator,掛在伺服器iSCSI,要求實現開機自動掛載

1.2 方案

使用2臺RHEL7虛擬機器,其中一臺作為iSCSI伺服器(192.168.2.5)、另外一臺作為測試用的客戶機(192.168.2.100),如圖-1所示,主機網路地址配置如表-1所示。

圖-1

表-1 主機網路引數配置列表

在RHEL7系統中,預設通過targetcli軟體包提供iSCSI服務,因此需要在服務端安裝targetcli包並配置對應的服務,iSCSI服務主要配置選項如表-1所示。

表-2 iSCSI配置選項列表

客戶端掛載iSCSI伺服器:

  • 客戶端需要安裝iscsi-initiator-utils軟體包
  • 客戶端使用命令掛載後需要分割槽、格式化並進行掛載測試

1.3 步驟

實現此案例需要按照如下步驟進行。

步驟一:安裝iSCSI伺服器軟體

1)使用yum安裝targetcli軟體包

  1. [[email protected] ~]# yum -y install targetcli
  2. .. ..
  3. [[email protected] ~]# yum info targetcli
  4. .. ..

步驟二:通過命令列配置iSCSI服務

1)真實主機準備底層儲存磁碟

真實主機使用virt-manager工具為proxy虛擬機器新增磁碟,如圖-2所示。

圖-2

雙擊開啟虛擬機器後新增磁碟裝置,如圖-3和圖-4所示。

圖-3

圖-4

登陸到192.168.2.5主機,為新新增的磁碟準備分割槽:

  1. [[email protected] ~]# parted /dev/vdb mklabel gpt
  2. [[email protected] ~]# parted /dev/vdb mkpart primary 1 100%

2)使用targetcli定義後端儲存

設定需要將哪個裝置共享給其他主機,這裡將/dev/vdb1設定為後端共享磁碟。

  1. [[email protected] ~]# targetcli
  2. /> ls
  3. /> backstores/block create store /dev/vdb1
  4. 備註:store為任意名稱

3)建立iqn物件

給iSCSI共享設定一個共享名稱,客戶端訪問時需要使用該共享名稱。

  1. /> /iscsi create iqn.2018-01.cn.tedu:server1

4) 授權客戶機訪問

類似於一個密碼,設定ACL訪問控制,擁有iqn.2018-01.cn.tedu:client1這個字串的客戶端才有許可權訪問伺服器。

  1. /> iscsi/iqn.2018-01.cn.tedu:server1/tpg1/acls create iqn.2018-01.cn.tedu:client1

5) 繫結儲存

將iqn共享名稱(iqn.2018-01.cn.tedu:server1)與後端實際的儲存裝置(vdb)繫結。

  1. />iscsi/iqn.2018-01.cn.tedu:server1/tpg1/luns create /backstores/block/store

#注意:block後面的store必須與前面步驟2定義後端儲存create建立的名稱一致。

6) 儲存繫結服務監聽的地址,並儲存配置

  1. /> iscsi/iqn.2018-01.cn.tedu:server1/tpg1/portals/ create 0.0.0.0
  2. /> saveconfig
  3. /> exit

步驟三:服務管理

1)啟動服務

  1. [[email protected] ~]# systemctl {start|restart|stop|status} target
  2. [[email protected] ~]# systemctl enable target

2)檢視埠資訊

  1. [[email protected] ~]# ss -utlnp | grep :3260

3)關閉防火牆與SELinux

  1. [[email protected] ~]# systemctl stop firewalld
  2. [[email protected] ~]# setenforce 0

步驟四:客戶端訪問(web1作為客戶端的角色)

1)客戶端安裝軟體並啟動服務

  1. [[email protected] ~]# yum -y install iscsi-initiator-utils

2)設定本機的iqn名稱

  1. [[email protected] ~]# vim /etc/iscsi/initiatorname.iscsi
  2. InitiatorName=iqn.2018-01.cn.tedu:client1
  3. 注意:必須跟伺服器上配置的ACL一致!

3)發現遠端target儲存

提示:參考man iscsiadm!

  1. [[email protected] ~]# iscsiadm --mode discoverydb --type sendtargets --portal 192.168.2.5 --discover
  2. [[email protected] ~]# iscsiadm --mode node --targetname iqn.2018-01.cn.tedu:server1 --portal 192.168.2.5:3260 --login

3)客戶端掛載iSCSI共享

  1. [[email protected] ~]# lsblk
  2. NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
  3. sda 8:0 0 9.3G 0 disk
  4. #多了一個sda裝置
  5. sr0 11:0 1 1024M 0 rom
  6. vda 252:0 0 20G 0 disk
  7. [[email protected] ~]# systemctl restart iscsi

4)分割槽、格式化、掛載

  1. [[email protected] ~]# parted /dev/sda mklabel gpt
  2. [[email protected] ~]# parted /dev/sda mkpart primary 1 800
  3. [[email protected] ~]# mkfs.xfs /dev/sda1
  4. [[email protected] ~]# mount /dev/sda1 /mnt
  5. [[email protected] ~]# umount /mnt

步驟四:附加課外實驗:多臺FTP或者http主機使用共享儲存。

這裡以FTP為例,web1和web2主機都安裝vsftpd軟體,使用統一的後端共享儲存裝置。

1) web1操作(延續前面步驟三的實驗):

  1. [[email protected] ~]# mkdir /var/ftp/
  2. [[email protected] ~]# mount /dev/sda1 /var/ftp/
  3. [[email protected] ~]# yum -y install vsftpd
  4. [[email protected] ~]# sed -i 's/^#anon/anon/' /etc/vsftpd/vsftpd.conf

備註:修改vsftpd配置檔案,開啟匿名上傳功能。將下面2行預設的註釋行開啟。

#anon_upload_enable=YES

#anon_mkdir_write_enable=YES

  1. [[email protected] ~]# chmod 777 /var/ftp/pub
  2. [[email protected] ~]# systemctl start vsftpd
  3. [[email protected] ~]# systemctl enable vsftpd

2) 真實主機訪問web1的FTP共享,並任意上傳一個檔案到FTP伺服器。

開啟真實主機瀏覽網路,如圖-5所示。

圖-5

輸入需要連線的伺服器協議與IP地址,如圖-6所示。

圖-6

連線到伺服器後,進入pub共享目錄,將真實主機的任意檔案拖拽到FTP的共享目錄下(pub目錄)。注意:僅pub目錄有讀寫許可權。

圖-7

3)當web1宕機後,web2主機可以繼續使用iscsi提供FTP共享服務。

Web1關閉vsftpd服務,解除安裝iscsi掛載。

  1. [[email protected] ~]# systemctl stop vsftpd
  2. [[email protected] ~]# umount /var/ftp

新增iSCSI共享(web2操作)。

  1. [[email protected] ~]# vim /etc/iscsi/initiatorname.iscsi
  2. InitiatorName=iqn.2018-01.cn.tedu:client1
  3. 注意:必須跟伺服器上配置的ACL一致!
  4. [[email protected] ~]# iscsiadm --mode discoverydb --type sendtargets --portal 192.168.2.5 --discover
  5. [[email protected] ~]# iscsiadm --mode node --targetname iqn.2018-01.cn.tedu:server1 --portal 192.168.2.5:3260 --login

安裝部署vsftpd軟體(web2操作)。

  1. [[email protected] ~]# yum -y install vsftpd
  2. [[email protected] ~]# sed -i 's/^#anon/anon/' /etc/vsftpd/vsftpd.conf
  3. [[email protected] ~]# chmod 777 /var/ftp/pub/
  4. [[email protected] ~]# systemctl start vsftpd
  5. [[email protected] ~]# systemctl enable vsftpd

4) 真實主機訪問web2的FTP共享,檢視共享裡現有的資料,並任意上傳一個新檔案到FTP伺服器。操作步驟參考圖-5至圖-7所示,注意修改對應的IP地址。

思考?

寫一個檢測ftp的指令碼,如果發現web1宕機後,web2自動mount掛載iscsi共享,自動啟動vsftpd服務。

2 案例2:部署Multipath多路徑環境

2.1 問題

通過Multipath,實現以下目標:

  • 在共享儲存伺服器上配置iSCSI,為應用伺服器共享儲存空間
  • 應用伺服器上配置iSCSI,發現遠端共享儲存
  • 應用伺服器上配置Multipath,將相同的共享儲存對映為同一個名稱

2.2 方案

配置2臺虛擬機器,每臺虛擬機器均為兩塊網絡卡:

  • eth1和eth3都可用於iSCSI儲存通訊
  • 具體配置如表-3所示

表-3 各節點IP地址配置

多路徑示意圖,如圖-8所示。

圖-8

2.3 步驟

實現此案例需要按照如下步驟進行。

步驟一:儲存伺服器上新增額外的磁碟(如果虛擬機器已經有磁碟,此步驟可以忽略)

使用KVM軟體新建(或修改)虛擬機器,為虛擬機器額外新增一塊硬碟。

步驟二:儲存伺服器上安裝並配置共享儲存(如果有iscsi共享,此步驟可用忽略)

1) 定義後端儲存

  1. [[email protected] ~]# targetcli
  2. /> ls
  3. /> backstores/block create /dev/vdb1

2)建立iqn物件

  1. /> /iscsi create iqn.2018-01.cn.tedu:server1

3) 授權客戶機訪問

  1. /> iscsi/iqn.2018-01.cn.tedu:server1/tpg1/acls create iqn.2018-01.cn.tedu:client1

4) 繫結儲存

  1. />iscsi/iqn.2018-01.cn.tedu:server1/tpg1/luns create /backstores/block/iscsi_store

5) 繫結儲存繫結監聽地址,並儲存配置

  1. /> iscsi/iqn.2018-01.cn.tedu:server1/tpg1/portals/ create 0.0.0.0
  2. /> saveconfig
  3. /> exit

步驟三:在client伺服器上安裝並配置iSCSI客戶端

(前面的案例1已經完成的情況下,可以忽略此步驟)

1)安裝客戶端軟體

  1. [[email protected] ~]# yum list | grep iscsi
  2. iscsi-initiator-utils.x86_64 6.2.0.873-14.el6
  3. [[email protected] ~]# yum install -y iscsi-initiator-utils

2)發現儲存伺服器的共享磁碟

因為有兩條鏈路都可以連線到共享儲存,所以需要在兩條鏈路上都發現它。

注意:兩次發現使用的IP地址不同!

  1. [[email protected] ~]# iscsiadm --mode discoverydb --type sendtargets --portal 192.168.2.5 --discover
  2. 192.168.2.5:3260,1 iqn.2018-01.cn.tedu:client1
  3. [[email protected] ~]# iscsiadm --mode discoverydb --type sendtargets --portal 192.168.4.5 --discover
  4. 201.1.2.5:3260,1 iqn.2018-01.cn.tedu:client1

3)登陸共享儲存

只需要將iscsi服務重啟就可以自動登陸(就不需要再login了)。

在login之前,只能看到本地的儲存,登陸之後,將會多出兩塊新的硬碟。

  1. … …
  2. [[email protected] ~]# service iscsi restart
  3. 停止 iscsi: [確定]
  4. 正在啟動 iscsi: [確定]
  5. [[email protected] ~]# lsblk
  6. NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
  7. sda 8:0 0 20G 0 disk
  8. ├─sda1 8:1 0 20G 0 part
  9. sdb 8:0 0 20G 0 disk
  10. ├─sdb1 8:1 0 20G 0 part
  11. vda 252:0 0 20G 0 disk
  12. ├─vda1 252:1 0 1G 0 part /boot

提示:登陸的是同一個伺服器的同一個iSCSI,但客戶端看到的是兩個獨立的裝置,sda和sdb。其實,這兩個裝置是同一個裝置。

4)設定開機自啟動

iscsi用於自動login遠端儲存,iscsid是守護程序。

  1. [[email protected] ~]# systemctl enable iscsid
  2. [[email protected] ~]# systemctl enable iscsi

步驟四:配置Multipath多路徑

1)安裝多路徑軟體包

  1. [[email protected] ~]# yum list | grep multipath
  2. device-mapper-multipath.x86_64 0.4.9-111.el7 Server
  3. device-mapper-multipath-libs.i686 0.4.9-111.el7 Server
  4. device-mapper-multipath-libs.x86_64 0.4.9-111.el7 Server
  5. [[email protected] ~]# yum install -y device-mapper-multipath

2)生成配置檔案

  1. [[email protected] ~]# cd /usr/share/doc/device-mapper-multipath-0.4.9/
  2. [[email protected] ~]# ls multipath.conf
  3. [[email protected] ~]# cp multipath.conf /etc/multipath.conf

3)獲取wwid

登陸共享儲存後,系統多了兩塊硬碟,這兩塊硬碟實際上是同一個儲存裝置。應用伺服器使用哪個都可以,但是如果使用sdb時,sdb對應的鏈路出現故障,它不會自動切換到sda。

為了能夠實現系統自動選擇使用哪條鏈路,需要將這兩塊磁碟繫結為一個名稱。

通過磁碟的wwid來判定哪些磁碟是相同的。

取得一塊磁碟wwid的方法如下:

  1. [[email protected] ~]# /usr/lib/udev/scsi_id --whitelisted --device=/dev/sdb
  2. 360014059e8ba68638854e9093f3ba3a0

4)修改配置檔案

首先宣告自動發現多路徑:

  1. [[email protected] ~]# vim /etc/multipath.conf
  2. defaults {
  3. user_friendly_names yes
  4. find_multipaths yes
  5. }

然後在檔案的最後加入多路徑宣告,如果哪個儲存裝置的wwid和第(3)步獲取的wwid一樣,那麼,為其取一個別名,叫mpatha。

  1. multipaths {
  2. multipath {
  3. wwid "360014059e8ba68638854e9093f3ba3a0"
  4. alias mpatha
  5. }
  6. }

步驟五:啟用Multipath多路徑,並測試

1)啟動Multipath,並設定為開機啟動

  1. [[email protected] ~]# systemctl start multipathd
  2. [[email protected] ~]# systemctl enable multipathd

2)檢查多路徑裝置檔案

如果多路長設定成功,那麼將在/dev/mapper下面生成名為mpatha的裝置檔案:

  1. [[email protected] ~]# ls /dev/mapper/
  2. control mpatha mpatha1

3)對多路徑裝置檔案執行分割槽、格式化、掛載操作

提示:如果前面已經對iscsi做過分割槽操作,則這裡可以直接識別到mpatha1(就不需要再次分割槽了)。

  1. [[email protected] ~]# fdisk -cu /dev/mapper/mpatha
  2. Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
  3. Building a new DOS disklabel with disk identifier 0x205c887e.
  4. Changes will remain in memory only, until you decide to write them.
  5. After that, of course, the previous content won't be recoverable.
  6. Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)
  7. Command (m for help): n #建立分割槽
  8. Command action
  9. e extended
  10. p primary partition (1-4)
  11. p #分割槽型別為主分割槽
  12. Partition number (1-4): 1 #分割槽編號為1
  13. First sector (2048-4194303, default 2048): #起始扇區回車
  14. Using default value 2048
  15. Last sector, +sectors or +size{K,M,G} (2048-4194303, default 4194303): #回車
  16. Using default value 4194303
  17. Command (m for help): w #儲存並退出
  18. The partition table has been altered!
  19. Calling ioctl() to re-read partition table.

新的分割槽名稱應該是/dev/mapper/mpathap1,如果該檔案不存在,則執行以下命令進行配置的重新載入:

  1. [[email protected] ~]# ls /dev/mapper/ #再次檢視,將會看到新的分割槽
  2. control mpatha mpathap1

建立目錄並掛載:

  1. [[email protected] ~]# mkfs.xfs /dev/mapper/mpathap1
  2. [[email protected] ~]# mkdir /data
  3. [[email protected] ~]# mount /dev/mapper/mpathap1 /data/
  4. [[email protected] ~]# df -h /data/
  5. Filesystem Size Used Avail Use% Mounted on
  6. /dev/mapper/mpathap1 2.0G 3.0M 1.9G 1% /data

4)驗證多路徑

檢視多路徑,sda和sdb都是running狀態。

  1. [[email protected] ~]# multipath -rr
  2. reload: mpatha (360014059e8ba68638854e9093f3ba3a0) undef LIO-ORG ,store
  3. size=9.3G features='0' hwhandler='0' wp=undef
  4. |-+- policy='service-time 0' prio=1 status=undef
  5. | `- 2:0:0:0 sda 8:0 active ready running
  6. `-+- policy='service-time 0' prio=1 status=undef
  7. `- 3:0:0:0 sdb 8:16 active ready running

關閉某個鏈路後,再次檢視效果,此時會發現sdb為執行失敗狀態。

  1. [[email protected] ~]# nmcli connection down eth1
  2. [[email protected] ~]# multipath -rr
  3. reject: mpatha (360014059e8ba68638854e9093f3ba3a0) undef LIO-ORG ,store
  4. size=9.3G features='0' hwhandler='0' wp=undef
  5. |-+- policy='service-time 0' prio=0 status=undef
  6. | `- 2:0:0:0 sda 8:0 active undef running
  7. `-+- policy='service-time 0' prio=0 status=undef
  8. `- 3:0:0:0 sdb 8:16 active faulty running

使用-ll選項檢視,僅sda為有效執行狀態。

  1. [[email protected] ~]# multipath -ll
  2. reject: mpatha (360014059e8ba68638854e9093f3ba3a0) undef LIO-ORG ,store
  3. size=9.3G features='0' hwhandler='0' wp=undef
  4. `-+- policy='service-time 0' prio=0 status=undef
  5. `- 2:0:0:0 sda 8:0 active undef running

3 案例3:編寫udev規則

3.1 問題

編寫udev規則,實現以下目標:

  1. 當插入一個U盤時,該U盤自動出現一個連結稱為udisk
  2. U盤上的第1個分割槽名稱為udisk1,以此類推
  3. 終端上出現提示資訊”udisk plugged in”

3.2 方案

問題:載入一個USB裝置後,系統可能識別為sda也可能識別為sdb,能不能固定呢?

對於Linux kernel 2.6及更新的作業系統版本會將裝置的相關資訊動態寫入/sys檔案系統中,而udev程式可以通過讀取這些裝置系資訊,並根據自己的udev規則進行裝置管理器,實現如下功能:

  • 處理裝置命名
  • 決定要建立哪些裝置檔案或連結
  • 決定如何設定屬性
  • 決定觸發哪些事件

udev預設規則存放在/etc/udev/rules.d目錄下,通過修改此目錄下的規則實現裝置的命名、屬性、連結檔案等。

3.3 步驟

實現此案例需要按照如下步驟進行。

步驟一:編寫udev規則

1)準備USB裝置(如果使用真實機演示,下面為虛擬機器新增USB裝置可以忽略)

使用virt-manager為虛擬機器新增USB裝置,如圖-5所示。注意新增裝置時一定要選擇正確的USB裝置,圖-9僅是參考案例,每個人的USB品牌與型號都有可能不一樣!

圖-9

1)檢視裝置屬性

載入USB裝置的同時實時檢視裝置的相關屬性,可以使用monitor指令。

  1. [[email protected] ~]# udevadm monitor --property

如果裝置已經載入則無法使用monitor檢視相關屬性。可以使用下面的命令檢視裝置屬性。

  1. [[email protected] ~]# udevadm info --query=path --name=/dev/sda
  2. [[email protected] ~]# udevadm info --query=property --path=/block/sda
  3. [[email protected] ~]# udevadm info --query=all --attribute-walk --path=/block/sda

單獨檢視某個磁碟分割槽的屬性資訊。

  1. [[email protected] ~]# udevadm info --query=property --path=/block/sdada1

2)編寫udev規則檔案(實現插拔USB裝置時有螢幕提示資訊)

注意:修改規則檔案不能照抄,這裡的變數都是需要根據實際情況而修改的!!!

每個裝置的屬性都有所不同!!!一定要根據前面查詢的info資訊填寫。

  1. [[email protected] ~]# vim /etc/udev/rules.d/70-usb.rules
  2. SUBSYSTEMS=="usb",ATTRS{manufacturer}=="TOSHIBA",ATTRS{serial}=="60A44CB4665EEE4133500001",RUN+="/usr/bin/wall udisk plugged in"

在virt-manager中刪除、新增USB裝置,測試自己的udev規則是否成功。

排錯方法:通過檢視/var/log/messages日誌檔案排錯。

3)繼續修改規則檔案(實現給分割槽命名)

  1. [[email protected] ~]# udevadm info --query=property --path=/block/sdb/sdb1
  2. [[email protected] ~]# /etc/udev/rules.d/70-usb.rules
  3. ACTION=="add",ENV{ID_VENDOR}=="TOSHIBA",ENV{DEVTYPE}=="partition",ENV{ID_SERIAL_SHORT}=="60A44CB4665EEE4133500001",SYMLINK="usb%n"

在virt-manager中刪除、新增USB裝置,測試自己的udev規則是否成功。

4)繼續修改規則檔案(修改裝置所有者和許可權)

  1. [[email protected] ~]# /etc/udev/rules.d/70-usb.rules
  2. ACTION=="add",ENV{ID_VENDOR}=="TOSHIBA",ENV{DEVTYPE}=="partition",ENV{ID_SERIAL_SHORT}=="60A44CB4665EEE4133500001",SYMLINK="usb%n",OWNER="root",GROUP="root",MODE="0644"

在virt-manager中刪除、新增USB裝置,測試自己的udev規則是否成功。

5)繼續修改規則檔案(插拔U盤等於啟停服務)

注意:啟動服務的程式systemctl,必須使用絕對路徑。

  1. [[email protected] ~]# /etc/udev/rules.d/70-usb.rules
  2. ACTION=="add",ENV{ID_VENDOR}=="TOSHIBA",ENV{ID_SERIAL_SHORT}=="60A44CB4665EEE4133500001",RUN+="/usr/bin/systemctl start httpd"
  3. ACTION=="remove",ENV{ID_VENDOR}=="TOSHIBA",ENV{ID_SERIAL_SHORT}=="60A44CB4665EEE4133500001",RUN+="/usr/bin/systemctl stop httpd"

在virt-manager中刪除、新增USB裝置,測試自己的udev規則是否成功。

總結知識點:

udev規則檔案,常見指令操作符如表-4所示。

表-4 udev常見指令操作符

udev常用替代變數:

  • %k:核心所識別出來的裝置名,如sdb1
  • %n:裝置的核心編號,如sda3中的3
  • %p:裝置路徑,如/sys/block/sdb/sdb1
  • %%:%符號本身

4 案例4:配置並訪問NFS共享

4.1 問題

伺服器利用NFS機制釋出2個共享目錄,要求如下:

  • 將目錄/root共享給192.168.2.100,客戶機的root使用者有許可權寫入
  • 將/usr/src目錄共享給192.168.2.0/24網段,只開放讀取許可權

從客戶機訪問NFS共享:

  • 分別查詢/掛載上述NFS共享目錄
  • 檢視掛載點目錄,並測試是否有寫入許可權

4.2 方案

使用2臺RHEL7虛擬機器,其中一臺作為NFS共享伺服器(192.168.2.5)、另外一臺作為測試用的Linux客戶機(192.168.2.100),如圖-10所示。

圖-10

NFS共享的配置檔案:/etc/exports 。

配置記錄格式:資料夾路徑 客戶地址1(控制引數.. ..) 客戶地址2(.. ..) 。

4.3 步驟

實現此案例需要按照如下步驟進行。

步驟一:配置NFS伺服器,釋出指定的共享

1)確認服務端程式、準備共享目錄

軟體包nfs-utils用來提供NFS共享服務及相關工具,而軟體包rpcbind用來提供RPC協議的支援,這兩個包在RHEL7系統中一般都是預設安裝的:

  1. [[email protected] ~]# rpm -q nfs-utils rpcbind
  2. nfs-utils-1.3.0-0.48.el7.x86_64
  3. rpcbind-0.2.0-42.el7.x86_64

根據本例的要求,需要作為NFS共享釋出的有/root、/usr/src這兩個目錄:

  1. [[email protected] ~]# ls -ld /root /usr/src/
  2. dr-xr-x---. 35 root root 4096 1月 15 18:52 /root
  3. drwxrwxr-x+ 4 root root 4096 1月 15 17:35 /usr/src/

2)修改/etc/exports檔案,新增共享目錄設定

預設情況下,來自NFS客戶端的root使用者會被自動降權為普通使用者,若要保留其root許可權,注意應新增no_root_squash控制引數(沒有該引數,預設root會被自動降級為普通賬戶);另外,限制只讀的引數為ro、可讀可寫為rw,相關配置操作如下所示:

  1. [[email protected] ~]# vim /etc/exports
  2. /root 192.168.2.100(rw,no_root_squash)
  3. /usr/src 192.168.2.0/24(ro)

3)啟動NFS共享相關服務,確認共享列表

依次啟動rpcbiind、nfs服務:

  1. [[email protected] ~]# systemctl restart rpcbind ; systemctl enable rpcbind
  2. [[email protected] ~]# systemctl restart nfs ; systemctl enable nfs

使用showmount命令檢視本機發布的NFS共享列表:

  1. [[email protected] ~]# showmount -e localhost
  2. Export list for localhost:
  3. /usr/src 192.168.2.0/24
  4. /root 192.168.2.100

步驟二:從客戶機訪問NFS共享

1)啟用NFS共享支援服務

客戶機訪問NFS共享也需要rpcbind服務的支援,需確保此服務已開啟:

  1. [[email protected] ~]# systemctl restart rpcbind ; systemctl enable rpcbind

2)檢視伺服器提供的NFS共享列表

  1. [[email protected] ~]# showmount -e 192.168.2.5
  2. Export list for 192.168.2.5:
  3. /usr/src 192.168.2.0/24
  4. /root 192.168.2.100

3)從客戶機192.168.2.100訪問兩個NFS共享,並驗證許可權

將遠端的NFS共享/root掛載到本地的/root5資料夾,並驗證可讀可寫:

  1. [[email protected] ~]# mkdir /root5                          //建立掛載點
  2. [[email protected] ~]# mount 192.168.2.5:/root /root5         //掛載NFS共享目錄
  3. [[email protected] ~]# df -hT /root5                         //確認掛載結果
  4. Filesystem Type Size Used Avail Use% Mounted on
  5. 192.168.2.5:/root nfs 50G 15G 33G 31% /root5
  6. [[email protected] ~]# cd /root5                             //切換到掛載點
  7. [[email protected] root5]# echo "NFS Write Test" > test.txt     //測試寫入檔案
  8. [[email protected] root5]# cat test.txt                      //測試檢視檔案
  9. NFS Write Test

將遠端的NFS共享/usr/src掛載到本地的/mnt/nfsdir,並驗證只讀:

  1. [[email protected] ~]# mkdir /mnt/nfsdir                     //建立掛載點
  2. [[email protected] ~]# mount 192.168.2.5:/usr/src /mnt/nfsdir/     //掛載NFS共享目錄
  3. [[email protected] ~]# df -hT /mnt/nfsdir/                         //確認掛載結果
  4. Filesystem Type Size Used Avail Use% Mounted on
  5. 192.168.2.5:/usr/src nfs 50G 15G 33G 31% /mnt/nfsdir
  6. [[email protected] ~]# cd /mnt/nfsdir/                         //切換到掛載點
  7. [[email protected] nfsdir]# ls                                 //讀取目錄列表
  8. debug install.log kernels test.txt
  9. [[email protected] nfsdir]# echo "Write Test." > pc.txt //嘗試寫入檔案失敗
  10. -bash: pc.txt: 只讀檔案系統

!!!! 如果從未授權的客戶機訪問NFS共享,將會被拒絕。比如從NFS伺服器本機嘗試訪問自己釋出的/root共享(只允許192.168.2.100訪問),結果如下所示:

  1. [[email protected] ~]# mkdir /root5
  2. [[email protected] ~]# mount 192.168.2.5:/root /root5
  3. mount.nfs: access denied by server while mounting 192.168.2.5:/root

4)設定永久掛載

  1. [[email protected] ~]# vim /etc/fstab
  2. .. ..
  3. 192.168.2.5:/usr/src nfsdir         nfs default,ro 0 0
  4. 192.168.2.5:/root root5         nfs default 0 0