Привет! Меня зовут Константин, я ведущий инженер по разработке ПО в компании YADRO. Разрабатываю инструменты сопровождения оборудования, которое мы производим, в том числе серверов линейки VEGMAN. Один из таких инструментов — модуль PowerShell, который позволяет управлять серверными платформами посредством BMC, или Baseboard Management Controller.
PowerShell, на мой взгляд, входит в число лучших инструментов для автоматизации рутинных операций и оперативного получения информации. Решение отлично подходит для автоматизации работы с гетерогенной инфраструктурой — например, ряда серверов разных вендоров. Разработанный в компании модуль взаимодействует с Redfish API и может работать с любым сервером, который его предоставляет. В статье рассмотрим сценарий работы с несколькими серверными платформами и проведем базовую конфигурацию, а еще я поделюсь ссылкой для его скачивания и тестирования.
Что это за модуль и в чем его задача
Обычно этот модуль мы предлагаем клиентам YADRO, которые хотят гибче управлять серверными платформами семейств YADRO X и VEGMAN. Но в теории он будет работать и для других серверов, где API реализовано через Redfish.
Модуль позволяет автоматизировать различные рутинные операции: от настройки имени хоста или указания адресов NTP-серверов до работы с журналами и аудита настроек. Если в компании уже существуют автоматизированные процессы, построенные с использованием PowerShell, то внедрение модуля пройдет практически бесшовно. Работать с ним можно сразу после подключения сервера и назначения IP-адреса на сетевом интерфейсе BMC.
Для работы модуля понадобится PowerShell версии не ниже 7.2.0. Также необходимо обеспечить доступ к BMC серверов по протоколу HTTPS. Допускается использование любого типа учетной записи, в том числе Read-Only. Если у учетной записи недостаточно прав, то при выполнении командлета выпадет ошибка.
Далее нужно скачать архив с модулем с нашего ресурса. Мы пока не можем опубликовать его в PowerShell Gallery, но в скором времени надеемся решить этот вопрос.
Импортируем файл модуля — теперь можно приступить к работе. И начнем мы с поиска информации о серверах.
Поиск серверных систем в диапазоне IP-адресов
Представим: наши новенькие серверы смонтированы в стойку, включены, на BMC назначены IP-адреса. У нас есть серийные номера этих серверов и нам нужно найти их в нашей сети управления, после чего приступить к проверкам и настройке.
За поиск серверных систем отвечает командлет Find-ServerSystems
. Для работы ему необходимо передать учетные данные доступа к серверам, а также диапазон сканируемых адресов в виде начального и конечного адреса с помощью параметров -StartIpAddress
и -EndIpAddress
соответственно или просто указать подсеть, используя параметр -Subnet
.
Первым делом создадим переменную, в которой будем хранить список серийных номеров:
$sn = @('020421006C','0204210078','0206210052','7462361800115')
Далее создадим учетные данные для доступа к нашим серверам:
$creds = New-Object System.Management.Automation.PSCredential (“admin”, (ConvertTo-SecureString “admin” -AsPlainText -Force))
Теперь воспользуемся командлетом Find-ServerSystems
, передав ему учетные данные и указав подсеть сканирования. Отфильтруем результат по серийным номерам и сохраним его для дальнейшего использования с командлетом Connect-Server
:
$servers = Find-ServerSystems -Subnet 172.20.130.0/24 -Credential $creds
$servers | ft
Hostname ManagementAddress Manufacturer Model PartNumber SerialNumber BiosVersion BmcVersion PowerState
-------- ----------------- ------------ ----- ---------- ------------ ----------- ---------- ----------
vegman-s220-02012200C4 172.20.130.4 YADRO VEGMAN S220 Server ASMVEG780102A 02012200C4 1.5.1-g84a4f2 v1.5.1r3ad9df On
vegman-s220-020921001E 172.20.130.5 YADRO VEGMAN S220 Server ASMVEG780102A 020921001E 1.5.1-g84a4f2 v1.5.1r3ad9df On
vegman-s220-0204210078 172.20.130.8 YADRO VEGMAN S220 Server ASMVEG780102A 0204210078 1.5.1-g84a4f2 v1.5.1r3ad9df On
vegman-s220-020921001D 172.20.130.14 YADRO VEGMAN S220 Server ASMVEG780102A 020921001D 1.5.1-g84a4f2 v1.5.1r3ad9df On
vegman-s220-020921001C 172.20.130.42 YADRO VEGMAN S220 Server ASMVEG780102A 020921001C 1.5.1-g84a4f2 v1.5.1r3ad9df On
vegman-s220-020921001A 172.20.130.110 YADRO VEGMAN S220 Server ASMVEG780102A 020921001A 1.5.1-g84a4f2 v1.5.1r3ad9df On
AMIFC4596F1BE84 172.20.130.114 YADRO 7384603900201 10.09.20 10.15.20 On
AMIFC4596F1BF5C 172.20.130.115 YADRO 7384603900212 10.08.20 10.14.20 On
...
AMIFC4596F1BE74 172.20.130.122 YADRO 7384603900154 10.09.20 10.17.20 On
AMIFC4596F21DB0 172.20.130.130 YADRO 7462361800115 10.26.20 10.17.20 Off
vegman-s220-0206210052 172.20.130.151 YADRO VEGMAN S220 Server ASMVEG780102A 0206210052 1.5.1-g84a4f2 v1.5.1r3ad9df On
vegman-s220-020421006C 172.20.130.152 YADRO VEGMAN S220 Server ASMVEG780102A 020421006C 1.5.1-g84a4f2 v1.5.1r3ad9df On
PS> $newServers = $servers | ? { $_.SerialNumber -in $sn }
PS> $newServers | ft
Hostname ManagementAddress Manufacturer Model PartNumber SerialNumber BiosVersion BmcVersion PowerState
-------- ----------------- ------------ ----- ---------- ------------ ----------- ---------- ----------
vegman-s220-0204210078 172.20.130.8 YADRO VEGMAN S220 Server ASMVEG780102A 0204210078 1.5.1-g84a4f2 v1.5.1r3ad9df On
AMIFC4596F21DB0 172.20.130.130 YADRO 7462361800115 10.26.20 10.17.20 Off
vegman-s220-0206210052 172.20.130.151 YADRO VEGMAN S220 Server ASMVEG780102A 0206210052 1.5.1-g84a4f2 v1.5.1r3ad9df On
vegman-s220-020421006C 172.20.130.152 YADRO VEGMAN S220 Server ASMVEG780102A 020421006C 1.5.1-g84a4f2 v1.5.1r3ad9df On
Подключение к серверам
Серверы мы нашли — будем подключаться. Для этого вызовем командлет Connect-Server
и передадим ему два параметра: учетные данные (параметр -Credential
) и адреса управления (параметр -ManagementAddress
):
Connect-Server -ManagementAddress $newServers.ManagementAddress -Credential $creds
При подключении ошибок не возникло, но все же проверим, c какими серверами установлено соединение. Для этого используем командлет Get-Connection
:
Get-Connection | ft
Id ManagementAddress ClientOriginAddress CreationDateTime ExpirationDateTime IsExpired
-- ----------------- ------------------- ---------------- ------------------ ---------
24328c52 172.20.130.8 10.199.17.218 03.05.2023 22:53:12 03.05.2023 23:53:12 False
d754f37aa7e4e172ab39363dc0d8b989 172.20.130.130 03.05.2023 22:53:10 03.05.2023 23:53:10 False
7441a116 172.20.130.152 10.199.17.218 03.05.2023 22:53:11 03.05.2023 23:53:11 False
7b186e3a 172.20.130.151 10.199.17.218 03.05.2023 22:53:10 03.05.2023 23:53:10 False
При выполнении этого командлета мы дополнительно получаем следующую информацию:
времени установки соединения (свойство CreationDateTime),
время истечения сессии (свойство ExpirationDateTime),
истекла ли сессия на текущий момент (свойство IsExpired).
Все это рассчитывается согласно настройкам времени жизни сессии на стороне сервера. Позже рассмотрим, как можно изменить время жизни сессии.
Проверка конфигурации сервера
Перейдем к проверке конфигурации сервера, начнем с процессоров.
Информация о процессорах
За ее получение отвечает командлет Get-Processor
. Выполним его и сгруппируем результат по адресу управления сервером:
Get-Processor | ft -GroupBy ManagementAddress
ManagementAddress: 172.20.130.8
Id ManagementAddress InstructionSet Manufacturer MaxSpeedMHz Model Architecture Socket TotalCores TotalThreads
-- ----------------- -------------- ------------ ----------- ----- ------------ ------ ---------- ------------
cpu0 172.20.130.8 x86-64 Intel(R) Corporation 4000 Intel(R) Xeon(R) Silver 4214R CPU @ 2.40GHz x86 CPU0 12 24
ManagementAddress: 172.20.130.130
Id ManagementAddress InstructionSet Manufacturer MaxSpeedMHz Model Architecture Socket TotalCores TotalThreads
-- ----------------- -------------- ------------ ----------- ----- ------------ ------ ---------- ------------
CPU0 172.20.130.130 Intel(R) Corporation 4000 x86 CPU0 32 64
CPU1 172.20.130.130 Intel(R) Corporation 4000 x86 CPU1 32 64
ManagementAddress: 172.20.130.151
Id ManagementAddress InstructionSet Manufacturer MaxSpeedMHz Model Architecture Socket TotalCores TotalThreads
-- ----------------- -------------- ------------ ----------- ----- ------------ ------ ---------- ------------
cpu0 172.20.130.151 x86-64 Intel(R) Corporation 4000 Intel(R) Xeon(R) Gold 6230 CPU @ 2.10GHz x86 CPU0 20 40
cpu1 172.20.130.151 x86-64 Intel(R) Corporation 4000 Intel(R) Xeon(R) Gold 6230 CPU @ 2.10GHz x86 CPU1 20 40
ManagementAddress: 172.20.130.152
Id ManagementAddress InstructionSet Manufacturer MaxSpeedMHz Model Architecture Socket TotalCores TotalThreads
-- ----------------- -------------- ------------ ----------- ----- ------------ ------ ---------- ------------
cpu0 172.20.130.152 x86-64 Intel(R) Corporation 4000 Intel(R) Xeon(R) Gold 6238R CPU @ 2.20GHz x86 CPU0 28 56
cpu1 172.20.130.152 x86-64 Intel(R) Corporation 4000 Intel(R) Xeon(R) Gold 6238R CPU @ 2.20GHz x86 CPU1 28 56
В дополнение с помощью этого командлета можно получить информацию о пустых процессорных сокетах. Для этого используйте параметр -IncludeEmptySockets
.
Информация об оперативной памяти
Данные об установленных модулях оперативной памяти получим с помощью командлета Get-Memory
:
Get-Memory | ft -GroupBy ManagementAddress
ManagementAddress: 172.20.130.130
Id ManagementAddress CapacityMiB Manufacturer PartNumber SerialNumber BaseModuleType MemoryDeviceType MemoryType DeviceLocator
-- ----------------- ----------- ------------ ---------- ------------ -------------- ---------------- ---------- -------------
CPU0_DIMM0 172.20.130.130 32768 Micron 36ASF4G72PZ-3G2R1 2131-3086AAFB RDIMM DDR4 DRAM CPU0_DIMM_A0
CPU0_DIMM1 172.20.130.130 0 NO DIMM NO DIMM NO DIMM RDIMM DDR4 DRAM CPU0_DIMM_A1
CPU0_DIMM10 172.20.130.130 0 NO DIMM NO DIMM NO DIMM RDIMM DDR4 DRAM CPU0_DIMM_F0
...
CPU0_DIMM8 172.20.130.130 32768 Micron 36ASF4G72PZ-3G2R1 2130-3063257B RDIMM DDR4 DRAM CPU0_DIMM_E0
CPU0_DIMM9 172.20.130.130 0 NO DIMM NO DIMM NO DIMM RDIMM DDR4 DRAM CPU0_DIMM_E1
CPU1_DIMM16 172.20.130.130 32768 Micron 36ASF4G72PZ-3G2R1 2130-306328E5 RDIMM DDR4 DRAM CPU1_DIMM_A0
CPU1_DIMM17 172.20.130.130 0 NO DIMM NO DIMM NO DIMM RDIMM DDR4 DRAM CPU1_DIMM_A1
CPU1_DIMM18 172.20.130.130 0 NO DIMM NO DIMM NO DIMM RDIMM DDR4 DRAM CPU1_DIMM_B0
...
CPU1_DIMM24 172.20.130.130 32768 Micron 36ASF4G72PZ-3G2R1 2130-30632247 RDIMM DDR4 DRAM CPU1_DIMM_E0
CPU1_DIMM25 172.20.130.130 0 NO DIMM NO DIMM NO DIMM RDIMM DDR4 DRAM CPU1_DIMM_E1
CPU1_DIMM26 172.20.130.130 0 NO DIMM NO DIMM NO DIMM RDIMM DDR4 DRAM CPU1_DIMM_F0
...
ManagementAddress: 172.20.130.8
Id ManagementAddress CapacityMiB Manufacturer PartNumber SerialNumber BaseModuleType MemoryDeviceType MemoryType DeviceLocator
-- ----------------- ----------- ------------ ---------- ------------ -------------- ---------------- ---------- -------------
DIMM_CPU0_A 172.20.130.8 32768 Samsung M393A4K40CB2-CVF 464A7DBC RDIMM DDR4 DRAM NODE 0 CHANNEL 0 DIMM 0 (C0A)
DIMM_CPU0_B 172.20.130.8 32768 Samsung M393A4K40CB2-CVF 464A7BFB RDIMM DDR4 DRAM NODE 0 CHANNEL 1 DIMM 0 (C0B)
DIMM_CPU0_D 172.20.130.8 32768 Samsung M393A4K40CB2-CVF 464A805A RDIMM DDR4 DRAM NODE 0 CHANNEL 3 DIMM 0 (C0D)
DIMM_CPU0_E 172.20.130.8 32768 Samsung M393A4K40CB2-CVF 464A7605 RDIMM DDR4 DRAM NODE 0 CHANNEL 4 DIMM 0 (C0E)
ManagementAddress: 172.20.130.151
Id ManagementAddress CapacityMiB Manufacturer PartNumber SerialNumber BaseModuleType MemoryDeviceType MemoryType DeviceLocator
-- ----------------- ----------- ------------ ---------- ------------ -------------- ---------------- ---------- -------------
DIMM_CPU0_A 172.20.130.151 65536 Samsung M393A8G40MB2-CVF 15A7AFDC RDIMM DDR4 DRAM NODE 0 CHANNEL 0 DIMM 0 (C0A)
DIMM_CPU0_B 172.20.130.151 65536 Samsung M393A8G40MB2-CVF 15A7AD31 RDIMM DDR4 DRAM NODE 0 CHANNEL 1 DIMM 0 (C0B)
DIMM_CPU0_D 172.20.130.151 65536 Samsung M393A8G40MB2-CVF 15A7B193 RDIMM DDR4 DRAM NODE 0 CHANNEL 3 DIMM 0 (C0D)
DIMM_CPU0_E 172.20.130.151 65536 Samsung M393A8G40MB2-CVF 15A7C2A0 RDIMM DDR4 DRAM NODE 0 CHANNEL 4 DIMM 0 (C0E)
DIMM_CPU1_A 172.20.130.151 65536 Samsung M393A8G40MB2-CVF 15A7C4ED RDIMM DDR4 DRAM NODE 1 CHANNEL 0 DIMM 0 (C1A)
DIMM_CPU1_B 172.20.130.151 65536 Samsung M393A8G40MB2-CVF 15A7C27C RDIMM DDR4 DRAM NODE 1 CHANNEL 1 DIMM 0 (C1B)
DIMM_CPU1_D 172.20.130.151 65536 Samsung M393A8G40MB2-CVF 15A7AF18 RDIMM DDR4 DRAM NODE 1 CHANNEL 3 DIMM 0 (C1D)
DIMM_CPU1_E 172.20.130.151 65536 Samsung M393A8G40MB2-CVF 15A7AFD5 RDIMM DDR4 DRAM NODE 1 CHANNEL 4 DIMM 0 (C1E)
ManagementAddress: 172.20.130.152
Id ManagementAddress CapacityMiB Manufacturer PartNumber SerialNumber BaseModuleType MemoryDeviceType MemoryType DeviceLocator
-- ----------------- ----------- ------------ ---------- ------------ -------------- ---------------- ---------- -------------
DIMM_CPU0_A 172.20.130.152 131072 Samsung M393AAG40M32-CAE 020966C8 RDIMM DDR4 DRAM NODE 0 CHANNEL 0 DIMM 0 (C0A)
DIMM_CPU0_B 172.20.130.152 131072 Samsung M393AAG40M32-CAE 020963EC RDIMM DDR4 DRAM NODE 0 CHANNEL 1 DIMM 0 (C0B)
DIMM_CPU0_C 172.20.130.152 131072 Samsung M393AAG40M32-CAE 0209671D RDIMM DDR4 DRAM NODE 0 CHANNEL 2 DIMM 0 (C0C)
DIMM_CPU0_D 172.20.130.152 131072 Samsung M393AAG40M32-CAE 02096377 RDIMM DDR4 DRAM NODE 0 CHANNEL 3 DIMM 0 (C0D)
DIMM_CPU0_E 172.20.130.152 131072 Samsung M393AAG40M32-CAE 02096371 RDIMM DDR4 DRAM NODE 0 CHANNEL 4 DIMM 0 (C0E)
DIMM_CPU0_F 172.20.130.152 131072 Samsung M393AAG40M32-CAE 020964D2 RDIMM DDR4 DRAM NODE 0 CHANNEL 5 DIMM 0 (C0F)
DIMM_CPU1_A 172.20.130.152 131072 Samsung M393AAG40M32-CAE 020963AC RDIMM DDR4 DRAM NODE 1 CHANNEL 0 DIMM 0 (C1A)
DIMM_CPU1_B 172.20.130.152 131072 Samsung M393AAG40M32-CAE 0209672E RDIMM DDR4 DRAM NODE 1 CHANNEL 1 DIMM 0 (C1B)
DIMM_CPU1_C 172.20.130.152 131072 Samsung M393AAG40M32-CAE 0209633E RDIMM DDR4 DRAM NODE 1 CHANNEL 2 DIMM 0 (C1C)
DIMM_CPU1_D 172.20.130.152 131072 Samsung M393AAG40M32-CAE 02096387 RDIMM DDR4 DRAM NODE 1 CHANNEL 3 DIMM 0 (C1D)
DIMM_CPU1_E 172.20.130.152 131072 Samsung M393AAG40M32-CAE 0209659F RDIMM DDR4 DRAM NODE 1 CHANNEL 4 DIMM 0 (C1E)
DIMM_CPU1_F 172.20.130.152 131072 Samsung M393AAG40M32-CAE 020964F4 RDIMM DDR4 DRAM NODE 1 CHANNEL 5 DIMM 0 (C1F)
Внимательный читатель может заметить, что один из серверов отображает информацию о не занятых слотах памяти. Это сервер серии YADRO X — они предоставляют немного больше дополнительной информации.
В дополнение давайте посчитаем суммарный объем оперативной памяти по каждому серверу, сложив значения свойства CapacityMiB
:
Get-Memory | group ManagementAddress | select @{n='ManagementAddress';e={$_.Name}}, @{n='TotalMemoryCapacityMiB';e={$_.Group | measure -Sum CapacityMiB | % Sum}}
ManagementAddress TotalMemoryCapacityMiB
----------------- ----------------------
172.20.130.130 131072,00
172.20.130.151 524288,00
172.20.130.152 1572864,00
172.20.130.8 131072,00
Информация о PCIе-устройствах
Перейдем к PCIe-устройствам и вызовем командлет Get-PCIeDevice
, а также сгруппируем результат.
Get-PcieDevice | ft -GroupBy ManagementAddress
ManagementAddress: 172.20.130.130
Id ManagementAddress DeviceType Manufacturer Model State PCIeFunctions
-- ----------------- ---------- ------------ ----- ----- -------------
00_03_00 172.20.130.130 SingleFunction ASPEED Technology, Inc. STAR2000 NVMe Controller Enabled {0x2000}
00_02_00 172.20.130.130 SingleFunction ASPEED Technology, Inc. VisionRGB-E2S Enabled {0x1150}
00_16_02 172.20.130.130 SingleFunction Intel Corporation Bridge Enabled {0x347A}
00_4A_05 172.20.130.130 SingleFunction Intel Corporation Bridge Enabled {0x347D}
00_00_16 172.20.130.130 MultiFunction Intel Corporation C620 Series Chipset Family MEI Controller #1 Enabled {0xA1BB, 0xA1BE, 0xA1BA}
00_00_11 172.20.130.130 MultiFunction Intel Corporation C620 Series Chipset Family MROM 0 Enabled {0xA1EC, 0xA1D2}
00_00_1C 172.20.130.130 MultiFunction Intel Corporation C620 Series Chipset Family PCI Express Root Port #1 Enabled {0xA190, 0xA195, 0xA194}
00_00_17 172.20.130.130 SingleFunction Intel Corporation C620 Series Chipset Family SATA Controller [AHCI mode] Enabled {0xA182}
00_00_14 172.20.130.130 MultiFunction Intel Corporation C620 Series Chipset Family USB 3.0 xHCI Controller Enabled {0xA1B1, 0xA1AF}
00_01_00 172.20.130.130 MultiFunction Intel Corporation I350 Gigabit Network Connection Enabled {0x1521, 0x1521}
00_30_00 172.20.130.130 MultiFunction Intel Corporation Ice Lake IEH Enabled {0x0998}
00_B0_00 172.20.130.130 MultiFunction Intel Corporation Ice Lake IEH Enabled {0x0998}
00_16_00 172.20.130.130 MultiFunction Intel Corporation Ice Lake IEH Enabled {0x0998}
00_97_00 172.20.130.130 MultiFunction Intel Corporation Ice Lake IEH Enabled {0x0998}
00_80_00 172.20.130.130 MultiFunction Intel Corporation Ice Lake IEH Enabled {0x0998}
00_00_00 172.20.130.130 MultiFunction Intel Corporation Ice Lake IEH Enabled {0x0998}
00_64_00 172.20.130.130 MultiFunction Intel Corporation Ice Lake IEH Enabled {0x0998, 0x28C0}
00_C9_00 172.20.130.130 MultiFunction Intel Corporation Ice Lake IEH Enabled {0x0998}
00_4A_00 172.20.130.130 MultiFunction Intel Corporation Ice Lake IEH Enabled {0x0998}
00_E2_00 172.20.130.130 MultiFunction Intel Corporation Ice Lake IEH Enabled {0x0998, 0x28C0}
00_80_02 172.20.130.130 SingleFunction Intel Corporation Ice Lake NorthPeak Enabled {0x3456}
00_00_02 172.20.130.130 SingleFunction Intel Corporation Ice Lake NorthPeak Enabled {0x3456}
00_00_1F 172.20.130.130 MultiFunction Intel Corporation MemoryController Enabled {0xA1A1, 0xA1CB, 0xA1A3, 0xA1A4}
00_4B_00 172.20.130.130 SingleFunction Kingston Technology Company, Inc. P1 NVMe PCIe SSD Enabled {0x2263}
00_17_00 172.20.130.130 MultiFunction Mellanox Technologies 82540EP Gigabit Ethernet Controller Enabled {0x1017, 0x1017}
ManagementAddress: 172.20.130.8
Id ManagementAddress DeviceType Manufacturer Model
-- ----------------- ---------- ------------ -----
S0B25D0 172.20.130.8 MultiFunction Intel Corporation Ethernet Connection X722 for 10GbE SFP+
S0B179D0 172.20.130.8 MultiFunction Intel Corporation Ethernet Controller XXV710 for 25GbE SFP28
S0B5D0 172.20.130.8 SingleFunction Intel Corporation I210 Gigabit Network Connection
S0B24D3 172.20.130.8 SingleFunction Intel Corporation PCI bridge
S0B23D0 172.20.130.8 SingleFunction Intel Corporation PCI bridge
S0B101D0 172.20.130.8 MultiFunction QLogic Corp. ISP2722-based 16/32Gb Fibre Channel to PCIe Adapt…
S0B27D0 172.20.130.8 SingleFunction Samsung Electronics Co Ltd NVMe SSD Controller SM981/PM981/PM983
S0B26D0 172.20.130.8 SingleFunction Samsung Electronics Co Ltd NVMe SSD Controller SM981/PM981/PM983
ManagementAddress: 172.20.130.151
Id ManagementAddress DeviceType Manufacturer Model
-- ----------------- ---------- ------------ -----
S0B3D0 172.20.130.151 SingleFunction ASPEED Technology, Inc. ASPEED Graphics Family
S0B2D0 172.20.130.151 SingleFunction ASPEED Technology, Inc. AST1150 PCI-to-PCI Bridge
S0B59D0 172.20.130.151 SingleFunction Broadcom / LSI MegaRAID SAS-3 3108 [Invader] (MegaRAID SAS 9361-8i)
S0B26D0 172.20.130.151 MultiFunction Intel Corporation Ethernet Connection X722 for 10GbE SFP+
S1B218D0 172.20.130.151 MultiFunction Intel Corporation Ethernet Connection X722 for 10GbE SFP+ (Ethernet Ne…
S0B5D0 172.20.130.151 SingleFunction Intel Corporation I210 Gigabit Network Connection
S0B4D0 172.20.130.151 SingleFunction Intel Corporation I210 Gigabit Network Connection
S0B28D0 172.20.130.151 SingleFunction Intel Corporation Non-Volatile memory controller
S0B27D0 172.20.130.151 SingleFunction Intel Corporation Non-Volatile memory controller
S1B217D3 172.20.130.151 SingleFunction Intel Corporation PCI bridge
S1B216D0 172.20.130.151 SingleFunction Intel Corporation PCI bridge
S0B25D3 172.20.130.151 SingleFunction Intel Corporation PCI bridge
S0B24D0 172.20.130.151 SingleFunction Intel Corporation PCI bridge
S1B134D0 172.20.130.151 MultiFunction Mellanox Technologies MT27800 Family [ConnectX-5] (ConnectX®-5 EN network …
ManagementAddress: 172.20.130.152
Id ManagementAddress DeviceType Manufacturer Model
-- ----------------- ---------- ------------ -----
S0B2D0 172.20.130.152 SingleFunction Non-Volatile memory controller
S0B4D0 172.20.130.152 SingleFunction ASPEED Technology, Inc. ASPEED Graphics Family
S0B3D0 172.20.130.152 SingleFunction ASPEED Technology, Inc. AST1150 PCI-to-PCI Bridge
S0B59D0 172.20.130.152 SingleFunction Broadcom / LSI MegaRAID SAS-3 3108 [Invader] (MegaRAID SAS 9361-8i)
S0B26D0 172.20.130.152 MultiFunction Intel Corporation Ethernet Connection X722 for 10GbE SFP+
S1B218D0 172.20.130.152 MultiFunction Intel Corporation Ethernet Connection X722 for 10GbE SFP+ (Ethernet Ne…
S0B6D0 172.20.130.152 SingleFunction Intel Corporation I210 Gigabit Network Connection
S0B5D0 172.20.130.152 SingleFunction Intel Corporation I210 Gigabit Network Connection
S0B28D0 172.20.130.152 SingleFunction Intel Corporation Non-Volatile memory controller
S0B27D0 172.20.130.152 SingleFunction Intel Corporation Non-Volatile memory controller
S1B217D3 172.20.130.152 SingleFunction Intel Corporation PCI bridge
S1B216D0 172.20.130.152 SingleFunction Intel Corporation PCI bridge
S0B25D3 172.20.130.152 SingleFunction Intel Corporation PCI bridge
S0B24D0 172.20.130.152 SingleFunction Intel Corporation PCI bridge
S1B134D0 172.20.130.152 MultiFunction Mellanox Technologies MT27800 Family [ConnectX-5] (ConnectX®-5 EN network …
И в качестве примера рассмотрим ситуацию, что нам необходимо собрать информацию о всех PCIe-устройствах, производитель которых, например, не Intel.
Get-PcieDevice | ? {$_.Manufacturer -notlike '*Intel*'} | ft -GroupBy ManagementAddress
ManagementAddress: 172.20.130.130
Id ManagementAddress DeviceType Manufacturer Model
-- ----------------- ---------- ------------ -----
00_03_00 172.20.130.130 SingleFunction ASPEED Technology, Inc. STAR2000 NVMe Controller
00_02_00 172.20.130.130 SingleFunction ASPEED Technology, Inc. VisionRGB-E2S
00_4B_00 172.20.130.130 SingleFunction Kingston Technology Company, Inc. P1 NVMe PCIe SSD
00_17_00 172.20.130.130 MultiFunction Mellanox Technologies 82540EP Gigabit Ethernet Controller Enabled
ManagementAddress: 172.20.130.8
Id ManagementAddress DeviceType Manufacturer Model
-- ----------------- ---------- ------------ -----
S0B101D0 172.20.130.8 MultiFunction QLogic Corp. ISP2722-based 16/32Gb Fibre Channel to PCIe Adapt…
S0B27D0 172.20.130.8 SingleFunction Samsung Electronics Co Ltd NVMe SSD Controller SM981/PM981/PM983
S0B26D0 172.20.130.8 SingleFunction Samsung Electronics Co Ltd NVMe SSD Controller SM981/PM981/PM983
ManagementAddress: 172.20.130.151
Id ManagementAddress DeviceType Manufacturer Model
-- ----------------- ---------- ------------ -----
S0B3D0 172.20.130.151 SingleFunction ASPEED Technology, Inc. ASPEED Graphics Family
S0B2D0 172.20.130.151 SingleFunction ASPEED Technology, Inc. AST1150 PCI-to-PCI Bridge
S0B59D0 172.20.130.151 SingleFunction Broadcom / LSI MegaRAID SAS-3 3108 [Invader] (MegaRAID SAS 9361-8i)
S1B134D0 172.20.130.151 MultiFunction Mellanox Technologies MT27800 Family [ConnectX-5] (ConnectX®-5 EN network …
ManagementAddress: 172.20.130.152
Id ManagementAddress DeviceType Manufacturer Model
-- ----------------- ---------- ------------ -----
S0B2D0 172.20.130.152 SingleFunction Non-Volatile memory controller
S0B4D0 172.20.130.152 SingleFunction ASPEED Technology, Inc. ASPEED Graphics Family
S0B3D0 172.20.130.152 SingleFunction ASPEED Technology, Inc. AST1150 PCI-to-PCI Bridge
S0B59D0 172.20.130.152 SingleFunction Broadcom / LSI MegaRAID SAS-3 3108 [Invader] (MegaRAID SAS 9361-8i)
S1B134D0 172.20.130.152 MultiFunction Mellanox Technologies MT27800 Family [ConnectX-5] (ConnectX®-5 EN network …
Информация о дисковой подсистеме
Для получения информацию о дисковой подсистеме есть командлет Get-StorageDrive
. Выполним его и выведем сгруппированную информацию:
Get-StorageDrive | ft -GroupBy ManagementAddress
ManagementAddress: 172.20.130.130
Id ManagementAddress CapacityBytes IsHealthy Manufacturer Model Protocol Type PartNumber SerialNumber
-- ----------------- ------------- --------- ------------ ----- -------- ---- ---------- ------------
NVMe_DeviceB_NSID1 172.20.130.130 250059350016 True N/A KINGSTON SA2000M8250G NVMe SSD 50026B76847FBFAB
SATA_Device0_Port0 172.20.130.130 480103981056 True N/A SAMSUNG MZ7KH480HAHQ-00005 SATA SSD S47MNA0R506503
SATA_Device1_Port1 172.20.130.130 480103981056 True N/A SAMSUNG MZ7KH480HAHQ-00005 SATA SSD S47MNA0R506494
SATA_Device2_Port3 172.20.130.130 1920383410176 True N/A INTEL SSDSC2KB019T8 SATA SSD PHYF122502U41P9DGN
SATA_Device3_Port4 172.20.130.130 1920383410176 True N/A INTEL SSDSC2KB019T8 SATA SSD PHYF122500RL1P9DGN
SATA_Device4_Port5 172.20.130.130 480103981056 True N/A SAMSUNG MZ7KH480HAHQ-00005 SATA SSD S47MNA0R506501
SATA_Device5_Port0 172.20.130.130 1920383410176 True N/A INTEL SSDSC2KB019T8 SATA SSD PHYF122501GH1P9DGN
SATA_Device6_Port1 172.20.130.130 1920383410176 True N/A INTEL SSDSC2KB019T8 SATA SSD PHYF122501FP1P9DGN
SATA_Device7_Port3 172.20.130.130 1920383410176 True N/A INTEL SSDSC2KB019T8 SATA SSD PHYF122501GT1P9DGN
SATA_Device8_Port4 172.20.130.130 1920383410176 True N/A INTEL SSDSC2KB019T8 SATA SSD PHYF122501C91P9DGN
SATA_Device9_Port6 172.20.130.130 1920383410176 True N/A INTEL SSDSC2KB019T8 SATA SSD PHYF122502CU1P9DGN
SATA_DeviceA_Port7 172.20.130.130 1920383410176 True N/A INTEL SSDSC2KB019T8 SATA SSD PHYF122502EH1P9DGN
ManagementAddress: 172.20.130.8
Id ManagementAddress CapacityBytes IsHealthy Manufacturer Model Protocol Type PartNumber SerialNumber
-- ----------------- ------------- --------- ------------ ----- -------- ---- ---------- ------------
drive_1 172.20.130.8 240057409536 True INTEL SSDSCKKB240G8 SATA SSD PHYH929100ZS240J
drive_2 172.20.130.8 960197124096 True Samsung Electronics Co Ltd SAMSUNG MZQLB960HAJR-00007 NVMe SSD S437NC0R521130
drive_3 172.20.130.8 960197124096 True Samsung Electronics Co Ltd SAMSUNG MZQLB960HAJR-00007 NVMe SSD S437NC0R521180
ManagementAddress: 172.20.130.151
Id ManagementAddress CapacityBytes IsHealthy Manufacturer Model Protocol Type PartNumber SerialNumber
-- ----------------- ------------- --------- ------------ ----- -------- ---- ---------- ------------
drive_1 172.20.130.151 240057409536 True INTEL SSDSCKKB240G8 SATA PHYH018207V0240J
drive_2 172.20.130.151 750156374016 True NVMe
drive_3 172.20.130.151 750156374016 True NVMe
ManagementAddress: 172.20.130.152
Id ManagementAddress CapacityBytes IsHealthy Manufacturer Model Protocol Type PartNumber SerialNumber
-- ----------------- ------------- --------- ------------ ----- -------- ---- ---------- ------------
drive_1 172.20.130.152 1000204886016 True WD_BLACK SN770 1TB NVMe 220207465413
drive_2 172.20.130.152 750156374016 True NVMe
drive_3 172.20.130.152 750156374016 True NVMe
Можно заметить, что у некоторых дисков отсутствует информация о производителе или серийном номере. YADRO работает над этим, и с будущими обновлениями прошивки информация появится.
Проверка критических событий
Итак, конфигурации мы проверили. Перед тем, как начать настройку сервера, давайте проверим, что никаких критических событий, на которые нам стоит обратить внимание, не зарегистрировано.
Все сообщения, которые регистрирует сервер, разбиты на несколько журналов. Их количество может варьироваться в зависимости от модели сервера. Получить список журналов с сервера можно при помощи командлета Get-LogService
.
Get-LogService | ft -GroupBy 'ManagementAddress'
ManagementAddress: 172.20.130.130
Id ManagementAddress Name OverWritePolicy MaxNumberOfRecords
-- ----------------- ---- --------------- ------------------
AuditLog 172.20.130.130 Audit Log WrapsWhenFull 150
BIOS 172.20.130.130 System BIOS Log Service WrapsWhenFull 150
EventLog 172.20.130.130 Event Log WrapsWhenFull 150
SEL 172.20.130.130 IPMI SEL WrapsWhenFull 150
ManagementAddress: 172.20.130.8
Id ManagementAddress Name OverWritePolicy MaxNumberOfRecords
-- ----------------- ---- --------------- ------------------
BIOS POST Code Log 172.20.130.8 POST Code Log Service WrapsWhenFull
BMC Journal 172.20.130.8 Open BMC Journal Log Service WrapsWhenFull
EventLog 172.20.130.8 Event Log Service WrapsWhenFull
Oem Crashdump 172.20.130.8 Open BMC Oem Crashdump Service WrapsWhenFull 3
SEL 172.20.130.8 IPMI System Event Log WrapsWhenFull
ManagementAddress: 172.20.130.151
Id ManagementAddress Name OverWritePolicy MaxNumberOfRecords
-- ----------------- ---- --------------- ------------------
BIOS POST Code Log 172.20.130.151 POST Code Log Service WrapsWhenFull
BMC Journal 172.20.130.151 Open BMC Journal Log Service WrapsWhenFull
EventLog 172.20.130.151 Event Log Service WrapsWhenFull
Oem Crashdump 172.20.130.151 Open BMC Oem Crashdump Service WrapsWhenFull 3
SEL 172.20.130.151 IPMI System Event Log WrapsWhenFull
ManagementAddress: 172.20.130.152
Id ManagementAddress Name OverWritePolicy MaxNumberOfRecords
-- ----------------- ---- --------------- ------------------
BIOS POST Code Log 172.20.130.152 POST Code Log Service WrapsWhenFull
BMC Journal 172.20.130.152 Open BMC Journal Log Service WrapsWhenFull
EventLog 172.20.130.152 Event Log Service WrapsWhenFull
Oem Crashdump 172.20.130.152 Open BMC Oem Crashdump Service WrapsWhenFull 3
SEL 172.20.130.152 IPMI System Event Log WrapsWhenFull
На примере журнала Event Log давайте запросим все события, начиная с момента подключения питания. Дату и время этого события мы можем узнать из свойства LastResetTime результата работы командлета Get-Manager
. Для этого вызовем командлет Get-LogEntry
и передадим ему нужный нам журнал. Дополнительно можно задать период, указав начальную и конечную дату интервала -StartDate
и -EndDate
соответственно. Указать уровень критичности интересующих нас событий можно с помощью параметра -Severity
.
Сейчас я в качестве примера приведу достаточно громоздкую запись вызова необходимых нам командлетов для получения результата. Я бы рекомендовал воздерживаться от такого формата вызова командлетов, особенно если вы пишете production-скрипты.
Get-LogService | ? { $_.Id -eq 'EventLog' } | % { $startDate = (Get-Date (Get-Manager -ManagementAddress $_.ManagementAddress).LastResetTime -DisplayHint DateTime); Get-LogEntry -LogService $_ -StartDate $startDate } | Select Id,ManagementAddress,Created,Severity,Message | ft -Wrap -AutoSize -GroupBy 'ManagementAddress'
ManagementAddress: 172.20.130.8
Id ManagementAddress Created Severity Message
-- ----------------- ------- -------- -------
1683367484_1 172.20.130.8 06.05.2023 12:58:44 Critical Power Unit NonRedundant and has insufficient resource.
1683367484 172.20.130.8 06.05.2023 12:58:44 Warning Power Unit Redundancy lost.
1683367482 172.20.130.8 06.05.2023 1 2:58:42 Warning Power supply PSU2 power lost.
1683367481_1 172.20.130.8 06.05.2023 12:58:41 Warning Power supply PSU2 failure predicted.
1683367481 172.20.130.8 06.05.2023 12:58:41 Warning Power supply PSU2 failed.
1683367077_1 172.20.130.8 06.05.2023 12:57:57 OK Power supply PSU2 inserted.
1683367077 172.20.130.8 06.05.2023 12:57:57 OK Power supply PSU1 inserted.
1683367028_5 172.20.130.8 06.05.2023 12:57:08 OK Fan detected: VEGMAN S220 System Fan .
1683367028_4 172.20.130.8 06.05.2023 12:57:08 OK Chassis detected: VEGMAN S220 Server 0204210078.
1683367028_3 172.20.130.8 06.05.2023 12:57:08 OK PowerSupply detected: U1A-D10800-DRB-Z D080800G862539.
1683367028_2 172.20.130.8 06.05.2023 12:57:08 OK Board detected: VEGMAN Motherboard Y0JUA02BWK0SY.
1683367028_7 172.20.130.8 06.05.2023 12:57:08 OK PowerSupply detected: U1A-D10800-DRB-Z D080800G862035.
1683367028_6 172.20.130.8 06.05.2023 12:57:08 OK Fan detected: VEGMAN S220 System Fan .
1683367028_1 172.20.130.8 06.05.2023 12:57:08 OK Fan detected: VEGMAN S220 System Fan .
1683367028_9 172.20.130.8 06.05.2023 12:57:08 OK Fan detected: VEGMAN S220 System Fan .
1683367028_8 172.20.130.8 06.05.2023 12:57:08 OK Fan detected: VEGMAN S220 System Fan .
1683367013 172.20.130.8 06.05.2023 12:56:53 OK Host system DC power is on
ManagementAddress: 172.20.130.151
Id ManagementAddress Created Severity Message
-- ----------------- ------- -------- -------
1683367094_1 172.20.130.151 06.05.2023 12:58:14 OK Power supply PSU2 inserted.
1683367094 172.20.130.151 06.05.2023 12:58:14 OK Power supply PSU1 inserted.
1683367055 172.20.130.151 06.05.2023 12:57:35 OK PowerSupply detected: R1CA2801A FSE052A0300AGB2044000339.
1683367055_8 172.20.130.151 06.05.2023 12:57:35 OK Fan detected: VEGMAN S220 System Fan .
1683367055_7 172.20.130.151 06.05.2023 12:57:35 OK Board detected: VEGMAN Motherboard Y1V1A016X1001.
1683367055_6 172.20.130.151 06.05.2023 12:57:35 OK Fan detected: VEGMAN S220 System Fan .
1683367055_5 172.20.130.151 06.05.2023 12:57:35 OK Fan detected: VEGMAN S220 System Fan .
1683367055_4 172.20.130.151 06.05.2023 12:57:35 OK Fan detected: VEGMAN S220 System Fan .
1683367055_3 172.20.130.151 06.05.2023 12:57:35 OK Fan detected: VEGMAN S220 System Fan .
1683367055_2 172.20.130.151 06.05.2023 12:57:35 OK PowerSupply detected: R1CA2801A FSE052A0300AGB2044000050.
1683367055_1 172.20.130.151 06.05.2023 12:57:35 OK Chassis detected: VEGMAN S220 0206210052.
1683367038 172.20.130.151 06.05.2023 12:57:18 OK Host system DC power is on
ManagementAddress: 172.20.130.152
Id ManagementAddress Created Severity Message
-- ----------------- ------- -------- -------
1683367082_1 172.20.130.152 06.05.2023 12:58:02 OK Power supply PSU2 inserted.
1683367082 172.20.130.152 06.05.2023 12:58:02 OK Power supply PSU1 inserted.
1683367052_8 172.20.130.152 06.05.2023 12:57:32 OK Fan detected: VEGMAN S220 System Fan .
1683367052_7 172.20.130.152 06.05.2023 12:57:32 OK PowerSupply detected: U1A-D11200-DRB D041200G3U1965.
1683367052_6 172.20.130.152 06.05.2023 12:57:32 OK Fan detected: VEGMAN S220 System Fan .
1683367052_5 172.20.130.152 06.05.2023 12:57:32 OK PowerSupply detected: U1A-D11200-DRB D041200FBC0491.
1683367052_4 172.20.130.152 06.05.2023 12:57:32 OK Fan detected: VEGMAN S220 System Fan .
1683367052_3 172.20.130.152 06.05.2023 12:57:32 OK Board detected: VEGMAN Motherboard Y0JUA02BWK0NF.
1683367052_2 172.20.130.152 06.05.2023 12:57:32 OK Fan detected: VEGMAN S220 System Fan .
1683367052_1 172.20.130.152 06.05.2023 12:57:32 OK Fan detected: VEGMAN S220 System Fan .
1683367052 172.20.130.152 06.05.2023 12:57:32 OK Chassis detected: VEGMAN S220 Server 020421006C.
1683367041 172.20.130.152 06.05.2023 12:57:21 OK Host system DC power is on
В нашем примере на одном из серверов зарегистрированы критические события, и, похоже, есть проблемы с одним из блоков питания. Эти ошибки не мешают дальнейшей настройке, но мы исключим проблемный сервер, предварительно включив световую индикацию, которая укажет сервисным инженерам на его расположение в стойке. Сделать это можно при помощи командлета Set-IndicatorLED
.
Get-System -ManagementAddress '172.20.130.8' | Set-IndicatorLED -State On
Get-System -ManagementAddress '172.20.130.8' | Get-IndicatorLED
ManagementAddress State
----------------- -----
172.20.130.8 On
Теперь можно отключаться. Воспользуемся командлетом Disconnect-Server
и укажем адрес сервера, от которого хотим отключиться. Операция потребует подтверждения.
Disconnect-Server -ManagementAddress '172.20.130.8'
Confirm
Are you sure you want to perform this action?
Performing the operation "Disconnect-Server" on target "Disconnect will be performed from next server: 172.20.130.8".
[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "Y"): Y
Итак, мы убедились, что критических событий нет, и можем продолжить настройку. При желании можем очистить журналы событий. Для этого выполним командлет Clear-LogService
:
Get-LogService | Clear-LogService
Проверка данных с сенсоров
В дополнение к событиям проверим данные по температурным сенсорам и сенсорам системы охлаждения. Но перед этим наши серверы необходимо включить. За запуск сервера отвечает командлет Start-System
:
Get-System | Start-System
Для проверки данных по температурным сенсорам и сенсорам системы охлаждения используются командлеты Get-ChassisThermalSensor
и Get-ChassisFanSensor
.
Проверяем данные по температурным сенсорам:
$sensorsData | ? { $_.Id -eq 'System_Temp' } | ft
Id ManagementAddress Name ReadingCelsius MinReadingRangeTemp MaxReadingRangeTemp LowerThresholdCritical LowerThresholdNonCritical UpperThresholdCritical UpperThresholdNonCritical
-------- ----------------- ---- -------------- ------------------- ------------------- ---------------------- ------------------------- ---------------------- -------------------------
System_Temp 172.20.130.151 System Temp 43,75 -128 127 0 5 115 110
System_Temp 172.20.130.152 System Temp 33,625 -128 127 0 5 115 110
$sensorsData | ? { $_.Id -like 'CPU*_Die' } | ft
Id ManagementAddress Name ReadingCelsius MinReadingRangeTemp MaxReadingRangeTemp LowerThresholdCritical LowerThresholdNonCritical UpperThresholdCritical UpperThresholdNonCritical
-------- ----------------- ---- -------------- ------------------- ------------------- ---------------------- ------------------------- ---------------------- -------------------------
CPU0_Die 172.20.130.151 CPU0 Die 59,641 -128 127 95 87
CPU1_Die 172.20.130.151 CPU1 Die 60,36 -128 127 95 87
CPU0_Die 172.20.130.152 CPU0 Die 39,719 -128 127 100 92
CPU1_Die 172.20.130.152 CPU1 Die 40,625 -128 127 100 92
$sensorsData | ? { $_.Id -like 'DIMM*' } | ft
Id ManagementAddress Name ReadingCelsius MinReadingRangeTemp MaxReadingRangeTemp LowerThresholdCritical LowerThresholdNonCritical UpperThresholdCritical UpperThresholdNonCritical
-------- ----------------- ---- -------------- ------------------- ------------------- ---------------------- ------------------------- ---------------------- -------------------------
DIMM_CPU0_A 172.20.130.151 DIMM CPU0 A 37 -128 127 83 78
DIMM_CPU0_B 172.20.130.151 DIMM CPU0 B 35 -128 127 83 78
DIMM_CPU0_D 172.20.130.151 DIMM CPU0 D 40 -128 127 83 78
DIMM_CPU0_E 172.20.130.151 DIMM CPU0 E 38 -128 127 83 78
DIMM_CPU1_A 172.20.130.151 DIMM CPU1 A 38 -128 127 83 78
DIMM_CPU1_B 172.20.130.151 DIMM CPU1 B 36 -128 127 83 78
DIMM_CPU1_D 172.20.130.151 DIMM CPU1 D 37 -128 127 83 78
DIMM_CPU1_E 172.20.130.151 DIMM CPU1 E 36 -128 127 83 78
...
Проверяем данные по сенсорам системы охлаждения:
Get-Chassis | Get-ChassisFanSensor | ft
Id ManagementAddress Name Manufacturer Model PartNumber Reading ReadingUnits MinReadingRange MaxReadingRange
-------- ----------------- ---- ------------ ----- ---------- ------- ------------ --------------- ---------------
Sys_Fan1 172.20.130.151 System Fan 1 YADRO VEGMAN S220 System Fan ASMFAN781102A 3226 RPM 0 18000
Sys_Fan2 172.20.130.151 System Fan 2 YADRO VEGMAN S220 System Fan ASMFAN781102A 3203 RPM 0 18000
Sys_Fan3 172.20.130.151 System Fan 3 YADRO VEGMAN S220 System Fan ASMFAN781102A 3218 RPM 0 18000
Sys_Fan4 172.20.130.151 System Fan 4 YADRO VEGMAN S220 System Fan ASMFAN781102A 3268 RPM 0 18000
Sys_Fan5 172.20.130.151 System Fan 5 YADRO VEGMAN S220 System Fan ASMFAN781102A 3274 RPM 0 18000
Sys_Fan1 172.20.130.152 System Fan 1 YADRO VEGMAN S220 System Fan ASMFAN781102A 6437 RPM 0 18000
Sys_Fan2 172.20.130.152 System Fan 2 YADRO VEGMAN S220 System Fan ASMFAN781102A 6463 RPM 0 18000
Sys_Fan3 172.20.130.152 System Fan 3 YADRO VEGMAN S220 System Fan ASMFAN781102A 6478 RPM 0 18000
Sys_Fan4 172.20.130.152 System Fan 4 YADRO VEGMAN S220 System Fan ASMFAN781102A 6497 RPM 0 18000
Sys_Fan5 172.20.130.152 System Fan 5 YADRO VEGMAN S220 System Fan ASMFAN781102A 6541 RPM 0 18000
По данным сенсоров системы охлаждения мы видим, что системные вентиляторы на втором сервере вращаются быстрее других. Возможно, стоит обратить на него внимание.
Настройка базовых параметров
Теперь рассмотрим вопросы настройки базовых параметров сервера: установим имя хоста, настроим адреса DNS- и NTP-серверов, а также установим адрес Syslog-сервера для отправки событий и адрес ловушки SNMP-трапов.
Задаем имя хоста
Настройку начнем с установки имени хоста, для этого используем командлет Set-ManagerHostname
. Ему нужно передать информацию о менеджере в параметре -Manager
и новое имя хоста через параметр -Hostname
. Информация о менеджере нам еще понадобится не раз, поэтому давайте сохраним ее. Устанавливаем имя хоста:
$manager = Get-Manager -ManagementAddress 172.20.130.152
Set-ManagerHostname -Manager $manager -Hostname SPB-V-15
Сетевые настройки
Настройка DNS
Следующим шагом настроим адреса DNS-серверов. В качестве одного из параметров в командлете для настройки DNS (Set-DnsServer
) нам нужно передать информацию о сетевых интерфейсах, с них и начнем. Получим информацию о сетевых интерфейсах управления с помощью командлета Get-EthernetInterface
и сохраним ее:
$ethernetInterface = Get-EthernetInterface -Manager $manager
Теперь перейдем к настройке DNS. Вызовем командлет Set-DnsServer
: В свойство -ManagerEthernetInterface
передадим информацию о сетевых интерфейсах управления, полученную выше, а в свойство -DnsServers
— адреса DNS-серверов:
Set-DnsServer -EthernetInterface $ethernetInterface[0] -DnsServers '172.17.10.15', '172.17.10.16'
Настройка NTP
Перейдем к синхронизации времени и выполним настройку NTP-протокола. Для этих целей используем командлет Set-ManagerNetworkProtocol
. С его помощью можно не только настроить NTP клиента, но и включить/отключить различные протоколы управления, но об этом позже.
В свойстве командлета -Protocol
указываем NTP. В свойстве -IsEnabled
передаем переменную $true
, обозначая, что включаем использование NTP-протокола. В свойстве NTP-Servers указываем адреса NTP-серверов.
Set-ManagerNetworkProtocol -Manager $manager -Protocol NTP -NTPServers '172.17.10.10'
Журналирование и мониторинг
Настройка отправки событий на удаленный сервер
Следующим шагом настроим отправку событий на удаленный сервер, используя командлет Set-RemoteLoggingServer
. Этому командлету передаются три свойства: информация о менеджере (свойство -Manager
), адрес и порт удаленного сервера (свойства -Address
и -Port
). Получаем информацию о менеджере:
Set-RemoteLoggingServer -Manager $manager -Address 172.10.19.10 -Port 3034
Настройка протокола SNMP
Для настройки протокола SNMP понадобится командлет, который мы уже использовали для настройки NTP-протокола, — Set-ManagerNetworkProtocol
.
В свойствах командлета указываем, какой SNMP-протокол, в свойстве -IsEnabled
передаем переменную $true
, обозначая, что включаем использование SNMP-протокола.
При настройке SNMP-протокола еще нужно указать CommunityString
, используя соответствующее свойство.
Set-ManagerNetworkProtocol -Manager $manager -Protocol SNMP -CommunityString 'public' -IsEnabled:$true
Настройка отправки SNMP-трапов
Следующим шагом добавим адрес ловушки получателя SNMP-трапов. Для этого есть командлет Add-SnmpTrapReceiver
, в параметры которому передаем настраиваемую серверную систему (параметр -ServerSystem
), адрес и порт ловушки (параметры -Address
и -Port
):
Add-SnmpTrapReceiver -ServerSystem (Get-System) -Address 10.10.10.20 -Port 162
Управление питанием
Настройка действия при возобновлении подачи электропитания
Еще один важный момент, который мы с вами настроим, — это установка политики восстановления при возобновлении подачи электропитания.
Можно выбрать один из трех вариантов:
при возобновлении электропитания сервер будет всегда включаться (AlwaysOn),
всегда оставаться выключенным (AlwaysOff),
принимать последнее состояние сервера (LastState).
Для настройки вызовем командлет Set-PowerRestorePolicy
и передадим в свойство -PowerRestorePolicy
одно из трех значений (AlwaysOn, AlwaysOff, LastState).
Set-PowerRestorePolicy -ServerSystem (Get-System) -PowerRestorePolicy AlwaysOn
Управление пользователями и сессиями
Теперь перейдем к настройке пользователей. Нам необходимо:
Установить время жизни пользовательской сессии — в нашем случае это 1800 секунд.
Уточнить требования к минимальной и максимальной длине пароля.
Установить количество неверных попыток входа — например, пять.
Установить время блокировки учетной записи на 180 секунд
Управление параметрами сессий
Начнем с проверки времени жизни пользовательской сессии, используя командлет Get-SessionService
:
Get-SessionService
Id ManagementAddress SessionTimeout
-- ----------------- --------------
SessionService 172.20.130.8 3600
Как мы видим, значение установлено в 3600 секунд, нам нужно поменять на 1800. Для этого используем командлет Set-SessionService
с параметром -SessionTimeout 1800
и проверим, что изменения внесены успешно:
Set-SessionService -SessionService (Get-SessionService) -SessionTimeout 1800
Get-SessionService
Id ManagementAddress SessionTimeout
-- ----------------- --------------
SessionService 172.20.130.8 1800
Управление учетными записями
Политика безопасности
Теперь проверим требования к минимальной и максимальной длине пароля пользователя (эти значения неизменны), а также политику блокировки учетных записей при определенном количестве неудачных попыток входа.
Для этих целей служит командлет Get-AccountService
. Требования к минимальной и максимальной длине пароля представлены свойствами MinPasswordLength и MaxPasswordLength. Политика блокировки учетных записей также представлена двумя свойствами AccountLockoutDuration и AccountLockoutThreshold. Первое отвечает за время в секундах, на которое блокируется учетная запись, а второе — за порог количества неверных попыток входа, после которых наступает блокировка.
$accountservice = Get-AccountService -ManagementAddress 172.20.130.151
$accountservice
Id : AccountService
ManagementAddress : 172.20.130.151
Name : Account Service
AccountLockoutCounterResetAfter :
AccountLockoutCounterResetEnabled :
AccountLockoutDuration : 0
AccountLockoutThreshold : 0
AuthFailureLoggingThreshold :
Description : Account Service
LocalAccountAuth :
MaxPasswordLength : 20
MinPasswordLength : 8
IsEnabled : True
Как мы видим, значения -AccountLockoutDuration
и -AccountLockoutThreshold
нулевые — значит, политика блокировки пользователей отключена. Давайте это исправим с помощью командлета Set-AccountPolicySettings
, передав два параметра -AccountLockoutDuration 180
и -AccountLockoutThreshold 5
.
Set-AccountPolicySettings -AccountService $accountService -AccountLockoutDuration 180 -AccountLockoutTreshold 5
Готово!
Создание, изменение и удаление учетных записей
Начнем с получения списка пользователей. Воспользуемся командлетом Get-Account
:
$accountService | Get-Account | ft
Id ManagementAddress Username RoleId IsEnabled IsLocked IsPasswordChangeRequired
-- ----------------- -------- ------ --------- -------- ------------------------
admin 172.20.130.151 admin Administrator True False False
Сейчас у нас в системе один пользователь с ролью Administrator. Давайте получим список всех ролей, предустановленных на сервере. Для этого воспользуемся командлетом Get-Role
:
$accountService | Get-Role | ft
Id ManagementAddress AssignedPrivileges Description IsPredefined RoleId
-- ----------------- ------------------ ----------- ------------ ------
Administrator 172.20.130.151 {Login, ConfigureManager, ConfigureUsers, ConfigureSelf…} Administrator User Role True Administrator
Operator 172.20.130.151 {Login, ConfigureSelf, ConfigureComponents} Operator User Role True Operator
ReadOnly 172.20.130.151 {Login, ConfigureSelf} ReadOnly User Role True ReadOnly
Теперь создадим нового пользователя с логином monitor и ролью ReadOnly и пока оставим его неактивным. Для этого получим нужную нам роль и вызовем командлет New-Account
. Также дополнительно добавим параметр -PassThru
, который вернет нам булевый результат выполнения операции. Это очень полезно в разработке скриптов — например, при использовании в условиях.
$readOnlyRole = $accountService | Get-Role -RoleId 'ReadOnly'
$readOnlyRole
Id : ReadOnly
ManagementAddress : 172.20.130.151
AssignedPrivileges : {Login, ConfigureSelf}
Description : ReadOnly User Role
IsPredefined : True
RoleId : ReadOnly
$accountService | New-Account -Username 'monitor' -Password 'Password_007' -Role $readOnlyRole -IsEnabled:$false -PassThru
True
$accountService | Get-Account -Username 'monitor' | ft
Id ManagementAddress Username RoleId IsEnabled IsLocked IsPasswordChangeRequired
-- ----------------- -------- ------ --------- -------- ------------------------
monitor 172.20.130.151 monitor ReadOnly False False False
Теперь активируем нашего пользователя с помощью командлета Set-Account
. Помимо операций включения/отключения учетной записи, он позволяет изменять имя пользователя, пароль или роль.
$accountService | Get-Account -Username 'monitor' | Set-Account -IsEnabled:$true
Succeed
-------
True
И в завершение в качестве примера давайте удалим учетную запись пользователя monitor. По умолчанию командлет выдаст запрос на подтверждение выполнения операции. Если нам не нужно подтверждение, можно добавить ключ -Confirm:$false
. В примере ниже мы все же подтвердим удаление.
$accountService | Get-Account -Username 'monitor' | Remove-Account
Confirm
Are you sure you want to perform this action?
Performing the operation "Remove-Account" on target "Account monitor will be deleted from server: 172.20.130.151".
[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "Y"): Y
Succeed
-------
True
Управление параметрами загрузки и монтирование образов
За установку источника загрузки отвечает командлет Set-BootSource
. Параметр -BootSource
может принимать одно из следующих значений: None | PXE | HDD | CD | Diags | BiosSetup | USB. В нашем случае мы будем использовать CD. Cвойство -BootMode
указывает на тип интерфейса загрузчика: Legacy или UEFI. Мы будем использовать разовую загрузку с CD-носителя и установим параметр -NeedOnce
: в значение $true
. Выбираем источник загрузки:
Set-BootSource -ServerSystem $system -BootSource CD -BootMode UEFI -NeedOnce:$true
Источник загрузки мы указали, но пока в нем не смонтирован образ. Для монтирования используем командлет Mount-VirtualMedia
, указав путь до образа -ImageUri
и тип -MediaType
:
$vm = Get-VirtualMedia -Manager $manager -Id USB1
Mount-VirtualMedia -VirtualMedia $vm -ImageUri nfs://10.123.18.45/infra/iso/Ubuntu/ubuntu-22.04.3-live-server-amd64.iso -MediaType CD -ReadOnly:$true
Осталось выполнить выключение (Stop-Server
) / включение (Start-Server
) или перегрузку сервера (Restart-Server
) и переходить к работе с операционной системой.
Заключение
Итак, мы централизованно, используя командную строку, проверили нескольких серверов, обнаружили проблемные и выполнили базовые настройки оставшихся серверов. Модуль PowerShell с набором командлетов сэкономил нам время на проверку конфигурации, журналов событий и настройку серверов. Также он позволяет создавать сценарии автоматизации под различные задачи — например, первичную конфигурацию или аудит текущих настроек и приведение в соответствие (compliance).
Сценарий, который я описал в статье, не охватывает весь функционал модуля. Если вас заинтересовали его возможности, предлагаю изучить документацию в архиве — уверен, каждый найдет практическое применение модулю.
Как я писал выше, работа модуля не ограничена только серверами производства YADRO. Но предупрежу, что некоторые командлеты могут работать некорректно со сторонними серверами. Мы не тестировали модуль на всех доступных на рынке серверных платформах.
Оставлю ссылку на скачиваемый модуль для PowerShell и документацию еще раз. Надеюсь, решение вам понравится и поможет ускорить и автоматизировать настройку серверов. Буду рад любой обратной связи, которая позволить сделать его лучше.
Комментарии (14)
Busla
09.05.2024 10:30Find-ServerSystems
Connect-Server
Get-Connection
Disconnect-Serverпо идее, Noun должен быть одинаковый, а сейчас семантика нарушена
New-Account
от командлетов New- ждут, что они вернут объект. У вас он молчаливый. Лучше тогда переделать его на Add-
параметр Password не должен быть string, правильнее будет пару параметров Username и Password заменить на Credential
присоединяюсь к вопросу @exchange12rocks: почему -IsEnabled типа bool, а не -Enabled типа switch? Да и то же касается всех прочих bool.
состояние Enable традиционно управляется отдельными командлетами. Было бы неплохо добавить Enable-Account и Disable-Account
Измените порт:
PS> Set-RemoteLoggingServer -Manager $manager -Address 1.10.1.11 -Port 3034
Пример вывода:Succeed
-------
TrueЗачем этот вывод? — его потом приходится принудительно заглушать. При ошибке должно сформироваться исключение. При успехе должна быть "тишина". То же самое с Start-System и Restart-System
Судя по документации Set-HttpsCertificate и Add-HttpsCertificate делают одно и то же — задают единственный сертификат web-интерфейса. Или первый раз нужно делать только Add, а потом только Set?
-PassThru
Запрашивает выходные данные, если по умолчанию командлет их не выводит.не запрашивает (интерактивно у пользователя), а возвращает изменённый объект
-AccountService
Учетная запись сервиса. Принимает на вход результат выполнения командлета Get-AccountService (стр. 52).а не наоборот: учётная запись сервиса — Service Account ?
Если
Командлет Get-VirtualMedia возвращает информацию о подключенных виртуальных носителях.
а
Командлет Mount-VirtualMedia подключает виртуальный носитель информации.
то зачем у командлета Mount-VirtualMedia параметр
-VirtualMedia
Подключаемый виртуальный носитель информации. Принимает на вход результат выполнения командлета Get-VirtualMediaзачем подключать (монтировать) уже смонтированное?
-DnsServers
Настраиваемый клиент DNS-сервера.наверное всё же «список DNS-серверов»?
В документации в примерах кода три типа кавычек: одинарные, двойные и типографские. Во всех ваших примерах должны быть только одинарные.
exchange12rocks
Гайз, добавьте свой префикс ко всем командлетам - слишком общие у них названия - так нельзя
Вот прям пересечение с first-party командлетом: https://learn.microsoft.com/en-us/powershell/module/dnsserver/set-dnsserver
KoS-Olyunin Автор
Да, Вы правы. Стоило указать как импортировать модуль с префиксом и как задать префикс в манифесте. Добавим в статью. Спасибо.
exchange12rocks
Наверное префикс в манифесте задать должен не пользователь модуля, а его разработчик?
KoS-Olyunin Автор
На самом деле, это вопрос достаточно открытый. Пересечения по именованию командлетов вполне нормальная ситуация, поэтому при импорте модуля поддерживается указание префикса, если это необходимо, и в целом допускает правку манифеста, правда это конечно накладывает дополнительные неудобства, например в случае обновления версии. При использовании ОС Windows, вероятность конфликта действительно выше, ввиду достаточно обширного функционала, поставляемого вместе с ОС. К примеру, VMware PowerCLI в некоторых командлетах кофликтует с функционалом, поставляемым в Windows для управления Hyper-V.
Busla
Вы на PowerShell только для клиентов пишите, сами его не используете? — явный импорт 12 лет как не нужен:
Ваш модуль придётся копипастить в виде файлов, в обход репозиториев, чтобы избежать конфликтов при работе с другими модулями.
Т.к. пользователи будут каждый свой префикс придумывать, нагуглить примеры, решение проблем будет почти невозможно.
KoS-Olyunin Автор
Почему, используем. Для того, чтобы модуль импортировался автоматически, его нужно положить в директорию, которая указана в PSModulePath. В этом случае, конечно либо нужно указание префикса в манифесте, либо в случае конфликтной ситуации, использовать командлет с явным указанием модуля, например 'Yadro.Automation.Server\Set-DnsServer'.
Мы Вам очень благодарны за обратную связь, мы обязательно выложим версию с префиксом и обновим документацию.
Busla
Спасибо.
Расскажите, пожалуйста, если у вас есть опыт, компетенции в PowerShell, то почему решили сделать модуль бинарным, а не на том же PowerShell написали? Хотя бы верхнеуровневую реализацию командлетов? - и ваши наработки бы остались закрытыми и пользователям было бы проще разобраться, что происходит, добавить алиасы и проверки параметрам. Потом вернуть это вам в виде пул-реквеста.
KoS-Olyunin Автор
Вариант скомбинировать бинарные библиотеки и модуль написанный на PowerShell рассматривался, возможно в будущем мы так и поступим, но на первом этапе решили остановится на полностью бинарном варианте, т.к. код, написанный на одном языке проще развивать и поддерживать. Плюс модуль ориентирован на одновременную работу с множеством серверов, что в случае с бинарным вариантом, дает при разработке больше гибкости, а также может положительно сказаться на производительности.
exchange12rocks
Это не значит, что они правы и надо повторять за ними.
KoS-Olyunin Автор
Мы ни за кем не повторяли и не можем судить, прав кто-то или нет сделав выбор в пользу того или иного пути. В комментариях мы уже рассмотрели несколько вариантов, как можно решать вопросы с коллизиями на уровне модуля целиком или отдельных командлетов. Вы совершенно верно говорите про префикс, но у друго человека может возникнуть иная точка зрения, к примеру, ему может быть проще и удобнее работать с командлетами без префиксов и на то могут быть разные причины, а вопросы коллизий нескольких командлетов, если он с ними столкнется, ему удобнее решать точечно.
Мы Вам очень благодарны за конструктивный диалог, это помогает нам лучше понять пользователей и сделать продукт удобнее. Спасибо.
exchange12rocks
Find-ServerSystems: в параметры, принимающие на вход IP-адреса, лучше принимать объекты типа [ipaddress]
Такая фраза подразумевает, что только ft можно использовать, а Format-Table - нельзя
Connect-Server: Почему вы назвали параметр ManagementAddress? В PowerShell принято называть его ComputerName. Также этот командлет появляется в примерах раньше, чем его полное описание.
Get-Connection: ClientOriginAddress Тип установленной операционной системы <- тут кажется напутали что-то
Disconnect-Server - отсутствует параметр -Force - лучше добавить его для скриптов
Get-System: "if ($_.IsPoweredOn) { return "Включен" } else { "Выключен" }" <- зачем тут return?
Get-Memory: $_.ErrorCorrection -notlike "NoECC" <- либо забыли звёздочку, либо неправильный оператор сравнения
Get-ChassisPowerVoltages: "множественное число" в существительном
Restart-Manager: почему-то у этого командлета в документации появляются [-PassThru] [-WhatIf] [-Confirm], а у остальных их нет
Set-MananagerNetworkProtocol: [-IsEnabled] - почему тут тип bool, а не -Enabled типа switch?
KoS-Olyunin Автор
Вы имеете ввиду тип System.Net.IPAddress? Думаю не стоит лишать пользователей возможностей передавать IP-адреса как строки, но думаю Вы правы и можно добавить отдельный Parameter Set который будет принимать параметры типа IPAddress.
Из практики, я встречал разные варианты именования параметров подключения к удаленному узлу. ComputerName использует в своих командлетах Microsoft. При разработке мы старались именовать параметры так, что бы имена были говорящими и отражали назначение параметра. Я не исключаю, что такие рекомендации существуют, не могли бы Вы поделится ссылкой?
Спасибо большое за Вашу внимательность, тут действительно ошибка. "Тип установленной операционной системы" - это из другого PowerShell модуля.
В скриптах можно использовать -Confirm:$false, но в документации этот параметр не описан, это наше упущение, проведем повторное детальное ревью и внесем исправления.
Согласен, исправим. Спасибо.
Забыли звездочку, исправим. Спасибо.
Согласен, исправим. Спасибо.
В документации есть упущения и ошибки, обязательно все исправим. Спасибо.
Вы правы, там должен быть switch и это не единственный командлет, где в описании параметров допущена эта ошибка. Все исправим.
Еще раз спасибо Вам за внимательное чтение документации и что указали нам на все ошибки и недочеты.