共用方式為


了解 Azure NetApp Files 中的檔案鎖定和鎖定類型

在 NAS 環境中,多個用戶端會存取相同磁碟區中的檔案。 由於 NAS 磁碟區本身並不具備應用程式感知功能,因此若多個用戶端嘗試同時寫入同一個檔案,為保護資料以免造成損毀,應用程式會將鎖定要求傳送至 NAS 伺服器,以防止其他用戶端在使用檔案時進行變更。 使用 NFS 時,檔案鎖定機制取決於所使用的 NFS 版本。

鎖定類型

有數種類型的 NFS 鎖定,包括:

共用鎖定:共用鎖定可以同時供多重處理序使用,而且只有在檔案上沒有獨佔鎖定時,才能發出。 這些鎖定適用於唯讀工作,但也可用於寫入工作 (例如資料庫更新)。

獨佔鎖定: 獨佔鎖定的運作方式與SMB中的獨佔鎖定相同:只有一個進程可以在有獨佔鎖定時使用檔案。 如果任何其他處理序已鎖定檔案,除非該處理序是透過複製分支而來,否則無法發出獨佔鎖定。

委派:委派只能與 NFSv4.x 搭配使用,而且會在啟用 NFS 伺服器選項且用戶端支援 NFSv4.x 委派時指派。 委派可對用戶端所使用的檔案建立「軟式」鎖定,以在用戶端上執行快取作業。 這可藉由減少用戶端與伺服器之間的呼叫數目來改善特定工作負載的效能,這個概念類似於 SMB 協定中的機會性鎖定。 Azure NetApp Files 目前不支援 NFSv4.x 委派。

位元組範圍鎖定:不同於鎖定整個檔案,位元組範圍鎖定只會鎖定檔案的一部分。

鎖定行為取決於鎖定的類型、用戶端作業系統版本和所使用的 NFS 版本。 請務必測試環境中的鎖定,以評估預期的行為。

NFSv3 鎖定

NFSv3 使用網路鎖定管理員 (NLM) 和網路狀態監視器 (NSM) 等輔助通訊協定來協調 NFS 用戶端與伺服器之間的檔案鎖定。 這些輔助通訊協定在 RFC-1813 中有所定義,Azure NetApp Files 會遵循此協定。

NLM 有助於建立和釋放鎖定,而 NSM 會通知其他伺服器有關伺服器重新啟動的訊息。 使用 NFSv3 鎖定時,若用戶端重新啟動,伺服器必須釋放鎖定。 伺服器重新啟動時,用戶端會提醒伺服器保留的鎖定

注意

在某些情況下,NFS 鎖定機制無法正確通訊 (例如在發生網路中斷時),導致過時鎖定殘留在伺服器上,必須手動清除。 如需這項工作的詳細資訊,請參閱檔案鎖定疑難排解

NFSv4.x 鎖定

NFSv4.x 使用 NFS 通訊協定內整合的租用型鎖定模型。 這表示沒有任何輔助服務需要維護或擔心;所有鎖定都會封裝在 NFSv4.x 通訊中。

Azure NetApp Files 支援 NFSv4.x 檔案鎖定機制,並採用租用型模型來維護所有檔案鎖定的狀態。 根據 RFC 8881 的規定,Azure NetApp Files 會「為 NFS 用戶端所持有之所有狀態定義單一租用期間。 如果用戶端未在定義的期間內續約其租用,則伺服器可能會解除與用戶端租用相關聯的所有狀態。」

這表示用戶端可以執行讀取檔案這類作業,以明確地或隱含地續約其租用。 此外,Azure NetApp Files 會定義寬限期,這是用戶端在伺服器復原期間嘗試回收鎖定狀態的特殊處理期間。

詞彙 定義
租用 Azure NetApp Files 不可撤銷地將鎖定授與用戶端的時間期間。
寬限期 用戶端在伺服器中斷時,嘗試在伺服器復原期間回收其鎖定狀態的時間期間。

Azure NetApp Files 如何處理 NFSv4.x 鎖定

在用戶端要求時,Azure NetApp Files 會根據租用發出鎖定。 Azure NetApp Files 伺服器會每隔 30 秒檢查每個用戶端的租用是否有所變更。 在用戶端重新啟動的情況下,用戶端可以在重新啟動伺服器之後,從伺服器回收所有有效的鎖定。 如果 Azure NetApp Files 伺服器重新啟動,則在重新啟動時,系統在 45 秒的寬限期內不會向用戶端發出任何新的鎖定。 在那段時間後,系統可以繼續向要求的用戶端發出鎖定。 如果無法在指定的寬限期內重新建立鎖定,則鎖定會自行到期。 此行為與 NFSv3 鎖定不同,因為不會出現需要手動中斷的過時鎖定。

在用戶端上手動建立鎖定

若要測試 NFS 鎖定,用戶端必須告知 NFS 伺服器建立鎖定。 不過,並非所有應用程式都會使用鎖定。 例如,應用程式 “vi” 將不會鎖定檔案。 這會在相同的資料夾中使用點命名慣例,建立隱藏的交換檔案,然後在應用程式關閉時認可該檔案的寫入內容。 接著,應用程式會刪除舊檔案,並將交換檔案重新命名為其檔案名稱。

不過,有公用程式可手動建立鎖定。 例如,flock 可以鎖定檔案。

若要建立檔案的鎖定,請先執行 exec 來指派數值識別碼。

# exec 4<>v4user_file

使用 flock 在檔案上建立共用或獨佔鎖定。

# flock

Usage:
 flock [options] <file|directory> <command> [command args]
 flock [options] <file|directory> -c <command>
 flock [options] <file descriptor number>

Options:
 -s  --shared             get a shared lock
 -x  --exclusive          get an exclusive lock (default)
 -u  --unlock             remove a lock
 -n  --nonblock           fail rather than wait
 -w  --timeout <secs>     wait for a limited amount of time
 -E  --conflict-exit-code <number>  exit code after conflict or timeout
 -o  --close              close file descriptor before running command
 -c  --command <command>  run a single command string through the shell

 -h, --help     display this help and exit
 -V, --version  output version information and exit

# flock -n 4

若要將檔案解除鎖定:

# flock -u -n 4

手動鎖定檔案可讓您測試檔案的開啟和編輯互動,並測試 Azure NetApp Files 中的鎖定中斷功能。

下一步