Same disk identifiers之KB2983588問題處理

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 會在一段時間後失效,查了好久才查到這個註解(官方有寫,你沒看活該)。

沒有留言:

張貼留言

感謝您的留言,如果我的文章你喜歡或對你有幫助,按個「讚」或「分享」它,我會很高興的。