---
# System prepended metadata

title: 'Dell EMC Unity VSA - Part4: 建立 NAS 存儲服務'
tags: [unity, dellemc]

---

# Dell EMC Unity VSA - Part4: 建立 NAS 存儲服務
###### tags: `dellemc` `unity`

使用 Unisphere CLI 組態 UnityVSA 的 NAS 服務，包含 NFS 及 SMB/CIFS 檔案共享 

[toc]

# 設定 NFS 檔案共用
Unity 儲存設備可以提供 CIFS/NFS 檔案共用的功能。兩者檔案共用的設定流程大致相同。

使用 Unispere GUI 界面設定 NAS 檔案共用服務時，總覺得 UI 設計的有點不夠人性化，有可能是我還沒掌握住其中的關鍵要領吧！勉強地研究並跟同事請教指導後，若要提供 CIFS/NFS 協定的 NAS 檔案共用服務，請透過以下程序逐步完成：

```mermaid
graph TD;
建立NAS服務器-->建立NAS服務界面;
建立NAS服務界面-->建立NFS服務器;
建立NFS服務器-->建立NFS檔案系統;
建立NFS檔案系統-->建立NFS檔案分享;
```

:::warning
- 這部份的設定在 GUI 操作界面，並沒有按照流程順序呈現，而是以  
**檔案系統** - **CIFS/NFS 檔案分享** - **NAS 服務** 的順序顯示，所以在測試過程中，一直搞不懂之間的關聯。而且 NAS 服務與檔案系統及分享本身就存在著一對一對應的關聯性，為何不在 UI 設定界面中一氣呵成？！

  ![](https://i.imgur.com/oAnYR7s.png)
- Unity 也提供**多協定檔案共用（Multiprotocol File Sharing）** 功能，可同時提供 SMB/NFS 檔案分享。但此方式有設定條件，且一般應用也不普遍，就暫時不研究討論了！
:::

## 管理 NAS 服務器
### 建立 NAS 服務器
[](pp.107)
NAS 服務器在存儲系統上屬於軟體元件，專門用於管理 SMB/NFS 協定進行數據傳輸的操作。**必須設定一組 NAS 服務器才能接續建立網路檔案共用存儲**。有了 NAS 服務器才能支援 SMB/NFS 網路檔案共用。**NAS 服務器在每組 SP 上運行**（UnityVSA 僅有一組 SPA），透過設定的界面與網路主機進行通訊，透過之後建立的檔案系統，提供主機存取檔案系統以達網路共用檔案的目的。

建立 NAS 服務器時**預設啟用 NFSv3 協定**。使用以下命令建立 NAS 服務器。

```bash
nas_name="NasServer_1"
## NAS 服務器需指定 SP Owner
nas_spOwner='spa'
pool_name='vPool_02'

uemcli -sslPolicy accept -noHeader -d ${unity} -u ${admin_user} -p ${admin_new_pass} /net/nas/server create -name "${nas_name}" -poolName "${pool_name}" -sp ${nas_spOwner}

ID = nas_1
Operation completed successfully.
```

使用以下命令檢視建立的 NAS 服務器。
```bash
uemcli -sslPolicy accept -noHeader -d ${unity} -u ${admin_user} -p ${admin_new_pass} /net/nas/server show

1:    ID                            = nas_1
      Name                          = NasServer_1
      NetBIOS name                  = 
      SP                            = spa
      Storage pool                  = pool_2
      Interface                     = 
      NFS enabled                   = yes
      NFSv3 enabled                 = yes
      NFSv4 enabled                 = no
      CIFS enabled                  = no
      Multiprotocol sharing enabled = no
      Unix directory service        = none
      Health state                  = OK (5)
```

從 Unisphere UI 界面 **STORAGE** > **File** > **NAS Servers** 檢視 NAS 服務器。
![](https://i.imgur.com/9nXKpGK.png)

### 調整 NAS 服務器設定

```bash
uemcli -sslPolicy accept -noHeader -d ${unity} -u ${admin_user} -p ${admin_new_pass} /net/nas/server -name "${nas_name}" set -enablePacketReflect yes

ID = nas_1
Operation completed successfully.
```

:::info
-enablePacketReflect: 啟用進出封包使用同一界面，預設值為 `yes`。但在測試時發現並未啟用。
:::

### 顯示 NAS 服務器狀態

```bash
uemcli -sslPolicy accept -noHeader -d ${unity} -u ${admin_user} -p ${admin_new_pass} /net/nas/server show -detail                                    
1:    ID                                          = nas_1
      Name                                        = NasServer_1
      NetBIOS name                                = 
      SP                                          = spa
      Storage pool                                = pool_2
      Interface                                   = 
      NFS enabled                                 = yes
      NFSv3 enabled                               = yes
      NFSv4 enabled                               = no
      CIFS enabled                                = no
      Workgroup                                   = 
      Windows domain                              = 
      Multiprotocol sharing enabled               = no
      Unix directory service                      = none
      Auto user mapping enabled                   = 
      Default Unix user                           = 
      Default Windows username                    = 
      Extended Unix credentials enabled           = no
      Credentials cache retention                 = 15m
      Username translation                        = 
      Packet Reflect enabled                      = yes
      Health state                                = OK (5)
      Health details                              = "The component is operating normally. No action is required."
      Type                                        = 64
      Replication type                            = none
      Synchronous replication type                = none
      Replication destination                     = no
      Backup only                                 = no
      Migration Destination                       = no
      Preferred production interfaces overridden  = 
      Preferred production IPv4 interface         = auto
      Preferred production IPv6 interface         = auto
      Preferred backup and DR test IPv4 interface = auto
      Preferred backup and DR test IPv6 interface = auto
      Source preferred production IPv4 interface  = 
      Source preferred production IPv6 interface  = 
      File space used                             = 2458501120 (2.2G)
      Data Reduction space saved                  = 0
      Data Reduction percent                      = 0%
      Data Reduction ratio                        = 1.00:1
```

## 管理 NAS 界面
[](pp.125)
NAS 界面表示 NAS 服務器所配置的網路界面。

### 建立 NAS 界面
使用以下命令建立 NAS 使用界面。

```bash
nas_id='nas_1'
nas_name="NasServer_1"
nas_ifPort='spa_eth1'
nas_ifIp='10.7.155.88'
nas_ifNetmask='255.255.255.0'
nas_ifGateway='10.7.155.254'
nas_ifRole='production'  ## Default production | backup

uemcli -sslPolicy accept -noHeader -d ${unity} -u ${admin_user} -p ${admin_new_pass} /net/nas/if create -serverName "${nas_name}" -port ${nas_ifPort} -addr ${nas_ifIp} -netmask ${nas_ifNetmask} -gateway ${nas_ifGateway} -role ${nas_ifRole}

ID = if_4
Operation completed successfully.
```

### 檢視 NAS 界面
```bash
uemcli -sslPolicy accept -noHeader -d ${unity} -u ${admin_user} -p ${admin_new_pass} /net/nas/if show -detail

1:    ID                 = if_4
      NAS server         = nas_1
      Port               = spa_eth1
      VLAN ID            = 
      IP address         = 10.7.155.88
      Subnet mask        = 255.255.255.0
      Gateway            = 10.7.155.254
      MAC address        = 00:50:56:B3:21:AA
      SP                 = spa
      Preferred          = yes
      Health state       = OK (5)
      Health details     = "The component is operating normally. No action is required."
      Role               = production
      Replication sync   = 
      Source IP address  = 
      Source VLAN ID     = 
      Source subnet mask = 
      Source gateway     = 
```

Unisphere UI 界面 **STORAGE** > **File** > **NAS Servers**，選擇 NAS 服務器編輯檢視。  
- General
  ![](https://i.imgur.com/9hz3WyP.png)
- Network > Interfaces & Routes
  ![](https://i.imgur.com/HXSmUwH.png)
- Network > Routers to External Services
  ![](https://i.imgur.com/W0VTyQa.png)

### 刪除 NAS 界面

```bash
nas_if='if_6'

uemcli -sslPolicy accept -noHeader -d ${unity} -u ${admin_user} -p ${admin_new_pass} /net/nas/if -id ${nas_if} delete
```

:::warning
刪除該界面有可能會中斷正連接使用中的主機系統。
:::

:::info
- NAS 服務器所使用的 NAS 界面，在 Unisphere UI 界面需編輯 NAS 服務器內容時顯示。
- 以命令 `/net/if show` 可顯示所有配置的界面資訊。

  ```bash
  uemcli -sslPolicy accept -noHeader -d ${unity} -u ${admin_user} -p ${admin_new_pass} /net/if show                      
  1:    ID               = mgmt_ipv4
        Type             = mgmt
        NAS server       = 
        Port             = 
        VLAN ID          = 
        IP address       = 10.7.155.85
        Subnet mask      = 255.255.255.0
        Gateway          = 10.7.155.254
        IPv4 mode        = static
        IPv4 address     = 10.7.155.85
        IPv4 subnet mask = 255.255.255.0
        IPv4 gateway     = 10.7.155.254
        IPv6 mode        = 
        IPv6 address     = 
        IPv6 gateway     = 
        SP               = 
        Preferred        = 

  2:    ID               = if_4
        Type             = file
        NAS server       = nas_1
        Port             = spa_eth1
        VLAN ID          = 
        IP address       = 10.7.155.88
        Subnet mask      = 255.255.255.0
        Gateway          = 10.7.155.254
        IPv4 mode        = 
        IPv4 address     = 10.7.155.88
        IPv4 subnet mask = 255.255.255.0
        IPv4 gateway     = 10.7.155.254
        IPv6 mode        = 
        IPv6 address     = 
        IPv6 gateway     = 
        SP               = spa
        Preferred        = yes

  3:    ID               = if_2
        Type             = replication
        NAS server       = 
        Port             = spa_eth1
        VLAN ID          = 
        IP address       = 10.7.155.86
        Subnet mask      = 255.255.255.0
        Gateway          = 10.7.155.254
        IPv4 mode        = 
        IPv4 address     = 10.7.155.86
        IPv4 subnet mask = 255.255.255.0
        IPv4 gateway     = 10.7.155.254
        IPv6 mode        = 
        IPv6 address     = 
        IPv6 gateway     = 
        SP               = spa
        Preferred        = yes

  5:    ID               = if_3
        Type             = iscsi
        NAS server       = 
        Port             = spa_eth0
        VLAN ID          = 
        IP address       = 10.7.155.87
        Subnet mask      = 255.255.255.0
        Gateway          = 10.7.155.254
        IPv4 mode        = 
        IPv4 address     = 10.7.155.87
        IPv4 subnet mask = 255.255.255.0
        IPv4 gateway     = 10.7.155.254
        IPv6 mode        = 
        IPv6 address     = 
        IPv6 gateway     = 
        SP               = spa
        Preferred        = 
  ```
:::

## 管理 NFS 服務器
[](pp.144)
由於建立 NAS 服務器時預設已經啟用 NFSv3，所以 NFS 服務器已經自動建立完成。

### 建立 NFS 服務器
每個 NAS 服務器僅能建立一組 NFS 服務器。對於 CIFS 服務器亦然！

若要在 NAS 服務器 `${nas_name}` 建立 NFS 服務器（支援 MFSv3 & NFSv4），可參考以下命令。

```bash
nfsv3_enabled='yes'
nfsv4_enabled='yes'
nfs_secure='no'

uemcli -sslPolicy accept -noHeader -d ${unity} -u ${admin_user} -p ${admin_new_pass} /net/nas/nfs create -serverName ${nas_name} -v3 ${nfsv3_enabled} -v4 ${nfsv4_enabled} -secure ${nfs_secure}
```

### 檢視 NFS 服務器
使用以下命令顯示 NFS 服務器狀態。
```bash
uemcli -sslPolicy accept -noHeader -d ${unity} -u ${admin_user} -p ${admin_new_pass} /net/nas/nfs show -detail 

1:    ID                                = nfs_1
      NAS server                        = nas_1
      NFSv3 enabled                     = yes
      NFSv4 enabled                     = no
      Hostname                          = 
      Secure NFS enabled                = no
      Kerberos Domain Controller type   = 
      Service principal name            = 
      Extended Unix credentials enabled = no
      Credentials cache retention       = 15m
```

### 更改 NFS 服務器設定
由於預設啟用 NFSv3，若想同時支持 NFSv4 協定，可以變更設定。

```bash
nfs_id='nfs_1'
nfsv4_enabled='yes'

uemcli -sslPolicy accept -noHeader -d ${unity} -u ${admin_user} -p ${admin_new_pass} /net/nas/nfs -id ${nfs_id} set -v4 ${nfsv4_enabled}

ID = nfs_1
Operation completed successfully.
```

![](https://i.imgur.com/W375EN7.png)


## 管理檔案系統
檔案系統（File System）是存儲系統上為主機提供基於檔案存儲資源的邏輯容器。在 NAS 服務器上需要配置檔案系統，負責維護及管理檔案系統，並建立網路分享，網路上的主機根據支援的協定進行存儲共享存取。

### 建立 NFS 檔案系統
[](pp.322)
建立檔案系統的目的，在於決定要使用 CIFS/NFS 協定進行資料存放區的分享。這裡的目標為提供 NFS 檔案共享，所以需要建立 NFS 檔案系統，會與後續建立的 NFS 網路共享相關聯使用。

:::info
**檔案系統建立條件**
- 至少有一組存儲池
- 至少有一組 NAS 服務器

目前簡單的理解，就是在指定的存儲空間中劃分一塊空間並建立網路共享的檔案系統，透過與指定的 NAS 服務器相關聯，提供 NAS 服務器配置的網路共享協定服務。
:::


根據以下需求建立 NFS 檔案系統。
| | |
| --- | --- |
| 名稱 | NFS_FS01 |
| 描述 | NFS File System 01 for Test |
| 類型 | NFS |
| 大小 | 50GB |
| Thin | yes |
| NAS Server | NasServer_1（id: nas_1）|
| 存儲池 | vPool_02（pool_2） |


可使用以下命令完成。
```bash
filesystem_name="NFS_FS01"
filesystem_descr='NFS File System 01 for Test'
## nfs, cifs, multiprotocol
filesystem_type='nfs'
filesystem_size='50G'
filesystem_thin='yes'
filesystem_dataReduction='no'
filesystem_advencedDedup='no'
## forbideenSmb(Default), allowedAll, forbiddenAll
filesystem_folderRenamePolicy='forbideenSmb'
## mandatory(Default), advisory
filesystem_lockingPolicy='mandatory'
## startHighThenAuto(default), auto, highest, lowest
filesystem_fastvpPolicy='auto'
filesystem_replDest=''
## Default NULL.  nfs, cifs
filesystem_eventProrocols='nfs'
nas_name='NasServer_1'
nas_id='nas_1'
pool_id='pool_2'
pool_name='vPool_02'

uemcli -sslPolicy accept -noHeader -d ${unity} -u ${admin_user} -p ${admin_new_pass} /stor/prov/fs create -name "${filesystem_name}" -descr "${filesystem_descr}" -serverName "${nas_name}" -poolName "${pool_name}" -size ${filesystem_size} -thin ${filesystem_thin} -type ${filesystem_type} -fastvpPolicy ${filesystem_fastvpPolicy}

ID = res_4
Operation completed successfully.
```

### 顯示 NFS 檔案系統

```bash
uemcli -sslPolicy accept -noHeader -d ${unity} -u ${admin_user} -p ${admin_new_pass} /stor/prov/fs show

1:    ID                   = res_4
      Name                 = NFS_FS01
      Description          = NFS File System 01 for Test
      Health state         = OK (5)
      File system          = fs_1
      Server               = nas_1
      Storage pool ID      = pool_2
      Storage pool         = vPool_02
      Format               = UFS64
      Protocol             = nfs
      Access policy        = unix
      Folder rename policy = forbiddenSmb
      Locking policy       = mandatory
      Size                 = 53687091200 (50.0G)
      Size used            = 1620312064 (1.5G)
      Maximum size         = 54975581388800 (50.0T)
      Protection size used = 0
```

Unisphere UI 界面 **STORAGE** > **File** > **File Systems** 檢視檔案系統。  
![](https://i.imgur.com/aPKxALx.png)

## 管理 NFS 網路共享
NFS 網路共享一般提供 Linux/UNIX 主機存取檔案系統存儲。NFS 網路共享（NFS Share）則與 NFS 檔案系統（NFS File System）相關聯。

### 建立 NFS 分享
[](pp.348)

#### 路徑配置
- 建立 NFS 分享服務之前，一定要先[**建立 NFS 檔案系統**](#建立-NFS-檔案系統)。
- **Local Path** 表示提供存取分享檔案系統的**相對路徑名稱**，預設為檔案系統的根目錄 **`/`**，指定的 Local Path 必須要存在，否則建立分享服務時會產生錯誤。
  - 第一次建立是以**檔案系統的根目錄**為預設目錄。
  - **每一個 NFS 分享都必須要有唯一的 Local Path**。以下圖為例，**`/NFS_FS01/`** 已經屬於另一個 NFS 分享的 Local Path，所以在使用同一個檔案系統建立新的 NFS 分享時會發生 **NFS Local Path already in use** 錯誤。
    ![](https://i.imgur.com/094YX11.png)
  - 要解決上述錯誤，請**先使用有讀寫權限的掛載分享檔案系統根目錄，建立新的目錄作為 NFS 分享使用的 Local Path**。
    ![](https://i.imgur.com/WbQdE4o.png)
- **Export Path** 是主機使用 NFS 分享時要連接的路徑（或掛載的目錄）。在配置時會與 **Share Name** 同步。

#### 主機存取權限（Host Access）
- 預設存取權限（Default Access）。可提供指定存取主機進行配置時採用的預設權限，或是未指定主機的預設存取權限。
  - Read-Only（ro）
  - Read/Write（rw）
  - Read-Only, allow root（roroot）
  - Read/Write, allow root（root) 具有 <font color=red>**root 最高讀寫存取權限**</font>，可作為配置網路檔案分享初始化資料使用。<font color=red>**極度不安全，應小心使用**</font>
  - No Access（na）
  ![](https://i.imgur.com/DS1aami.png)
- **進階主機管理（Advanced host management）** 指定主機存取權限列表時，可以採用 **`/remote/host`** 物件，就是在 **ACCESS** > **Hosts** 和 **ACCESS** > **VMware** > **ESXi Hosts** 所加入的主機物件。或是使用 **`/remote/host show`** 取得相關物件。
  ![](https://i.imgur.com/CRy8GNR.png)
- 若不使用進階主機管理方式指定主機，可採用主機列表。這部份與建立存取主機時使用的方式相同。多筆紀錄則用 **`','`** 區隔。
  - 主機名稱（Hostname）
  - IP 位址（IP Address），可為 IPv4 或 IPv6。
  - 子網路（Subnet）。可用 `192.168.1.0/255.255.255.0` 或 `192.168.1.0/24` 格式。 
  - 網域（Domain）。可用 `*.example.com` 包含 `one.example.com` 及 `two.example.com`。但不包含 `one.two.example.com`。因為 **`.`** 不包含在通用字元使用中。
  - 網路群組(Netgroups)。在群組名稱前加上 `@` 作為識別，**需搭配 NIS 服務**。
- **注意**，管理主機列表僅能選擇上述兩者之一使用，且已採用其中一種方式配置管理主機，就是主機列表已經存在時，就**只能沿用無法變更**（除非清除）。

根據需求及上述說明，採用以下命令完成任務。
```bash
nfs_name='unity_nfs'
nfs_descr='NFS Share for Test'
nfs_path='/'
## na(Default), ro, rw, roroot, root
nfs_defAccess='na'
## yes(Default) -> /remote/host show to check host_id
nfs_advHostMgmtEnabled='no'
##
nfs_roHosts='10.7.1.0/24'
nfs_rwHosts='10.7.1.75'
nfs_roRootHosts=''
nfs_rootHosts='10.7.1.42'
nfs_naHosts=''
## Securuty level: sys(Default), krb5, krb5i, krb5p (low -> high)
nfs_minSecurity='sys'
nfs_allowSuid='yes' ## yes(Default), no
nfs_anonUid='4294967294'
nfs_anonGid='4294967294'

filesystem_name='NFS_FS01'
filesystem_id='res_4'

uemcli -sslPolicy accept -noHeader -d ${unity} -u ${admin_user} -p ${admin_new_pass} /stor/prov/fs/nfs create -name "${nfs_name}" -descr "${nfs_descr}" -fsName "${filesystem_name}" -path "${nfs_path}" -defAccess ${nfs_defAccess} -advHostMgmtEnabled ${nfs_advHostMgmtEnabled} -roHosts "${nfs_roHosts}" -rwHosts "${nfs_rwHosts}" -rootHosts "${nfs_rootHosts}"

ID = NFSShare_3
Operation completed successfully.
```

### 顯示 NFS 分享
可使用 NFS 分享 ID 和名稱或是關聯檔案系統的 ID 和名稱檢視資訊。

```bash
nfs_name='unity_nfs'

uemcli -sslPolicy accept -noHeader -d ${unity} -u ${admin_user} -p ${admin_new_pass} /stor/prov/fs/nfs -name ${nfs_name} show -detail

1:    ID                   = NFSShare_3
      Name                 = unity_nfs
      Description          = NFS Share for Test
      File system          = res_4
      Local path           = /
      Export path          = 10.7.155.88:/unity_nfs
      Role                 = production
      Default access       = na
      Minimum security     = sys
      Advanced host mgmt   = no
      No access hosts      = 
      Read-only hosts      = 10.7.1.0/255.255.255.0
      Read/write hosts     = 10.7.1.75
      Read-only root hosts = 
      Root hosts           = 10.7.1.42
      Creation time        = 2022-10-28 06:13:33
      Last modified time   = 2022-11-01 06:30:40
      Allow SUID           = yes
      Anonymous UID        = 4294967294
      Anonymous GID        = 4294967294
```

![](https://i.imgur.com/hMN4TYf.png)


### 變更 NFS 分享
主機存取列表為**覆蓋選項**，變更時請指定**完整列表**。

使用以下命令變更 NFS 分享項目：
- 增加無法存取主機（No Access）: 10.7.1.100, 10.7.1.101
- 增加一組最高存取權限主機（Read/Write, allow root）: 10.7.1.40
- 變更預設存取權限為唯讀（Read-Only, ro）
```bash
nfs_name='unity_nfs'
nfs_naHosts='10.7.1.100,10.7.1.101'
nfs_rootHosts='10.7.1.42,10.7.1.40'
nfs_defAccess='ro'

uemcli -sslPolicy accept -noHeader -d ${unity} -u ${admin_user} -p ${admin_new_pass} /stor/prov/fs/nfs -name ${nfs_name} set -naHosts ${nfs_naHosts} -rootHosts ${nfs_rootHosts} -defAccess ${nfs_defAccess}

ID = NFSShare_3
Operation completed successfully.
```

![](https://i.imgur.com/ZXPngEN.png)

:::info
- 在進行 NFS 空間掛載前，已經透過具備 root 權限建立以下檔案及目錄。
- `README`: 所有人皆可讀，僅 root 有讀寫權限。
- `README_ROOT_Only`: 僅 root 有讀寫權限。
- `richard`目錄: 所有人皆可進入及讀的權限，僅 root 和 UID/GID=1000 有讀寫權限。
  - 測試環境的主機並沒有 NIS 或 LDAP。各主機的帳號自行管理。
  - `richard@10.7.1.40` 的 UID/GID=1000。
  - `robot31@10.7.150.176` 的 UID/GID=1000。 
- `shared_for_everyone`目錄: 所有人都有讀寫權限，且會關聯其建立檔案或目錄的擁有者（Sticky Bits）。就像 `/tmp` 目錄一樣。
```bash
drwxr-xr-x. 2 root    root    8192 11月  1 09:19 Downloads
drwxr-xr-x. 2 root    root    8192 10月 28 08:19 lost+found
-rw-r--r--. 1 root    root      19 11月  1 08:41 README
-rw-r-----. 1 root    root      19 11月  1 08:42 README_ROOT_Only
drwxr-xr-x. 2 richard richard  152 11月  1 09:03 richard
drwxrwxrwt. 2 root    root     152 11月  1 11:11 shared_for_everyone
```
- 使用 Unity NFS 檔案共享空間，應該也是要透過 root 管理權限，先將掛載的空間好好"整理"一下。
:::


## 掛載分享測試
**測試主機**
- Fedora: 10.7.1.40
- CentOS: 10.7.1.75
- PhotonOS: 10.7.150.176
  
### 確認 NFS 服務主機
使用以下命令顯示 NFS 服務主機提供的掛載資訊。

```bash
showmount -e nfs-serverName or IP
```
:::info
若發現沒有 **`showmount`** 命令，可能是缺少 **`nfs-utils`**。只要透過作業系統進行安裝即可。  
以下是 VMware Photon OS 的安裝方式。
```bash
tdnf install nfs-utils
```
:::

檢視掛載資訊。
```bash
showmount -e 10.7.155.88
Export list for 10.7.155.88:
/NFS_FS01/Downloads 10.7.150.176/255.255.255.255
/myDownloads        10.7.150.176/255.255.255.255
/NFS_FS01           10.7.1.0/255.255.255.0,10.7.1.75/255.255.255.255,10.7.1.42/255.255.255.255,10.7.1.40/255.255.255.255
/unity_nfs          10.7.1.0/255.255.255.0,10.7.1.75/255.255.255.255,10.7.1.42/255.255.255.255,10.7.1.40/255.255.255.255
```

並從 Unisphere GUI 界面對照一下所取得的相關掛載資訊。
![](https://i.imgur.com/uEDWjpl.png)

:::info
- **NFS_FS01** 是檔案系統名稱。
- **unity_nfs** 和 **myDownloads** 是分享名稱。前面加上 **:/** 作為分享（的相對）路徑，也就是 **Export Path**。
  - **`:/unity_nfs`** 就是表示 **`/NFS_FS01/`**。 
  - **`:/myDownloads`** 就是表示 **`/NFS_FS01/Downloads/`**。
- **/NFS_FS01(/)** 和 **/NFS_FS01/Downloads(/)** 應該屬於檔案系統的絕對路徑，為了便利使用，採用相對路徑 **Export Path** 使用就可以了！
- **:/unity_nfs** 預設存取政策是 **Read-Only(ro)**。所以**一般主機皆可以掛載空間，但僅提供唯讀權限**，在主機存取列表的主機，就按照指定的存取權限進行管控。
- **:/myDownloads** 預設存取政策是 **No Access(na)**。所以**一般主機無法掛載空間**，僅能根據主機存取列表中的主機及權限提供分享。 
:::

### 掛載 NFS 服務檔案系統
接著就用測試主機來掛載 Unity 分享的 NFS 存儲空間吧！

```bash
mount [-t nfs] nfs-serverName or IP:/exportPath /mountpoint
```

#### 存取主機及權限
##### unity_nfs (/NFS_FS01/)
| Host | Host Access List | Default Acess | Result |
| --- | --- | --- | --- |
| 10.7.1.40 | Read/Write, allow root | Read-Only | [OK] R/W, allow root |
| 10.7.1.75 | Read/Write | Read-Only | [OK] Read/Write |
| 10.7.150.176 | X | Read-Only | [OK] Read-Only |

##### myDownloads (/NFS_FS01/Downloads)
| Host | Host Access List | Default Acess | Result |
| --- | --- | --- | --- |
| 10.7.1.40 | X | No Access | [No] No Access | 
| 10.7.1.75 | X | No Access | [No] No Access |
| 10.7.150.176 | Read/Write | No Access | [YES] Read/Write |

##### 10.7.1.40
- **unity_nfs** 共享空間**成功掛載**，因為該主機的存取權限為 **Read/Write, allow Root**，允該主機的**一般使用者讀寫**，也<font color=red>**包含 root 讀寫權限**</font>。
  ```bash
  $ sudo mount 10.7.155.88:/unity_nfs /mnt/unity
  ```
  
- 檢視系統中掛載的相關資訊。
  ```bash
  $ mount | grep '/mnt/unity'
  $ 10.7.155.88:/unity_nfs on /mnt/unity type nfs4 (rw,relatime,vers=4.1,rsize=65536,wsize=65536,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=10.7.1.40,local_lock=none,addr=10.7.155.88)
  ```

- 掛載 **myDownloads** 共享空間失敗，該主機並不存在於存取清單中，而採用預設存取權限 **No Access**，所以**掛載失敗**。
  ```bash
  $ sudo mount 10.7.155.88:/NFS_FS01/Downloads /mnt/downloads
  
  > mount.nfs: access denied by server while mounting 10.7.155.88:/myDownloads
  ```
  :::info
  這裡掛載格式使用絕對路徑 **`/NFS_FS01/Downloads`**，而不使用相對路徑 Export Path **`/myDownloads`**，也是可以的。
  :::

- 切換目錄至 **`/mnt/unity`**，產生以下錯誤訊息。目錄 **`Downloads`** 其實是對應檔案分享 **/NFS_FS01/Downloads** 的 **Local Path**，而 10.7.1.40 該主機對於此目錄空間並無存取權限。

  ```
  $ cd /mnt/unity
  ls: cannot access 'Downloads': Operation not permitted
  
  $  cd /mnt/unity/Downloads
  -bash: cd: Downloads: Operation not permitted
  ```

##### 10.7.1.75
- 掛載狀態與 10.7.1.40 相同。
  - **unity_nfs** 掛載成功，且有讀寫權限，但沒有 root 讀寫權限。 
  - **myDownloads** 掛載失敗。

##### 10.7.150.176
- 掛載 **unity_nfs** 成功，但僅有唯讀權限。
- 掛載 **myDownloads** 成功，具有讀寫權限，但沒有 root 讀寫權限。

### 簡易權限測試
:::danger
以下進入燒腦模式！一般存儲設備管理者不會這樣的。
:::

- 進入掛載點 **`/mnt/unity`**，並使用 **`ls -l`** 檢視目錄中檔案資訊。
- 具有 **unity_nfs** 存取權限但不具 **Downloads** 存取權限的主機（10.7.1.40, 10.7.1.75），無法進入該目錄 **`/mnt/unity/Downloads`**。
- 同時具有 **unity_nfs** 和 **Downloads** 存取權限的主機（10.7.150.176），可以進入該目錄 **`/mnt/unity/Downloads`**。但對於 **unity_nfs** 檔案分享，該主機採用預設存取權限 **Read-Only**。
- 具有 **Downloads** 存取權限（Read/Write），可直接進入掛載點 **`/mnt/downloads`**，但因為沒有 **allow root** 權限，即便在該主機是以 `root` 登入使用也沒有辦法建立檔案。

![](https://i.imgur.com/RcGQC8X.png)

- 根據既有的檔案權限進行讀寫的權限測試。

![](https://i.imgur.com/KbWEdht.jpg)

- 進入共用目錄 **`shared_for_everyone`**，分別使用該系統上一般使用者及 `root` 建立對應的檔案，並確認檔案擁有者相關資訊。
- **10.7.1.40** 具有 **unity_nfs** 完整的讀寫權限，並包含 `root`。
- **10.7.1.75** 具有 **unity_nfs** 的讀寫權限，但不包含 `root`。所以透過 `root` 寫入檔案，其擁有者及群組會對應至 **`Anonymous UID/GID=4294967294`**。
- 由於 **`UID/GID=1000`** 在 10.7.1.40 和 10.7.1.75 系統上，分別屬於 `richard` 和 `robot31` 使用者，所以會在各系統的檔案會顯示不同的使用者名稱。
- 別忘了 **10.7.150.176** 對於 **unity_nfs** 只有 Read-Only 存取權限，所以無法建立檔案。
- **10.7.150.176** 主機並不存在 `UID/GID=1000` 的使用者，所以無法轉換名稱顯示。

![](https://i.imgur.com/L2czyxp.png)

:::info
**結論**
- Unity 上管理權限所標示出 **allow root**，就是一般 NFS 服務設定的 **no_root_squash**。
- Unity 上管理權限未標示出 **allow root**，就是一般 NFS 服務設定的 **root_squash**。使用 root 登入使用，會被**壓縮**成 Anonymous 使用者。
:::

# 設定 SMB/CIFS 檔案共用
根據 NFS 檔案共用的組態經驗，大致建立流程若下:

```mermaid
graph TD;
建立NAS服務器-->建立NAS界面;
建立NAS界面-->建立SMB/CIFS服務器;
建立SMB/CIFS服務器-->建立SMB/CIFS檔案系統;
建立SMB/CIFS檔案系統-->建立SMB/CIFS檔案分享;
```

## 配置 SMB/CIFS 服務一刀流
:::warning
每個 NAS 服務器僅能建立一組 SMB/CIFS 服務器。
:::

使用以下參數組態及命令，可以**一氣呵成**地完成 SMB/CIFS 檔案共用服務的配置任務。
```bash
## Create NAS Server
nas_name="NasServer_CIFS"
nas_spOwner='spa'
nas_enablePackerReflect='yes'
pool_id='pool_2'
pool_name='vPool_02'

uemcli -sslPolicy accept -noHeader -d ${unity} -u ${admin_user} -p ${admin_new_pass} /net/nas/server create -name "${nas_name}" -poolName "${pool_name}" -sp ${nas_spOwner} -enablePacketReflect ${nas_enablePackerReflect}

## Create NAS Interface
nas_ifPort='spa_eth2'
nas_ifIp='10.7.155.89'
nas_ifNetmask='255.255.255.0'
nas_ifGateway='10.7.155.254'
nas_ifRole='production'

uemcli -sslPolicy accept -noHeader -d ${unity} -u ${admin_user} -p ${admin_new_pass} /net/nas/if create -serverName "${nas_name}" -port ${nas_ifPort} -addr ${nas_ifIp} -netmask ${nas_ifNetmask} -gateway ${nas_ifGateway} -role ${nas_ifRole}

## Create SMB/CIFS Server
smb_name='CIFSserver1'
smb_workgroup='unity'
smb_netbiosname='CIFSserver1'
smb_adminPasswd='VMware1!'

uemcli -sslPolicy accept -noHeader -d ${unity} -u ${admin_user} -p ${admin_new_pass} /net/nas/cifs create -serverName "${nas_name}" -name "${smb_name}" -netbiosName "${smb_netbiosname}" -workgroup ${smb_workgroup} -adminPasswd ${smb_adminPasswd}


## Create File System for SMB/CIFS
filesystem_name="CIFS_FS01"
filesystem_descr='SMB File System 01 for Test'
## nfs, cifs, multiprotocol
filesystem_type='cifs'
filesystem_size='50G'
filesystem_thin='yes'
#filesystem_cifsSyncWrites='no'
#filesystem_cifsOpLocks='yes'
#filesystem_cifsNotifyOnWrite='no'
#filesystem_cifsNotifyOnAccess='no'
#filesystem_cifsNotifyDirDepth='512'
filesystem_fastvpPolicy='auto'
filesystem_eventProrocols='cifs'

uemcli -sslPolicy accept -noHeader -d ${unity} -u ${admin_user} -p ${admin_new_pass} /stor/prov/fs create -name "${filesystem_name}" -descr "${filesystem_descr}" -serverName "${nas_name}" -poolName "${pool_name}" -size ${filesystem_size} -thin ${filesystem_thin} -type ${filesystem_type} -fastvpPolicy ${filesystem_fastvpPolicy}

## Create SMB/CIFS Share
smb_share_name='CIFSshare'
smb_share_descr='CIFS Share for Test'
smb_share_path='/'
smb_share_continousAvailability='yes'

uemcli -sslPolicy accept -noHeader -d ${unity} -u ${admin_user} -p ${admin_new_pass} /stor/prov/fs/cifs create -name "${smb_share_name}" -descr "${smb_share_descr}" -fsName "${filesystem_name}" -path "${smb_share_path}" -enableContinuousAvailability ${smb_share_continousAvailability}
```

:::warning
建立 NAS 服務器時會預設建立 NFS 服務器，後續若要單獨提供 SMB/CIFS 服務，**可能**要將預設建立的 NFS 服務器移除。（待確認）
- 使用 Unisphere GUI 界面將預設建立的 NFS 服務取消勾選。
```bash
uemcli -sslPolicy accept -noHeader -d ${unity} -u ${admin_user} -p ${admin\_new\_pass} /net/nas/nfs -id nfs_3 delete
```
:::

## 檢視 SMB/CIFS 服務
### NAS 服務器

```bash
uemcli -sslPolicy accept -noHeader -d ${unity} -u ${admin_user} -p ${admin_new_pass} /net/nas/server -name "${nas_name}" show -detail

1:    ID                                          = nas_3
      Name                                        = NasServer_CIFS
      NetBIOS name                                = CIFSSERVER1
      SP                                          = spa
      Storage pool                                = pool_2
      Interface                                   = if_8
      NFS enabled                                 = no
      NFSv3 enabled                               = no
      NFSv4 enabled                               = no
      CIFS enabled                                = yes
      Workgroup                                   = UNITY
      Windows domain                              = 
      Multiprotocol sharing enabled               = no
      Unix directory service                      = none
      Auto user mapping enabled                   = 
      Default Unix user                           = 
      Default Windows username                    = 
      Extended Unix credentials enabled           = no
      Credentials cache retention                 = 15m
      Username translation                        = 
      Packet Reflect enabled                      = yes
      Health state                                = OK (5)
      Health details                              = "The component is operating normally. No action is required."
      Type                                        = 64
      Replication type                            = none
      Synchronous replication type                = none
      Replication destination                     = no
      Backup only                                 = no
      Migration Destination                       = no
      Preferred production interfaces overridden  = 
      Preferred production IPv4 interface         = auto
      Preferred production IPv6 interface         = auto
      Preferred backup and DR test IPv4 interface = auto
      Preferred backup and DR test IPv6 interface = auto
      Source preferred production IPv4 interface  = 
      Source preferred production IPv6 interface  = 
      File space used                             = 6499909632 (6.0G)
      Data Reduction space saved                  = 0
      Data Reduction percent                      = 0%
      Data Reduction ratio                        = 1.00:1
```

![](https://i.imgur.com/y6D81o5.png)

![](https://i.imgur.com/UJunDnH.png)

```bash
uemcli -sslPolicy accept -noHeader -d ${unity} -u ${admin_user} -p ${admin_new_pass} /net/nas/cifs -serverName "${nas_name}" show -detail

1:    ID                            = cifs_1
      NAS server                    = nas_3
      Name                          = 
      Description                   = 
      NetBIOS name                  = CIFSSERVER1
      Windows domain                = 
      Last used organizational unit = 
      Workgroup                     = UNITY
```

![](https://i.imgur.com/zrvHU5p.png)

:::info
在 Windows 環境應該沒有區分大小寫，所以這裡設定結果大致都會使用**大寫**。
:::

### NAS 界面

```bash
uemcli -sslPolicy accept -noHeader -d ${unity} -u ${admin_user} -p ${admin_new_pass} /net/nas/if -serverName "${nas_name}" show -detail

1:    ID                 = if_8
      NAS server         = nas_3
      Port               = spa_eth2
      VLAN ID            = 
      IP address         = 10.7.155.89
      Subnet mask        = 255.255.255.0
      Gateway            = 10.7.155.254
      MAC address        = 00:50:56:B3:74:D5
      SP                 = spa
      Preferred          = yes
      Health state       = OK (5)
      Health details     = "The component is operating normally. No action is required."
      Role               = production
      Replication sync   = 
      Source IP address  = 
      Source VLAN ID     = 
      Source subnet mask = 
      Source gateway     = 
```

![](https://i.imgur.com/OXbaIL0.png)

![](https://i.imgur.com/wpcyzIr.png)

### SMB/CIFS 檔案系統

```bash
uemcli -sslPolicy accept -noHeader -d ${unity} -u ${admin_user} -p ${admin_new_pass} /stor/prov/fs  -serverName "${nas_name}" show -detail
1:    ID                             = res_5
      Name                           = CIFS_FS01
      Description                    = SMB File System 01 for Test
      Health state                   = OK (5)
      Health details                 = "The component is operating normally. No action is required."
      File system                    = fs_2
      Server                         = nas_3
      Storage pool ID                = pool_2
      Storage pool                   = vPool_02
      Format                         = UFS64
      Protocol                       = cifs
      Access policy                  = windows
      Folder rename policy           = forbiddenSmb
      Locking policy                 = mandatory
      Size                           = 53687091200 (50.0G)
      Size used                      = 1622458368 (1.5G)
      Maximum size                   = 54975581388800 (50.0T)
      Thin provisioning enabled      = yes
      Data Reduction enabled         = no
      Data Reduction space saved     = 0
      Data Reduction percent         = 0%
      Data Reduction ratio           = 1.00:1
      Advanced deduplication enabled = no
      Current allocation             = 283156480 (270.0M)
      Preallocated                   = 2401198080 (2.2G)
      Total Pool Space Used          = 4041252864 (3.7G)
      Minimum size allocated         = 
      Protection size used           = 0
      Snapshot count                 = 0
      Protection schedule            = 
      Protection schedule paused     = 
      FLR mode                       = Disabled
      FLR has protected files        = 
      FLR clock time                 = 
      FLR max retention date         = 
      FLR min retention period       = 
      FLR default retention period   = 
      FLR max retention period       = 
      FLR auto lock enabled          = 
      FLR auto delete enabled        = 
      FLR policy interval            = 
      Error threshold                = 95%
      Warning threshold              = 75%
      Info threshold                 = 0%
      CIFS synchronous write         = no
      CIFS oplocks                   = yes
      CIFS notify on write           = no
      CIFS notify on access          = no
      CIFS directory depth           = 512
      Replication type               = none
      Synchronous replication type   = none
      Replication destination        = no
      Migration destination          = no
      FAST VP policy                 = Auto-tier
      FAST VP distribution           = Extreme Performance: 63%, Performance: 0%, Capacity: 37%
      Creation time                  = 2022-11-02 09:16:01
      Last modified time             = 2022-11-02 09:16:01
      Pool full policy               = Fail Writes
      Event publishing protocols     = 
```

![](https://i.imgur.com/j0k3p8u.png)

![](https://i.imgur.com/sjmmnaO.png)

![image alt][reference]
![](https://i.imgur.com/ZbQy7Ns.png)

### SMB/CIFS 檔案共享

```bash
uemcli -sslPolicy accept -noHeader -d ${unity} -u ${admin_user} -p ${admin_new_pass} /stor/prov/fs/cifs  -fsName "${filesystem_name}" show -detail

1:    ID                   = SMBShare_1
      Name                 = CIFSshare
      Description          = CIFS Share for Test
      File system          = res_5
      Local path           = /
      Export path          = \\CIFSSERVER1\CIFSshare, \\10.7.155.89\CIFSshare
      Availability enabled = yes
      Encryption enabled   = no
      Creation time        = 2022-11-02 09:33:22
      Last modified time   = 2022-11-02 09:33:22
      Umask                = 022
      ABE enabled          = no
      BranchCache enabled  = no
      DFS enabled          = no
      Offline availability = none
```

![](https://i.imgur.com/jDZVbtE.png)

![](https://i.imgur.com/TVKMBbb.png)

### 簡易連線測試
進行到這裡，我們先測試一下 SMB/CIFS 檔案分享服務的連線狀態。因為是簡易測試這裡就先用 Linux 系統上的 `smbclient` 命令就可以了。

```bash
$ smbclient -W unity -U administrator -L //10.7.155.89
Password for [UNITY\administrator]:

	Sharename       Type      Comment
	---------       ----      -------
	CIFSshare       Disk      CIFS Share for Test
	C$              Disk      Root Service
	CHECK$          Disk      Virus Checking Service
	IPC$            IPC       IPC Service
SMB1 disabled -- no workgroup available
```

看起來沒有問題，可以看到分享的目錄資訊。接著先用 `mount` 命令掛載測試並檢視掛載資訊。

```bash
$ sudo mount -t cifs -o username=administrator //10.7.155.89/CIFSshare /mnt/unity 
🔐 Password for administrator@//10.7.155.89/CIFSshare:  ********

$ mount | grep '/mnt/unity'
//10.7.155.89/CIFSshare on /mnt/unity type cifs (rw,relatime,vers=3.1.1,cache=strict,username=administrator,uid=0,noforceuid,gid=0,noforcegid,addr=10.7.155.89,file_mode=0755,dir_mode=0755,soft,persistenthandles,nounix,serverino,mapposix,rsize=4194304,wsize=4194304,bsize=1048576,echo_interval=60,actimeo=1,closetimeo=5)
```

所以大致上在 Linux 上要使用 SMB/CIFS 檔案大致就這樣吧！


## 使用 Standalone
目前建立的 SMB/CIFS 服務器是獨立型（Standalone），並沒有加入 AD 網域。

若要管理使用者權限，可以參考官方文件 
[[Dell EMC Unity/VNX: How to connect to Standalone CIFS Server using MMC Computer Management]](https://www.dell.com/support/kbdoc/zh-tw/000022486/dell-emc-unity-vnx-how-to-connect-to-standalone-cifs-server-using-mmc-computer-management-user-correctable)，以下重點說明。

- 找出 CIFS 服務器的 NetBIOS 名稱 **CIFSSERVER1**。
  - 使用 `uemcli` 命令。
    ```bash
    uemcli -sslPolicy accept -noHeader -d ${unity} -u ${admin_user} -p ${admin_new_pass} /net/nas/server -name "${nas_name}" show        

    1:    ID                            = nas_3
        Name                          = NasServer_CIFS
        NetBIOS name                  = CIFSSERVER1
        SP                            = spa
        Storage pool                  = pool_2
    ```
  - 使用 Unisphere GUI 界面。
    ![](https://i.imgur.com/nE5ied1.png)

- 在 Windows 系統上的檔案 **`c:\Windows\system32\Drivers\etc\hosts`**，建立對應資訊。
```
# localhost name resolution is handled within DNS itself.
#       127.0.0.1       localhost
#       ::1             localhost
10.7.155.89             CIFSSERVER1
```

- 開啟 Windows 系統的命令列視窗，輸入以下命令。

```shell
$cifs_ip='10.7.155.89'
$cifs_name='CIFSSERVER1'

runas /netonly /user:$cifs_ip\administrator "mmc compmgmt.msc -a /computer=$cifs_ip"
runas /netonly /user:$cifs_name\administrator "mmc compmgmt.msc -a /computer=$cifs_name"
```

  ![](https://i.imgur.com/B9RzNJT.png)

  :::warning
  在 Windows 系統上執行相關作業，請務必確認使用**系統管理員**身份。
  :::

  命令成功執行後，會開啟電腦管理的控制台，分別用 IP 和主機名稱顯示，選擇其一使用。請在**本機使用者和群組** > **使用者** 建立使用者。
  - IP 位址顯示
  ![](https://i.imgur.com/IhvHwHU.png)
  - 主機名稱顯示
  ![](https://i.imgur.com/24F2Agc.png)

使用 **`smbuser`** 並透過 **`smbclient`** 簡易掛載測試。

```bash
$ sudo mount -t cifs -o username=smbuser,password=VMware1! //10.7.155.89/CIFSshare /mnt/unity

$ /mnt/unity mount | grep '/mnt/unity'
//10.7.155.89/CIFSshare on /mnt/unity type cifs (rw,relatime,vers=3.1.1,cache=strict,username=smbuser,uid=0,noforceuid,gid=0,noforcegid,addr=10.7.155.89,file_mode=0755,dir_mode=0755,soft,persistenthandles,nounix,serverino,mapposix,rsize=4194304,wsize=4194304,bsize=1048576,echo_interval=60,actimeo=1,closetimeo=5)
```

從電腦管理界面 **共用資料夾** > **工作階段**，可以檢視 Linux 作業系統（Dora）是透過使用者 **`smbuser`** 連線使用 SMB/CIFS 網路空間。

![](https://i.imgur.com/irgZUgm.png)

接著 Windows 作業系統同樣透過使用者 **`smbuser`** 掛載空間作為磁碟機 **`Z:`** 使用。使用命令 **`net use`** 可檢視網路連線資訊。

![](https://i.imgur.com/z81Qq6M.png)

同樣地從 **工作階段**，可以發現 Windows 作業系統（DESKTOP-FRNCH3H）的連線資訊。

![](https://i.imgur.com/K3tzyMa.png)

在 **共用資料夾** > **共用**，可檢視目前 **CIFSSERVER1** 所共用的檔案分享資訊。

![](https://i.imgur.com/WoaZXKb.png)

在 **共用資料夾** > **開啟檔案**，可檢視目前共享檔案的開啟資訊。

![](https://i.imgur.com/tLA56t6.png)

### 權限管理
因為我對於 Windows 系統不是很清楚，所以這裡就簡單地設置測試檔案及目錄，分別將權限區分為 **`smbuser`** 和 **`administrator`** 進行測試，詳細的配置還請參考 Windows 管理說明。 
- 目錄 `Administrator`: 僅供 `administrator` 進入及讀寫權限。 
- 檔案 `README_ADMIN.txt`: 僅供 `administrator` 讀寫。
- 其他目錄及檔案，使用者 `smbuser` 和 `administrator` 皆有讀寫權限。

![](https://i.imgur.com/J5zdTpj.png)

![](https://i.imgur.com/o22nRxR.png)

從 Linux 作業系統檢視也是相同的狀態。  
<img width=360 src='https://i.imgur.com/Qn1kDtG.png'><br>

就先這樣吧，太多了！

## 加入 AD 網域
使用 SMB/CIFS 檔案共享，建議的方式就是**加入 AD 網域**。
:::info
- 因為**每個 NAS 服務器僅能建立一組 SMB/CIFS 服務器**，為了測試加入 AD 網域就必須要建立另一個 SMB/CIFS 檔案分享空間。
- 若原有的 DNS 無法解析 AD 網域，可以**針對 NAS 服務器配置 DNS 服務器**。
- NAS 服務器使用的 **NAS 界面 IP 位址不能重複使用**。
:::

:::warning
建立 NAS 服務器時預設就會同時啟用 NFS 服務器，在前次建立 **`NasServer_CIFS`** 時，特別將預設的 NFS 服務器進行刪除。但本次建立 **`NAS_CIFS_AD`** 時，就故意省略此動作，發現 NAS 服務器同時存在 **NFSv3** 和 **SMB** 協定。系統上並沒有出現任何錯誤告警，且此種狀態也並不是 **Multiprotocol**。

![](https://i.imgur.com/WGLVCbr.png)
:::

### 建立 NAS-SMB 共用服務
重複使用先前使用的命令模式，只要調整編修幾個參數就可以輕鬆完成**加入 AD 網域的 SMB 服務**。
```bash
## Create NAS Server
nas_name="NAS_CIFS_AD"
nas_spOwner='spa'
nas_enablePackerReflect='yes'
pool_id='pool_2'
pool_name='vPool_02'

uemcli -sslPolicy accept -noHeader -d ${unity} -u ${admin_user} -p ${admin_new_pass} /net/nas/server create -name "${nas_name}" -poolName "${pool_name}" -sp ${nas_spOwner} -enablePacketReflect ${nas_enablePackerReflect}

## Create DNS for NAS
nas_dns_domain='sysagelab.com'
nas_dns_ip='10.7.150.201'
nas_id='nas_4'

uemcli -sslPolicy accept -noHeader -d ${unity} -u ${admin_user} -p ${admin_new_pass} /net/nas/dns -server ${nas_id} set -name "${nas_dns_domain}" -nameServer ${nas_dns_ip}

## Create NAS Interface
nas_ifPort='spa_eth3'
nas_ifIp='10.7.155.90'
nas_ifNetmask='255.255.255.0'
nas_ifGateway='10.7.155.254'
nas_ifRole='production'

uemcli -sslPolicy accept -noHeader -d ${unity} -u ${admin_user} -p ${admin_new_pass} /net/nas/if create -serverName "${nas_name}" -port ${nas_ifPort} -addr ${nas_ifIp} -netmask ${nas_ifNetmask} -gateway ${nas_ifGateway} -role ${nas_ifRole}

## Create CIFS Server to join AD Domain
## 加入 AD 網域所需調整參數
smb_ad_name='CIFS_AD'
smb_ad_descr='Join to the AD Domain'
smb_ad_domain='sysagelab.com'
smb_ad_username='administrator'
smb_ad_password='P@ssw0rd'

uemcli -sslPolicy accept -noHeader -d ${unity} -u ${admin_user} -p ${admin_new_pass} /net/nas/cifs create -serverName "${nas_name}" -name "${smb_ad_name}" -description "${smb_ad_descr}" -domain "${smb_ad_domain}" -username ${smb_ad_username} -passwd ${smb_ad_password}

## Create File System for SMB/CIFS
filesystem_name="CIFS_AD_FS01"
filesystem_descr='SMB File System 01 for AD Domain'
filesystem_type='cifs'
filesystem_size='50G'
filesystem_thin='yes'
filesystem_fastvpPolicy='auto'
filesystem_eventProrocols='cifs'

uemcli -sslPolicy accept -noHeader -d ${unity} -u ${admin_user} -p ${admin_new_pass} /stor/prov/fs create -name "${filesystem_name}" -descr "${filesystem_descr}" -serverName "${nas_name}" -poolName "${pool_name}" -size ${filesystem_size} -thin ${filesystem_thin} -type ${filesystem_type} -fastvpPolicy ${filesystem_fastvpPolicy}

## Create SMB/CIFS Share
smb_share_ad_name='CIFS_AD_Share'
smb_share_ad_descr='CIFS Share for AD Domain'
smb_share_ad_path='/'
smb_share_ad_continousAvailability='yes'

uemcli -sslPolicy accept -noHeader -d ${unity} -u ${admin_user} -p ${admin_new_pass} /stor/prov/fs/cifs create -name "${smb_share_ad_name}" -descr "${smb_share_ad_descr}" -fsName "${filesystem_name}" -path "${smb_share_ad_path}" -enableContinuousAvailability ${smb_share_ad_continousAvailability}
```

### 狀態確認
透過以下命令可以檢視 `Standalone` 和 `Join-to-AD-Domain`  SMB/CIFS 服務器的配置差異。
```bash
uemcli -sslPolicy accept -noHeader -d ${unity} -u ${admin_user} -p ${admin_new_pass} /net/nas/cifs show -detail 

1:    ID                            = cifs_2
      NAS server                    = nas_3
      Name                          = 
      Description                   = 
      NetBIOS name                  = CIFSSERVER1
      Windows domain                = 
      Last used organizational unit = 
      Workgroup                     = UNITY

2:    ID                            = cifs_3
      NAS server                    = nas_4
      Name                          = cifs_ad
      Description                   = Join to the AD Domain
      NetBIOS name                  = CIFS_AD
      Windows domain                = sysagelab.com
      Last used organizational unit = ou=Computers,ou=EMC NAS servers
      Workgroup                     =    
```

從 Unisphere GUI 界面也顯示組態內容。
![](https://i.imgur.com/Ry8yYiT.png)

```bash
uemcli -sslPolicy accept -noHeader -d ${unity} -u ${admin_user} -p ${admin_new_pass} /stor/prov/fs/cifs -name ${smb_share_ad_name} show                                                                                                       ✭ ✱
1:    ID                   = SMBShare_5
      Name                 = CIFS_AD_Share
      Description          = CIFS Share for AD Domain
      File system          = res_7
      Local path           = /
      Export path          = \\cifs_ad.sysagelab.com\CIFS_AD_Share, \\10.7.155.90\CIFS_AD_Share
```

![](https://i.imgur.com/auYgGW0.png)

連線至 AD 網域控制器檢視相關資訊。開啟 **AD Users and Computers** 會發現在 **EMC NAS servers** > **Computers** 下建立相關資訊。

![](https://i.imgur.com/LbLYmC9.png)

另外我們在 AD 網域控制器上新增一個使用者 **`unityvsa`**，用來測試是否可以透過 AD 網域驗證使用者進行掛載空間。

透過使用者 **`unityvsa`** 在 Linux 和 Winodws 作業系統測試掛載 **`\\CIFS_AD\CIFS_AD_Share`**。同時使用 **`mmc compmgmt.msc -a /computer=CIFS_AD`** 在 AD 網域控制器開啟電腦管理，可以檢視 **CIFS_AD** 的分享狀態，這個技巧前面也已經使用過了。

![](https://i.imgur.com/xtyvkzi.png)

根據上述的連線資訊，可整合 AD 網域控制器作為 SMB/CIFS 檔案共用的身份驗證及權限控管。其他詳細部份就不再討論了！

:::warning
**清除**
若想要迅速刪除 SMB/CIFS 服務資訊，只要依序完成下列 3 個步驟就可以了。
```bash
## delete CIFS Shares
uemcli -sslPolicy accept -noHeader -d ${unity} -u ${admin_user} -p ${admin_new_pass} /stor/prov/fs/cifs  -name "${smb_share_name}" delete

## delete CIFS File system
uemcli -sslPolicy accept -noHeader -d ${unity} -u ${admin_user} -p ${admin_new_pass} /stor/prov/fs -name "${filesystem_name}" delete -deleteSnapshots yes

## delete CIFS Server
uemcli -sslPolicy accept -noHeader -d ${unity} -u ${admin_user} -p ${admin_new_pass} /net/nas/cifs -name ${smb_name} delete
```
:::

UnityVSA 大致上的基礎應用及組態已經學習及測試完畢，其他進階和管理功能等有遇到再說了！

:::danger
其實，以上使用 **`uemcli`** 的方式，應該可以降低上述功能的組態難度，只要確認實際要應用佈署的架構、空間及功能，透過編輯參數的方式，就能輕鬆完成任務。  
但是上面提供的命令列卻有一個**大問題: 並沒有編寫對於輸出資訊的判讀**，所以也還是只有半自動。但對於是初學者的我來說，應該也夠用了。至於太進階的設定及問題，就交給專家吧！
:::

# 參考
- Dell Unity 資訊中心：產品文件和資訊 [[中文]](https://www.dell.com/support/kbdoc/zh-tw/000126652/dell-emc-unity-%E8%B3%87%E8%A8%8A-%E4%B8%AD%E5%BF%83-%E7%94%A2%E5%93%81-%E6%96%87%E4%BB%B6-%E5%92%8C-%E8%B3%87%E8%A8%8A), [[英文]](https://www.dell.com/support/kbdoc/zh-tw/000126652/dell-emc-unity-info-hub-product-documents-and-information?lang=en)