Same disk identifiers之KB2983588問題處理
看過就好,請不要跟著做。
在處理一個 Docker 問題時,發現 Windows 系統日誌裡有非常大量的 disk 警告:
PS C:\> Get-EventLog -LogName System -EntryType Warning -Source disk -Newest 10 | fl
Index : 636983
EntryType : Warning
InstanceId : 2147745950
Message : Disk 19 has the same disk identifiers as one or more disks connected to the system. Go to Microsoft's support website (http://support.microsoft.com) and search for KB2983588 to resolve the issue.
Category : (0)
CategoryNumber : 0
ReplacementStrings : {\Device\Harddisk19\DR368, 19}
Source : disk
TimeGenerated : 11/29/2019 3:15:49 PM
TimeWritten : 11/29/2019 3:15:49 PM
UserName :
訊息說明,有大量的 disk 有著相同的 identifiers,請參考 KB2983588 來決解問題。
透過 diskpart.exe 指令,我們可以看到目前此主機的 Disk 狀態:
PS C:\> diskpart.exe
Microsoft DiskPart version 10.0.17134.1
Copyright (C) Microsoft Corporation.
On computer: xxxx
DISKPART> list disk
Disk ### Status Size Free Dyn Gpt
-------- ------------- ------- ------- --- ---
Disk 0 Online 60 GB 0 B
Disk 1 Online 200 GB 0 B
Disk 2 Online 20 GB 0 B *
Disk 3 Online 20 GB 0 B *
Disk 4 Online 20 GB 0 B *
Disk 5 Online 20 GB 0 B *
Disk 6 Online 20 GB 0 B *
Disk 7 Online 20 GB 0 B *
Disk 8 Online 20 GB 0 B *
Disk 9 Online 20 GB 0 B *
Disk 10 Online 20 GB 0 B *
Disk 11 Online 20 GB 0 B *
Disk 12 Online 20 GB 0 B *
Disk 13 Online 20 GB 0 B *
Disk 14 Online 20 GB 0 B *
Disk 15 Online 20 GB 0 B *
Disk 16 Online 20 GB 0 B *
Disk 17 Online 20 GB 0 B *
Disk 18 Online 20 GB 0 B *
Disk 19 Online 20 GB 0 B *
Disk 21 Online 20 GB 0 B *
Disk 23 Online 20 GB 0 B *
Disk 24 Online 20 GB 0 B *
Disk 25 Online 20 GB 0 B *
Disk 26 Online 20 GB 0 B *
Disk 27 Online 20 GB 0 B *
可以看到主機內有一堆 20GB 的磁碟,一看那些磁碟很明顯知道是 Windows Container,印象深刻的原因是之前的 Docker on Windows 課程被學生問到,特別查詢過,在文件內有記載,預設每個 Windows 容器的 C: 磁碟有虛擬的 20 GB 空間。趕快查明手頭上所有主機日誌(Get-EventLog
有 -ComputerName
可以遠端連線),明顯發現只有 Docker Host 中獎,也就是 Docker 在管理容器的過程中,會不斷去新增刪除那 20 GB 磁碟,運作的 Windows Container 越多,20 GB 磁碟也就越多。
參考 KB2983588 的說明,進行 Docker Host 的 Multipath-IO 功能查詢,確定伺服器沒有安裝 Multipath-IO:
這裡有一篇文章可以簡單了解:如何在支援多重路徑 I/O 的 Windows 電腦上使用 iSCSI Target
PS C:\> Get-WindowsFeature -Name *Multi* | fl
Name : Multipath-IO
DisplayName : Multipath I/O
Description : Multipath I/O, along with the Microsoft Device Specific Module (DSM) or a third-party DSM, provides support for using multiple data paths to a storage device on Windows.
Installed : False
InstallState : Available
FeatureType : Feature
Path : Multipath I/O
Depth : 1
DependsOn : {}
Parent :
ServerComponentDescriptor : ServerComponent_Multipath_IO
SubFeatures : {}
SystemService : {}
Notification : {}
BestPracticesModelId :
EventQuery :
PostConfigurationNeeded : False
AdditionalInfo : {MajorVersion, MinorVersion, NumericId, InstallName}
進行 Multipath-IO 安裝:
PS C:\> Install-WindowsFeature -Name Multipath-IO
Success Restart Needed Exit Code Feature Result
------- -------------- --------- --------------
True Yes SuccessRest... {Multipath I/O}
WARNING: You must restart this server to finish the installation process.
重新開機後,手動以 docker run
建立容器,發現還是一樣出現 same disk identifiers 警告。最後在交叉比對與測試後又發現,這個現象只有在 Windows Server Core 2016(1803) + Docker Engine 18.09.8 會發生,但在 Windows Server Core 2019(1909) + Docker Engine 19.03.5 不會發生。在 Windows Server Core 2019(1909) 上建立容器後使用 diskpart.exe 去查看 disk 狀態,已經看不到那虛擬的 20 GB Disk 了,當然沒有這個新增虛擬 Disk 的行為,也就不會再發生 Same disk identifiers。目前不確定是 Docker Engine 19.x 本身還是 Windows Server 2019 改變了這個行為。但確定的是,升級到 Windows Server Core 2019(1909) + Docker Engine 19.x 最好的解法。
注意:不要在 Windows Server 2016 安裝 Docker Engine 19.x,在 19.03.0 的 Release Notes 的 Deprecation 裡有說明:
Windows 2016 is formally deprecated from Docker Enterprise 3.0. Only non-overlay networks are supported on Windows 2016 in Docker Enterprise 3.0. EOL of Windows Server 2016 support will occur in Docker Enterprise 3.1. Upgrade to Windows Server 2019 for continued support on Docker Enterprise.。因為我中過這個雷,在 Docker Engine 19.03 一發行後,我就立即安排更新到 Windows Server Core 2016(1803) 上,結果 Docker Swarm 會在一段時間後失效,查了好久才查到這個註解(官方有寫,你沒看活該)。
沒有留言:
張貼留言
感謝您的留言,如果我的文章你喜歡或對你有幫助,按個「讚」或「分享」它,我會很高興的。