add projects
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 6s

This commit is contained in:
admin
2026-03-17 17:25:08 +03:00
parent fc01f07d7c
commit ed55e77e98
39 changed files with 4430 additions and 8 deletions
+15
View File
@@ -0,0 +1,15 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<Version>0.1</Version>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Newtonsoft.Json" Version="13.0.4" />
</ItemGroup>
</Project>
+104
View File
@@ -0,0 +1,104 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CheckEVS
{
public class Disks
{
public int id { get; set; }
public Params @params { get; set; }
public bool result { get; set; }
public string session { get; set; }
}
public class Device
{
public string BUS { get; set; }
public double Capacity { get; set; }
public int CmrSize { get; set; }
public string DRTypeMixState { get; set; }
public string Firmware { get; set; }
public int LogicNo { get; set; }
public int MRType { get; set; }
public string Media { get; set; }
public string MediaType { get; set; }
public string Module { get; set; }
public string Name { get; set; }
public int OpState { get; set; }
public string Parent { get; set; }
public List<Partition> Partitions { get; set; }
public int PhysicNo { get; set; }
public int PosLedState { get; set; }
public string PowerMode { get; set; }
public string PreDiskCheck { get; set; }
public string SerialNo { get; set; }
public string State { get; set; }
public Tank Tank { get; set; }
public int UseMode { get; set; }
public string Volume { get; set; }
public int? Temperature { get; set; }
public Raid Raid { get; set; }
}
public class MemberInfo
{
public int ID { get; set; }
public bool Spare { get; set; }
}
public class Params
{
public List<Tank> tank { get; set; }
}
public class Partition
{
public string FileSystem { get; set; }
public bool IsSupportFs { get; set; }
public string Name { get; set; }
public int Start { get; set; }
public object Total { get; set; }
}
public class Raid
{
public int ActiveDevices { get; set; }
public string AliasName { get; set; }
public int ChunkSize { get; set; }
public int FailedDevices { get; set; }
public int Level { get; set; }
public List<MemberInfo> MemberInfos { get; set; }
public List<string> Members { get; set; }
public int RaidDevices { get; set; }
public double RecoverMBps { get; set; }
public double RecoverPercent { get; set; }
public int RecoverTimeRemain { get; set; }
public int SpareDevices { get; set; }
public List<string> State { get; set; }
public int Sync { get; set; }
public int TotalDevices { get; set; }
public string UUID { get; set; }
public int WorkingDevices { get; set; }
}
public class Tank
{
public List<Device> Device { get; set; }
public double FreeSpace { get; set; }
public int Level { get; set; }
public int SlotNum { get; set; }
public int TankNo { get; set; }
public double Temperature { get; set; }
public double TotalSpace { get; set; }
}
public class Tank2
{
public int Level { get; set; }
public int Slot { get; set; }
public int TankNo { get; set; }
}
}
+437
View File
@@ -0,0 +1,437 @@
using CheckEVS;
using System;
using System.Net.Http;
using System.Net.Http.Json;
using System.Security.Cryptography;
using System.Text;
using System.Text.Json;
using System.Text.Json.Serialization;
using System.Threading.Tasks;
namespace DahuaDiskChecker
{
class Program
{
static async Task Main(string[] args)
{
string server = string.Empty;
//Console.WriteLine("=== ПРОВЕРКА СОСТОЯНИЯ ДИСКА DAHUA ===");
#if DEBUG
Console.WriteLine("Введи ip-адрес EVS:");
server = Console.ReadLine();
Console.WriteLine("Введи номер диска: (0 - количество неисправных, 1-24 - статус указанного");
int diskNumber = Convert.ToInt32(Console.ReadLine());
#else
// Парсинг аргументов
if (args.Length < 2)
{
await PromoPrint();
//Console.WriteLine("Использование: DahuaDiskChecker.exe <IP> <номер_диска> [пользователь] [пароль]");
//Console.WriteLine("Пример: DahuaDiskChecker.exe 172.16.48.147 10 admin admin");
return;
}
server = args[0];
if (!int.TryParse(args[1], out int diskNumber))
{
//Console.WriteLine("❌ Ошибка: номер диска должен быть числом");
return;
}
#endif
string user = args.Length > 2 ? args[2] : "admin";
string password = args.Length > 3 ? args[3] : "4NUDZhJ7";
try
{
var checker = new DahuaDiskChecker();
string status = await checker.CheckDiskStatusAsync(server, diskNumber, user, password);
// Вывод результата
//Console.WriteLine();
//Console.WriteLine(new string('=', 40));
try
{
Convert.ToInt32(status);
Console.WriteLine(status);
}
catch (Exception)
{
if (status == "NotFound")
{
Console.WriteLine("10");
}
else if (status == "Good")
{
Console.WriteLine("0");
}
else
{
Console.WriteLine("1");
}
}
#if DEBUG
Console.ReadKey();
#endif
//Console.WriteLine(new string('=', 40));
}
catch (Exception ex)
{
Console.WriteLine($"❌ Ошибка: {ex.Message}");
}
}
private static async Task PromoPrint()
{
// ╔ ═ ╦ ╗ ║ ╟ ╤ │ ─ ┷ ╢ ╚ ╝
Console.WriteLine("╔════════════════════════════╤════════════╗");
Console.WriteLine("║ autor: mastankov │ ver: 0.1 ║");
Console.WriteLine("╟────────────────────────────┴────────────╢");
Console.WriteLine("║ Пример: ║");
Console.WriteLine("║ DahuaDiskChecker.exe <IP> <номер_диска> ║");
Console.WriteLine("║ Вернет статус запрошенного диска ║");
Console.WriteLine("║ ║");
Console.WriteLine("║ DahuaDiskChecker.exe <IP> 0 ║");
Console.WriteLine("║ Вернет количество неисправных дисков ║");
Console.WriteLine("║ ║");
Console.WriteLine("║ Нажми Enter, чтобы выйти ║");
Console.WriteLine("╚═════════════════════════════════════════╝");
//Console.ReadKey();
}
}
public class DahuaDiskChecker
{
private readonly HttpClient _httpClient;
public DahuaDiskChecker()
{
_httpClient = new HttpClient();
_httpClient.Timeout = TimeSpan.FromSeconds(30);
}
// Вычисление MD5 хэша
private string CalculateMD5(string input)
{
using (MD5 md5 = MD5.Create())
{
byte[] inputBytes = Encoding.UTF8.GetBytes(input);
byte[] hashBytes = md5.ComputeHash(inputBytes);
StringBuilder sb = new StringBuilder();
foreach (byte b in hashBytes)
{
sb.Append(b.ToString("X2"));
}
return sb.ToString();
}
}
// Получение сессии
private async Task<string> GetSessionAsync(string server, string user, string password)
{
// 1. Challenge запрос
var challengeRequest = new
{
method = "global.login",
@params = new
{
userName = user,
password = "",
clientType = "Web3.0"
},
id = 1,
session = (string)null
};
string json = JsonSerializer.Serialize(challengeRequest);
var content = new StringContent(json, Encoding.UTF8, "application/json");
var response = await _httpClient.PostAsync($"http://{server}/RPC2_Login", content);
response.EnsureSuccessStatusCode();
var responseJson = await response.Content.ReadAsStringAsync();
using JsonDocument doc = JsonDocument.Parse(responseJson);
var root = doc.RootElement;
if (!root.TryGetProperty("result", out var resultProp) || resultProp.GetBoolean())
throw new Exception("Не удалось получить challenge");
string realm = root.GetProperty("params").GetProperty("realm").GetString();
string random = root.GetProperty("params").GetProperty("random").GetString();
string session = root.GetProperty("session").GetString();
// 2. Вычисление пароля
string pwdHash = CalculateMD5($"{user}:{realm}:{password}");
string passHash = CalculateMD5($"{user}:{random}:{pwdHash}");
// 3. Авторизация
var authRequest = new
{
method = "global.login",
@params = new
{
userName = user,
clientType = "Web3.0",
authorityType = "Default",
passwordType = "Default",
password = passHash
},
id = 2,
session = session
};
json = JsonSerializer.Serialize(authRequest);
content = new StringContent(json, Encoding.UTF8, "application/json");
response = await _httpClient.PostAsync($"http://{server}/RPC2_Login", content);
response.EnsureSuccessStatusCode();
responseJson = await response.Content.ReadAsStringAsync();
using JsonDocument authDoc = JsonDocument.Parse(responseJson);
var authRoot = authDoc.RootElement;
if (!authRoot.TryGetProperty("result", out resultProp) || !resultProp.GetBoolean())
throw new Exception("Ошибка авторизации");
return authRoot.GetProperty("session").GetString();
}
// Получение состояния диска
public async Task<string> CheckDiskStatusAsync(string server, int diskNumber, string user, string password)
{
try
{
// Получаем сессию
string session = await GetSessionAsync(server, user, password);
// Запрос информации о дисках
var diskRequest = new
{
method = "storage.getTankInfo",
@params = (object)null,
id = 270,
session
};
string json = JsonSerializer.Serialize(diskRequest);
var content = new StringContent(json, Encoding.UTF8, "application/json");
var response = await _httpClient.PostAsync($"http://{server}/RPC2", content);
response.EnsureSuccessStatusCode();
var responseJson = await response.Content.ReadAsStringAsync();
var listDisk = Newtonsoft.Json.JsonConvert.DeserializeObject<Disks>(responseJson).@params.tank[0].Device;
if (diskNumber != 0)
{
// Парсим ответ для поиска диска
string diskStatus = ParseDiskInfo(responseJson, diskNumber);
return diskStatus ?? "NotFound";
}
else
{
int countDiskWithError = 0;
for (int i = 0; i < listDisk.Count - 2; i++)
{
if (listDisk[i].PreDiskCheck != "Good" && listDisk[i].PreDiskCheck != "Warn")
countDiskWithError++;
}
return countDiskWithError.ToString();
}
}
catch (HttpRequestException ex)
{
throw new Exception($"Ошибка сети: {ex.Message}");
}
catch (Exception ex)
{
throw new Exception($"Ошибка: {ex.Message}");
}
}
// Парсинг информации о дисках
private string ParseDiskInfo(string jsonResponse, int diskNumber)
{
using JsonDocument doc = JsonDocument.Parse(jsonResponse);
var root = doc.RootElement;
// Проверяем успешность запроса
if (!root.TryGetProperty("result", out var resultProp) || !resultProp.GetBoolean())
return null;
// Ищем диски
if (!root.TryGetProperty("params", out var paramsProp))
return null;
if (!paramsProp.TryGetProperty("tank", out var tanksProp))
return null;
// Перебираем все массивы танков (хранилищ)
foreach (var tank in tanksProp.EnumerateArray())
{
if (!tank.TryGetProperty("Device", out var devicesProp))
continue;
// Перебираем устройства в танке
foreach (var device in devicesProp.EnumerateArray())
{
// Если устройство - строка (как в вашем примере)
if (device.ValueKind == JsonValueKind.String)
{
string deviceStr = device.GetString();
if (deviceStr.Contains($"PhysicNo={diskNumber}"))
{
// Ищем PreDiskCheck
int start = deviceStr.IndexOf("PreDiskCheck=");
if (start == -1) return "Unknown";
start += "PreDiskCheck=".Length;
int end = deviceStr.IndexOf(';', start);
if (end == -1) end = deviceStr.Length;
return deviceStr.Substring(start, end - start).Trim();
}
}
// Если устройство - объект
else if (device.ValueKind == JsonValueKind.Object)
{
// Пробуем получить PhysicNo как строку или число
string physicNo = null;
if (device.TryGetProperty("PhysicNo", out var physicNoProp))
{
if (physicNoProp.ValueKind == JsonValueKind.String)
{
physicNo = physicNoProp.GetString();
}
else if (physicNoProp.ValueKind == JsonValueKind.Number)
{
physicNo = physicNoProp.GetInt32().ToString();
}
}
// Если нашли нужный диск
if (physicNo == diskNumber.ToString())
{
// Получаем статус
if (device.TryGetProperty("PreDiskCheck", out var statusProp))
{
return statusProp.GetString() ?? "Unknown";
}
return "Unknown";
}
}
}
}
return null;
}
}
// Классы для десериализации JSON
public class DahuaResponse<T>
{
[JsonPropertyName("result")]
public bool Result { get; set; }
[JsonPropertyName("session")]
public string Session { get; set; }
[JsonPropertyName("params")]
public T Params { get; set; }
[JsonPropertyName("error")]
public ErrorInfo Error { get; set; }
[JsonPropertyName("id")]
public int Id { get; set; }
}
public class ChallengeData
{
[JsonPropertyName("authorization")]
public string Authorization { get; set; }
[JsonPropertyName("random")]
public string Random { get; set; }
[JsonPropertyName("realm")]
public string Realm { get; set; }
[JsonPropertyName("opaque")]
public string Opaque { get; set; }
}
public class AuthData
{
[JsonPropertyName("keepAliveInterval")]
public int KeepAliveInterval { get; set; }
[JsonPropertyName("isPwdOverdue")]
public bool IsPwdOverdue { get; set; }
}
public class TankInfoData
{
[JsonPropertyName("tank")]
public List<Tank> Tanks { get; set; }
}
public class Tank
{
[JsonPropertyName("Device")]
public List<JsonElement> Devices { get; set; }
[JsonPropertyName("FreeSpace")]
public double FreeSpace { get; set; }
[JsonPropertyName("Level")]
public int Level { get; set; }
[JsonPropertyName("SlotNum")]
public int SlotNum { get; set; }
[JsonPropertyName("TankNo")]
public int TankNo { get; set; }
[JsonPropertyName("Temperature")]
public double Temperature { get; set; }
[JsonPropertyName("TotalSpace")]
public double TotalSpace { get; set; }
}
public class Device
{
[JsonPropertyName("PhysicNo")]
public string PhysicNo { get; set; }
[JsonPropertyName("PreDiskCheck")]
public string PreDiskCheck { get; set; }
[JsonPropertyName("Name")]
public string Name { get; set; }
[JsonPropertyName("SerialNo")]
public string SerialNo { get; set; }
[JsonPropertyName("Temperature")]
public string Temperature { get; set; }
[JsonPropertyName("State")]
public string State { get; set; }
}
public class ErrorInfo
{
[JsonPropertyName("code")]
public int Code { get; set; }
[JsonPropertyName("message")]
public string Message { get; set; }
}
}
+913
View File
@@ -0,0 +1,913 @@
{
"id": 270,
"params": {
"tank": [
{
"Device": [
{
"BUS": "SATA",
"Capacity": 9999757606912.0,
"CmrSize": 0,
"DRTypeMixState": "Single",
"Firmware": "SNE0",
"LogicNo": 0,
"MRType": 0,
"Media": "DISK",
"MediaType": "HDD",
"Module": "ST10000VE0012KX101",
"Name": "\/dev\/sda",
"OpState": 0,
"Parent": "\/dev\/md0",
"Partitions": [],
"PhysicNo": 10,
"PosLedState": 0,
"PowerMode": "StandBy",
"PreDiskCheck": "Good",
"SerialNo": "WP019EWD",
"State": "Sync",
"Tank": {
"Level": 0,
"Slot": 0,
"TankNo": 0
},
"UseMode": 0,
"Volume": "RaidVolume"
},
{
"BUS": "SATA",
"Capacity": 9999757606912.0,
"CmrSize": 0,
"DRTypeMixState": "Single",
"Firmware": "SNE0",
"LogicNo": 0,
"MRType": 0,
"Media": "DISK",
"MediaType": "HDD",
"Module": "ST10000VE0012KX101",
"Name": "\/dev\/sdb",
"OpState": 0,
"Parent": "\/dev\/md0",
"Partitions": [],
"PhysicNo": 12,
"PosLedState": 0,
"PowerMode": "StandBy",
"PreDiskCheck": "Good",
"SerialNo": "WP019E1D",
"State": "Sync",
"Tank": {
"Level": 0,
"Slot": 0,
"TankNo": 0
},
"UseMode": 0,
"Volume": "RaidVolume"
},
{
"BUS": "SATA",
"Capacity": 9999757606912.0,
"CmrSize": 0,
"DRTypeMixState": "Single",
"Firmware": "SNE0",
"LogicNo": 0,
"MRType": 0,
"Media": "DISK",
"MediaType": "HDD",
"Module": "ST10000VE0012KX101",
"Name": "\/dev\/sdc",
"OpState": 0,
"Parent": "\/dev\/md0",
"Partitions": [],
"PhysicNo": 11,
"PosLedState": 0,
"PowerMode": "StandBy",
"PreDiskCheck": "Good",
"SerialNo": "WP019EZE",
"State": "Sync",
"Tank": {
"Level": 0,
"Slot": 0,
"TankNo": 0
},
"UseMode": 0,
"Volume": "RaidVolume"
},
{
"BUS": "SATA",
"Capacity": 9999757606912.0,
"CmrSize": 0,
"DRTypeMixState": "Single",
"Firmware": "SNE0",
"LogicNo": 0,
"MRType": 0,
"Media": "DISK",
"MediaType": "HDD",
"Module": "ST10000VE0012KX101",
"Name": "\/dev\/sdd",
"OpState": 0,
"Parent": "\/dev\/md1",
"Partitions": [],
"PhysicNo": 16,
"PosLedState": 0,
"PowerMode": "Active",
"PreDiskCheck": "Good",
"SerialNo": "WP019E0F",
"State": "Sync",
"Tank": {
"Level": 0,
"Slot": 0,
"TankNo": 0
},
"Temperature": 27,
"UseMode": 0,
"Volume": "RaidVolume"
},
{
"BUS": "SATA",
"Capacity": 9999757606912.0,
"CmrSize": 0,
"DRTypeMixState": "Single",
"Firmware": "SNE0",
"LogicNo": 0,
"MRType": 0,
"Media": "DISK",
"MediaType": "HDD",
"Module": "ST10000VE0012KX101",
"Name": "\/dev\/sde",
"OpState": 0,
"Parent": "\/dev\/md1",
"Partitions": [],
"PhysicNo": 15,
"PosLedState": 0,
"PowerMode": "Active",
"PreDiskCheck": "Good",
"SerialNo": "WP019EWB",
"State": "Sync",
"Tank": {
"Level": 0,
"Slot": 0,
"TankNo": 0
},
"Temperature": 28,
"UseMode": 0,
"Volume": "RaidVolume"
},
{
"BUS": "SATA",
"Capacity": 9999757606912.0,
"CmrSize": 0,
"DRTypeMixState": "Single",
"Firmware": "SNE0",
"LogicNo": 0,
"MRType": 0,
"Media": "DISK",
"MediaType": "HDD",
"Module": "ST10000VE0012KX101",
"Name": "\/dev\/sdf",
"OpState": 0,
"Parent": "\/dev\/md1",
"Partitions": [],
"PhysicNo": 13,
"PosLedState": 0,
"PowerMode": "Active",
"PreDiskCheck": "Good",
"SerialNo": "WP019E3B",
"State": "Sync",
"Tank": {
"Level": 0,
"Slot": 0,
"TankNo": 0
},
"Temperature": 28,
"UseMode": 0,
"Volume": "RaidVolume"
},
{
"BUS": "SATA",
"Capacity": 9999757606912.0,
"CmrSize": 0,
"DRTypeMixState": "Single",
"Firmware": "SNE0",
"LogicNo": 0,
"MRType": 0,
"Media": "DISK",
"MediaType": "HDD",
"Module": "ST10000VE0012KX101",
"Name": "\/dev\/sdg",
"OpState": 0,
"Parent": "\/dev\/md0",
"Partitions": [],
"PhysicNo": 9,
"PosLedState": 0,
"PowerMode": "StandBy",
"PreDiskCheck": "Good",
"SerialNo": "WP019E1P",
"State": "Sync",
"Tank": {
"Level": 0,
"Slot": 0,
"TankNo": 0
},
"UseMode": 0,
"Volume": "RaidVolume"
},
{
"BUS": "SATA",
"Capacity": 9999757606912.0,
"CmrSize": 0,
"DRTypeMixState": "Single",
"Firmware": "SNE0",
"LogicNo": 0,
"MRType": 0,
"Media": "DISK",
"MediaType": "HDD",
"Module": "ST10000VE0012KX101",
"Name": "\/dev\/sdh",
"OpState": 0,
"Parent": "\/dev\/md0",
"Partitions": [],
"PhysicNo": 5,
"PosLedState": 0,
"PowerMode": "StandBy",
"PreDiskCheck": "Good",
"SerialNo": "WP019E1L",
"State": "Sync",
"Tank": {
"Level": 0,
"Slot": 0,
"TankNo": 0
},
"UseMode": 0,
"Volume": "RaidVolume"
},
{
"BUS": "SATA",
"Capacity": 9999757606912.0,
"CmrSize": 0,
"DRTypeMixState": "Single",
"Firmware": "SNE0",
"LogicNo": 0,
"MRType": 0,
"Media": "DISK",
"MediaType": "HDD",
"Module": "ST10000VE0012KX101",
"Name": "\/dev\/sdi",
"OpState": 0,
"Parent": "\/dev\/md0",
"Partitions": [],
"PhysicNo": 1,
"PosLedState": 0,
"PowerMode": "StandBy",
"PreDiskCheck": "Good",
"SerialNo": "WP019EVN",
"State": "Sync",
"Tank": {
"Level": 0,
"Slot": 0,
"TankNo": 0
},
"UseMode": 0,
"Volume": "RaidVolume"
},
{
"BUS": "SATA",
"Capacity": 9999757606912.0,
"CmrSize": 0,
"DRTypeMixState": "Single",
"Firmware": "SNE0",
"LogicNo": 0,
"MRType": 0,
"Media": "DISK",
"MediaType": "HDD",
"Module": "ST10000VE0012KX101",
"Name": "\/dev\/sdj",
"OpState": 0,
"Parent": "\/dev\/md0",
"Partitions": [],
"PhysicNo": 6,
"PosLedState": 0,
"PowerMode": "StandBy",
"PreDiskCheck": "Good",
"SerialNo": "WP019E3G",
"State": "Sync",
"Tank": {
"Level": 0,
"Slot": 0,
"TankNo": 0
},
"UseMode": 0,
"Volume": "RaidVolume"
},
{
"BUS": "SATA",
"Capacity": 9999757606912.0,
"CmrSize": 0,
"DRTypeMixState": "Single",
"Firmware": "SND0",
"LogicNo": 0,
"MRType": 0,
"Media": "DISK",
"MediaType": "HDD",
"Module": "ST10000VE0012KX101",
"Name": "\/dev\/sdk",
"OpState": 0,
"Parent": "\/dev\/md0",
"Partitions": [],
"PhysicNo": 2,
"PosLedState": 0,
"PowerMode": "StandBy",
"PreDiskCheck": "Good",
"SerialNo": "WP019EGM",
"State": "Sync",
"Tank": {
"Level": 0,
"Slot": 0,
"TankNo": 0
},
"UseMode": 0,
"Volume": "RaidVolume"
},
{
"BUS": "SATA",
"Capacity": 9999757606912.0,
"CmrSize": 0,
"DRTypeMixState": "Single",
"Firmware": "SNE0",
"LogicNo": 0,
"MRType": 0,
"Media": "DISK",
"MediaType": "HDD",
"Module": "ST10000VE0012KX101",
"Name": "\/dev\/sdl",
"OpState": 0,
"Parent": "\/dev\/md0",
"Partitions": [],
"PhysicNo": 4,
"PosLedState": 0,
"PowerMode": "StandBy",
"PreDiskCheck": "Good",
"SerialNo": "WP019EVM",
"State": "Sync",
"Tank": {
"Level": 0,
"Slot": 0,
"TankNo": 0
},
"UseMode": 0,
"Volume": "RaidVolume"
},
{
"BUS": "SATA",
"Capacity": 9999757606912.0,
"CmrSize": 0,
"DRTypeMixState": "Single",
"Firmware": "SNE0",
"LogicNo": 0,
"MRType": 0,
"Media": "DISK",
"MediaType": "HDD",
"Module": "ST10000VE0012KX101",
"Name": "\/dev\/sdm",
"OpState": 0,
"Parent": "\/dev\/md0",
"Partitions": [],
"PhysicNo": 3,
"PosLedState": 0,
"PowerMode": "StandBy",
"PreDiskCheck": "Good",
"SerialNo": "WP019EBK",
"State": "Sync",
"Tank": {
"Level": 0,
"Slot": 0,
"TankNo": 0
},
"UseMode": 0,
"Volume": "RaidVolume"
},
{
"BUS": "SATA",
"Capacity": 9999757606912.0,
"CmrSize": 0,
"DRTypeMixState": "Single",
"Firmware": "SNE0",
"LogicNo": 0,
"MRType": 0,
"Media": "DISK",
"MediaType": "HDD",
"Module": "ST10000VE0012KX101",
"Name": "\/dev\/sdn",
"OpState": 0,
"Parent": "\/dev\/md0",
"Partitions": [],
"PhysicNo": 8,
"PosLedState": 0,
"PowerMode": "StandBy",
"PreDiskCheck": "Good",
"SerialNo": "WP019E2J",
"State": "Sync",
"Tank": {
"Level": 0,
"Slot": 0,
"TankNo": 0
},
"UseMode": 0,
"Volume": "RaidVolume"
},
{
"BUS": "SATA",
"Capacity": 9999757606912.0,
"CmrSize": 0,
"DRTypeMixState": "Single",
"Firmware": "SNE0",
"LogicNo": 0,
"MRType": 0,
"Media": "DISK",
"MediaType": "HDD",
"Module": "ST10000VE0012KX101",
"Name": "\/dev\/sdo",
"OpState": 0,
"Parent": "\/dev\/md0",
"Partitions": [],
"PhysicNo": 7,
"PosLedState": 0,
"PowerMode": "StandBy",
"PreDiskCheck": "Good",
"SerialNo": "WP019EBQ",
"State": "Sync",
"Tank": {
"Level": 0,
"Slot": 0,
"TankNo": 0
},
"UseMode": 0,
"Volume": "RaidVolume"
},
{
"BUS": "SATA",
"Capacity": 9999757606912.0,
"CmrSize": 0,
"DRTypeMixState": "Single",
"Firmware": "SNE0",
"LogicNo": 0,
"MRType": 0,
"Media": "DISK",
"MediaType": "HDD",
"Module": "ST10000VE0012KX101",
"Name": "\/dev\/sdp",
"OpState": 0,
"Parent": "\/dev\/md1",
"Partitions": [],
"PhysicNo": 20,
"PosLedState": 0,
"PowerMode": "Active",
"PreDiskCheck": "Good",
"SerialNo": "WP019EZK",
"State": "Sync",
"Tank": {
"Level": 0,
"Slot": 0,
"TankNo": 0
},
"Temperature": 29,
"UseMode": 0,
"Volume": "RaidVolume"
},
{
"BUS": "SATA",
"Capacity": 9999757606912.0,
"CmrSize": 0,
"DRTypeMixState": "Single",
"Firmware": "SNE0",
"LogicNo": 0,
"MRType": 0,
"Media": "DISK",
"MediaType": "HDD",
"Module": "ST10000VE0012KX101",
"Name": "\/dev\/sdq",
"OpState": 0,
"Parent": "\/dev\/md1",
"Partitions": [],
"PhysicNo": 19,
"PosLedState": 0,
"PowerMode": "Active",
"PreDiskCheck": "Good",
"SerialNo": "WP019E3P",
"State": "Sync",
"Tank": {
"Level": 0,
"Slot": 0,
"TankNo": 0
},
"Temperature": 29,
"UseMode": 0,
"Volume": "RaidVolume"
},
{
"BUS": "SATA",
"Capacity": 9999757606912.0,
"CmrSize": 0,
"DRTypeMixState": "Single",
"Firmware": "SNE0",
"LogicNo": 0,
"MRType": 0,
"Media": "DISK",
"MediaType": "HDD",
"Module": "ST10000VE0012KX101",
"Name": "\/dev\/sdr",
"OpState": 0,
"Parent": "\/dev\/md1",
"Partitions": [],
"PhysicNo": 24,
"PosLedState": 0,
"PowerMode": "Active",
"PreDiskCheck": "Good",
"SerialNo": "WP019E4H",
"State": "Sync",
"Tank": {
"Level": 0,
"Slot": 0,
"TankNo": 0
},
"Temperature": 28,
"UseMode": 0,
"Volume": "RaidVolume"
},
{
"BUS": "SATA",
"Capacity": 9999757606912.0,
"CmrSize": 0,
"DRTypeMixState": "Single",
"Firmware": "SNE0",
"LogicNo": 0,
"MRType": 0,
"Media": "DISK",
"MediaType": "HDD",
"Module": "ST10000VE0012KX101",
"Name": "\/dev\/sds",
"OpState": 0,
"Parent": "\/dev\/md1",
"Partitions": [],
"PhysicNo": 23,
"PosLedState": 0,
"PowerMode": "Active",
"PreDiskCheck": "Good",
"SerialNo": "WP019E3Q",
"State": "Sync",
"Tank": {
"Level": 0,
"Slot": 0,
"TankNo": 0
},
"Temperature": 28,
"UseMode": 0,
"Volume": "RaidVolume"
},
{
"BUS": "SATA",
"Capacity": 9999757606912.0,
"CmrSize": 0,
"DRTypeMixState": "Single",
"Firmware": "SNE0",
"LogicNo": 0,
"MRType": 0,
"Media": "DISK",
"MediaType": "HDD",
"Module": "ST10000VE0012KX101",
"Name": "\/dev\/sdt",
"OpState": 0,
"Parent": "\/dev\/md1",
"Partitions": [],
"PhysicNo": 22,
"PosLedState": 0,
"PowerMode": "Active",
"PreDiskCheck": "Good",
"SerialNo": "WP019EVD",
"State": "Sync",
"Tank": {
"Level": 0,
"Slot": 0,
"TankNo": 0
},
"Temperature": 28,
"UseMode": 0,
"Volume": "RaidVolume"
},
{
"BUS": "SATA",
"Capacity": 9999757606912.0,
"CmrSize": 0,
"DRTypeMixState": "Single",
"Firmware": "SNE0",
"LogicNo": 0,
"MRType": 0,
"Media": "DISK",
"MediaType": "HDD",
"Module": "ST10000VE0012KX101",
"Name": "\/dev\/sdu",
"OpState": 0,
"Parent": "\/dev\/md1",
"Partitions": [],
"PhysicNo": 14,
"PosLedState": 0,
"PowerMode": "Active",
"PreDiskCheck": "Warn",
"SerialNo": "WP019EWH",
"State": "Sync",
"Tank": {
"Level": 0,
"Slot": 0,
"TankNo": 0
},
"Temperature": 28,
"UseMode": 0,
"Volume": "RaidVolume"
},
{
"BUS": "SATA",
"Capacity": 9999757606912.0,
"CmrSize": 0,
"DRTypeMixState": "Single",
"Firmware": "SNE0",
"LogicNo": 0,
"MRType": 0,
"Media": "DISK",
"MediaType": "HDD",
"Module": "ST10000VE0012KX101",
"Name": "\/dev\/sdv",
"OpState": 0,
"Parent": "\/dev\/md1",
"Partitions": [],
"PhysicNo": 18,
"PosLedState": 0,
"PowerMode": "Active",
"PreDiskCheck": "Good",
"SerialNo": "WP019EZM",
"State": "Sync",
"Tank": {
"Level": 0,
"Slot": 0,
"TankNo": 0
},
"Temperature": 30,
"UseMode": 0,
"Volume": "RaidVolume"
},
{
"BUS": "SATA",
"Capacity": 9999757606912.0,
"CmrSize": 0,
"DRTypeMixState": "Single",
"Firmware": "SNE0",
"LogicNo": 0,
"MRType": 0,
"Media": "DISK",
"MediaType": "HDD",
"Module": "ST10000VE0012KX101",
"Name": "\/dev\/sdw",
"OpState": 0,
"Parent": "\/dev\/md1",
"Partitions": [],
"PhysicNo": 21,
"PosLedState": 0,
"PowerMode": "Active",
"PreDiskCheck": "Good",
"SerialNo": "WP019EWL",
"State": "Sync",
"Tank": {
"Level": 0,
"Slot": 0,
"TankNo": 0
},
"Temperature": 28,
"UseMode": 0,
"Volume": "RaidVolume"
},
{
"BUS": "SATA",
"Capacity": 9999757606912.0,
"CmrSize": 0,
"DRTypeMixState": "Single",
"Firmware": "SNE0",
"LogicNo": 0,
"MRType": 0,
"Media": "DISK",
"MediaType": "HDD",
"Module": "ST10000VE0012KX101",
"Name": "\/dev\/sdx",
"OpState": 0,
"Parent": "\/dev\/md1",
"Partitions": [],
"PhysicNo": 17,
"PosLedState": 0,
"PowerMode": "Active",
"PreDiskCheck": "Good",
"SerialNo": "WP019E0H",
"State": "Sync",
"Tank": {
"Level": 0,
"Slot": 0,
"TankNo": 0
},
"Temperature": 30,
"UseMode": 0,
"Volume": "RaidVolume"
},
{
"BUS": "",
"Capacity": 109997332054016.0,
"CmrSize": 0,
"DRTypeMixState": "Single",
"Name": "\/dev\/md0",
"OpState": 0,
"Parent": null,
"Partitions": [
{
"FileSystem": "PVDISK",
"IsSupportFs": false,
"Name": "\/dev\/md0",
"Start": 0,
"Total": 3219603456
}
],
"Raid": {
"ActiveDevices": 12,
"AliasName": "RAID5_1",
"ChunkSize": 16,
"FailedDevices": 0,
"Level": 5,
"MemberInfos": [
{
"ID": 8,
"Spare": false
},
{
"ID": 11,
"Spare": false
},
{
"ID": 4,
"Spare": false
},
{
"ID": 10,
"Spare": false
},
{
"ID": 6,
"Spare": false
},
{
"ID": 5,
"Spare": false
},
{
"ID": 7,
"Spare": false
},
{
"ID": 3,
"Spare": false
},
{
"ID": 12,
"Spare": false
},
{
"ID": 2,
"Spare": false
},
{
"ID": 1,
"Spare": false
},
{
"ID": 9,
"Spare": false
}
],
"Members": [ "\/dev\/sdn", "\/dev\/sdc", "\/dev\/sdl", "\/dev\/sda", "\/dev\/sdj", "\/dev\/sdh", "\/dev\/sdo", "\/dev\/sdm", "\/dev\/sdb", "\/dev\/sdk", "\/dev\/sdi", "\/dev\/sdg" ],
"RaidDevices": 12,
"RecoverMBps": 0.0,
"RecoverPercent": 0.0,
"RecoverTimeRemain": 0,
"SpareDevices": 0,
"State": [ "Active", "CreatVG" ],
"Sync": 0,
"TotalDevices": 12,
"UUID": "2cb254ea:b401130a:6e9e714d:ffc1de04",
"WorkingDevices": 12
},
"State": "Active",
"Tank": {
"Level": 0,
"Slot": 0,
"TankNo": 0
},
"Volume": "VolumeGroup"
},
{
"BUS": "",
"Capacity": 109997332054016.0,
"CmrSize": 0,
"DRTypeMixState": "Single",
"Name": "\/dev\/md1",
"OpState": 0,
"Parent": null,
"Partitions": [
{
"FileSystem": "PVDISK",
"IsSupportFs": false,
"Name": "\/dev\/md1",
"Start": 0,
"Total": 3219603456
}
],
"Raid": {
"ActiveDevices": 12,
"AliasName": "RAID5_2",
"ChunkSize": 16,
"FailedDevices": 0,
"Level": 5,
"MemberInfos": [
{
"ID": 17,
"Spare": false
},
{
"ID": 15,
"Spare": false
},
{
"ID": 18,
"Spare": false
},
{
"ID": 22,
"Spare": false
},
{
"ID": 24,
"Spare": false
},
{
"ID": 20,
"Spare": false
},
{
"ID": 13,
"Spare": false
},
{
"ID": 21,
"Spare": false
},
{
"ID": 16,
"Spare": false
},
{
"ID": 14,
"Spare": false
},
{
"ID": 23,
"Spare": false
},
{
"ID": 19,
"Spare": false
}
],
"Members": [ "\/dev\/sdx", "\/dev\/sde", "\/dev\/sdv", "\/dev\/sdt", "\/dev\/sdr", "\/dev\/sdp", "\/dev\/sdf", "\/dev\/sdw", "\/dev\/sdd", "\/dev\/sdu", "\/dev\/sds", "\/dev\/sdq" ],
"RaidDevices": 12,
"RecoverMBps": 0.0,
"RecoverPercent": 0.0,
"RecoverTimeRemain": 0,
"SpareDevices": 0,
"State": [ "Active", "CreatVG" ],
"Sync": 0,
"TotalDevices": 12,
"UUID": "9a7e6e86:180ea46a:b19dd6f2:cb6a4e62",
"WorkingDevices": 12
},
"State": "Active",
"Tank": {
"Level": 0,
"Slot": 0,
"TankNo": 0
},
"Volume": "VolumeGroup"
}
],
"FreeSpace": 0.0,
"Level": 0,
"SlotNum": 24,
"TankNo": 0,
"Temperature": 0.0,
"TotalSpace": 0.0
}
]
},
"result": true,
"session": "b62094f5c75a79c4a690dcc52ab8d365"
}