Jason在近期一個專案中,聽到夥伴對於DFS的同步一直有各種奇奇怪怪的狀況,例如,就是只有圖片同步會有問題,而且是特定的檔案無論防篡改程式如何的更正,就是不會同步出去。Jason心想! DFS…一邊挖鼻孔、一邊設定都花不到我五分鐘的東西,那有這種事情,結果悲劇就這樣發生了,從四點開始協助除錯,一路搞到九點才結束,不過還好有找到正確的問題,順利射下茶包!
Jason在近期一個專案中,聽到夥伴對於DFS的同步一直有各種奇奇怪怪的狀況,例如,就是只有圖片同步會有問題,而且是特定的檔案無論防篡改程式如何的更正,就是不會同步出去。Jason心想! DFS…一邊挖鼻孔、一邊設定都花不到我五分鐘的東西,那有這種事情,結果悲劇就這樣發生了,從四點開始協助除錯,一路搞到九點才結束,不過還好有找到正確的問題,順利射下茶包!
OK! 在開始說明這個問題之前,有幾個DFS的觀念要給各位,DFS分為具名空間及複寫功能兩種,如果你必須達成高雄、台中、台北,不管什麼人,只要進入到公司內部,開檔案都是用\\itop.local\files\的統一路徑來存取檔案,那麼你必須要設定好具名空間和分散各位的檔案伺服器,使其成為具名空間、複寫群組的成員。反之,如果你要達成的目標是自動的把指定的目錄,將目錄下所有檔案由Server A複製到Server B,那麼你只需要設定好複寫群組,就不需要設定具名空間。
一開始因為在網芳上測試時,發生一連串的怪事情,Jason登入的帳號為domain Admins下的成員,在DFS成員內的伺服器開啟網芳會出現”存取被拒! 請確認您的權限足以存取這個資料!的錯誤資訊,再次以Domain Administrator的帳戶登入到兩台DFS成員,也確認了Domain Admins已經存在兩台server的Administrators內,NTFS權限也有本機Administrators完全控制,網芳共享也設定Domain Admins擁有完全權限。 再試一次將檔案透過網芳拉到指定的位置去一樣是存取被拒,這個就沒道理了,網域管理者竟然無法存取目錄,但是竟然可以在該共享目錄下開立目錄,所以Jason第一認定! 權限表錯了! 馬上將所有DFS複寫成員退出,並將所有成員的目錄權限指定擁有者為Administrators,並且重新的由上層父目錄套用了權限,再將必要權限加入後,網芳上的拉檔案行為即正常了!
接下來依照該專案的需求,由防改系統發佈資訊到DFS複寫群組中,但是!檔案還是沒有被複寫出去,經過幾次交叉測試,發現到複寫不出去的永遠是那14個檔案!
順便解答一下網友們的問題,如何看檔案是否有複寫完成呢? 可以透過建立健康狀態報表來確認!
首先點選動作上的”建立診斷報告”
選擇”健康狀況報告”
沒有特別的需求的話,就直接依照預設值下一步下去吧!
這份報告中要包那些成員呢? 在本例中是將兩台都納入!
參照成員指的就是要以誰當比較,也就是說我們到底丟檔案主要是以誰為主,那你就選它就對啦!
計算成員上的複寫檔案及其大小,指的即是將每個目錄內有多少檔案、容量多少全統計出來!
再按下”建立”就好囉!
接下來就產生報告了!
我們想要看的,到底同步完了沒可以從報表上的”知識”看到,已接收的檔案數資訊及檔案容量,也有相關的比較資訊!
好! 回歸正題! 在一切都是ok的,但是一直出現這個錯誤!
DFS 複寫並未複寫列在上方複寫資料夾中的某些檔案,因為它們有暫存屬性集或者它們是符號連結。這個問題會影響 1 個複寫資料夾中至少 14 個檔案 (報告中顯示每個複寫資料夾最多可達 100 個檔案)。 事件識別碼: 11004
而且這些檔案,永遠就是這14個! 無法複製的就是這幾個,又過了半小時,我們發現了一個共通點,這些檔案的屬性是T,看來T指的確實是temporary 的意思了!
再查了一下屬性T應該就是屬於錯誤資訊中所說的暫存屬性了! 但是在檔案屬性工具中的只有唯讀、保存、系統、隱藏!
我們用原文來看的話,attrib是屬性,而屬性只有上述的這四種,但是各位還記得嗎?以前我們在98/XP確實是可以直接在檔案的內容屬性中去編輯檔案的屬性。
但是屬性指令來找的話,一輩子也查不到有暫存這種屬性!
不過,你可以透過FSUtil這個工具來查詢它,例如下面查到的檔案屬性是0x120,查下文的表中0x20是封存、0x100是暫存!所以這個檔案是封存+暫存的屬性!
各種屬性的值對照表如下所示:
READONLY |
0x1 |
HIDDEN |
0x2 |
SYSTEM |
0x4 |
DIRECTORY |
0x10 |
ARCHIVE |
0x20 |
DEVICE |
0x40 |
NORMAL |
0x80 |
TEMPORARY |
0x100 |
SPARSE_FILE |
0x200 |
REPARSE_POINT |
0x400 |
COMPRESSED |
0x800 |
OFFLINE |
0x1000 |
NOT_CONTENT_INDEXED |
0x2000 |
ENCRYPTED |
0x4000 |
好了! 重頭戲來了!既然已經知道是檔案暫存屬性惹的禍,那麼我們就針對這個檔案路徑下所有具有暫存屬性的檔案,給它好好的改一下! 請服用下面的Power Shell!
Get-childitem D:\Site -recurse | ForEach-Object -process {if (($_.attributes -band 0x100) -eq 0x100) {$_.attributes = ($_.attributes -band 0xFEFF)}}
※記得修改一下上面指令中的路徑喔!
Anything keeps Availability.
Anywhere keeps Integrity.
Anytime keeps Confidentiality.
keep A.I.C. = Information Security