1 (изменено: 3wedsmncjklvjvd73734, Вчера 16:19:42)

Тема: В продолжение темы "Не убиваемый windows 10" (PowerShell)

Продолжаем "улучшаться в домике".
В ЭТИ трудные времена, когда некий поисковик скупил все ssd от производителей этих ssd на алиэкспрессе. Приходиться искать самые дешёвые ssd, которые не известно что имеют внутри. На алиэкспрессе,  теперь  нет вообще производителей ssd, остались подделки с названиями магазинов типа
"Shop ....".   
А хочется иметь :
1- надёжность
2- скорость
Выход из положение предоставила сама Wind-а.
...

+ открыть спойлер

И да, немного отступление от темы..
Настоятельно рекомендую применять для сохранения инфы на загрузочном ssd, RAID1.
При этом применять железный контролёр, а не софтовый RAID.
И конечно же весь диск "С" оформлять в RAM прогой в вине "uwfmgr.exe", про которую, я тут писал ранее.
Поработав уже > полугода в таком режиме, могу сказать с уверенностью, что для диска "С" достаточно 1,5 гига памяти.
Но конечно если какая либо прога грузит,  на него для "темпа", типа торента или IDM, то конечно надо больше ей памяти.
Но можно и для этого эти каталоги типа "темп", отключать из RAM-а. Но тогда опять у вас ssd будет под "сбоем" из-за ресурса его.
Немного уточнения про "uwfmgr.exe"... Ранее я тут описывал как мучился с ней по поводу "рандомной" ошибки при загрузки с диска "С".
Но когда начал изготавливать себе свой домашний "Дата центр", состоящий из 2-ух дешёвых мам (LGA11500) на целероне, и с 8-мью ssd на каждой такой маме, всё выяснил в чём дело. "Дело было не в бобине - человек сидел в кабине".
Короче. При инициализации "uwfmgr.exe", при первой перезагрузки, происходит анализ этой прогой всех дисков (КРОМЕ USB) и "срисовывания" с них серийников. Включая и ssd которые додцеплены были к компу через переходники USB3/SATA3, потому что эти переходники в винде ассоциируются не как USB, а настоящие SATA этим переходником. Это легко проверить прогой, "trimcheck", которая проверяет на дисках ssd включения TRIM режима. Как известно режим TRIM не включается на устройствах USB.
При отсутствии любого из этих дисков "uwfmgr.exe" как бы "портиться" и при следующей загрузки вылетает ошибка. Лечиться "просто". С помощью закладок из темы "Не убиваемый windows 10". Делается закладка с включением "uwfmgr.exe". Обзывается как "mama safe", и уже от неё делается сама рабочая закладка в которой автоматом подключена "uwfmgr.exe". При ошибки рабочей закладки, делается заного опять эта рабочая закладка в меню закладке "boot_menu", методом VBS скрипта, расположенного на рабочем столе закладки.


option explicit
dim objWshShell,objExec

'=========== запуск от админа скрипта
Set objWshShell = WScript.CreateObject("WScript.Shell")
If WScript.Arguments.Length = 0 Then
  Set objExec = CreateObject("Shell.Application")
  objExec.ShellExecute "wscript.exe" _
    , """" & WScript.ScriptFullName & """ RunAsAdministrator", , "runas", 1
Set objWshShell =nothing
  WScript.Quit
End if
'=====================================


dim mama
dim str,child,OutStr
mama="ТУТ ПОЛНЫЙ ПУТЬ К ФАЙЛУ ВКЛЮЧАЯ И САМО ИМЯ ФАЙЛА mama_safe.VHDX"
child="ТУТ ПОЛНЫЙ ПУТЬ К ФАЙЛУ ВКЛЮЧАЯ И САМО ИМЯ ФАЙЛА ВАШЕЙ ЗАКЛАДКИ .VHDX"

set objWshShell =CreateObject("WScript.Shell")

'-- В начале удаляем, закладкус ошибкой. 
str="del "  & child
set objExec = objWshShell.Exec("cmd ")
OutStr=ExecuteDiskPartCommand(str,false)
ExecuteDiskPartCommand "exit",false 
set objExec = Nothing
'------------------------------
str = "CREATE VDISK FILE=" & child & " PARENT=" & mama
set objExec = objWshShell.Exec("diskpart.exe")
OutStr=ExecuteDiskPartCommand(str,false)
str = "exit" 
OutStr=ExecuteDiskPartCommand(str,false)
Set objExec =Nothing
set objWshShell =nothing
WScript.Quit



Function ExecuteDiskPartCommand (strCommand,disp)
dim IgnoreThis: IgnoreThis=""
    objExec.StdIn.Write strCommand & VbCrLf
    Do While True
        IgnoreThis = objExec.StdOut.ReadLine & vbcrlf              
        If InStr(IgnoreThis, "DISKPART>") <> 0 Then Exit Do
        If disp=false Then Exit Do
    Loop
    objExec.StdIn.Write VbCrLf
    ExecuteDiskPartCommand = ""    
    Do While True
        ExecuteDiskPartCommand = ExecuteDiskPartCommand & objExec.StdOut.ReadLine & vbcrlf              
        If InStr(ExecuteDiskPartCommand, "DISKPART>") <> 0 Then Exit Do
        If disp=false Then Exit Do
    Loop
End Function

Проверяется работоспособность RAM защиты скриптом bat


uwfmgr overlay get-consumption
pause

Если в ответе там стоит "0" байт, то сама защита включена (прога защиты загружена ), но не пашет для диска "С". И все данные пишутся на диск "С". Т.е. ssd расходует свой потенциал жизни.

2

Re: В продолжение темы "Не убиваемый windows 10" (PowerShell)

Продолжение. Теперь по самой теме.

+ открыть спойлер

Есть в винде, в определённых версиях, софтовый вариант изготовления RAID.
Вот этот RAID как раз и выручает нас по поводу пунктов
1- цена вопроса при повреждении ssd
2- надёжность
3- скорость
4- размер ресурса ssd TBW (Total Bytes Written).
Но тут конечно, есть нюанс. Если нужна надёга то скорость как бы под вопросом. Если нужна скорость, то тут под вопросом надёга.
Но есть вариант конечно и объединить всё это. Всё в наших руках, и желании.
Про изготовление самого RAID в "дисковом пространстве", я не буду тут вам описывать. Этот вариант не гарантирует вам 100% скорость, хоть даже применив RAID0 из нескольких ssd. Почему? Потому что при изготовлении RAID в "дисковом пространстве", винда использует дефолтовые параметры. При этом самам винда не меняет их от количества ssd, но и сама винда там не даёт возможности эти параметры поменять.
А эти параметры при достижении скорости очень важны и нужны при наличии N количества дисков.
Именно количество дисков влияет на скорость. А параметры по умолчанию не учитывают ЭТО.
Например, я изготовил из USB3 hab-а(4-е штуки usb), RAID5. Применил для этого 3 и 4 ssd диска. Изготовление делал в графической оболочке, самого "дискового пространства". При тестировании выяснилось, что со временем, где некоторые ssd имеют медленные ячейки памяти, диск отключается от RAID и "дисковое пространство" ругается на то что бы я проверил физические диски и заменил их.
Кстати, этим методом можно проверять на "вшивость" ssd диски. Но конечно я знаю, что сам hab(далее хаб), пытается делить общую скорость на количество дисков в нём. И поэтому происходит сбой из-за малой скорости одного из ssd, которые должны все пахать синхронно по скорости.
Но есть способ обойти ЭТО. Это выставлять программно другие параметры для изготовления RAID.
Этот способ и причины малой скорости я подчерпнул из забугоной статьи-> хххх://storagespaceswarstories.com/storage-spaces-and-slow-parity-performance/

продолжение следует

3 (изменено: 3wedsmncjklvjvd73734, Вчера 15:25:26)

Re: В продолжение темы "Не убиваемый windows 10" (PowerShell)

Режим оптимизации будет осуществлять на примере применении хаба у которого в наличии 4 юсб штекера.
И да! Обяза при создании "дискового пространства" запускайте скрипт (я его выкладывал тут ранее) который показывает очерёдность дисков и их номера. Потому что само "дисковое пространство" не показывает эту инфу, и поэтому при сбое "дискового пространства" она не выдаёт конкретную инфу о каком диске идёт речь. Да, оно показывает диск который сбойнул но не показывает какой конкретно диск, который воткнут в хаб.

+ открыть спойлер

Поэтому после создания "дискового пространства" запускайте скрипт и переименовывайте диски, что новое имя говорила о каком конкретно диске воткнутом в хаб/sata идёт речь, что бы при сбое не искать в дебрях серийников ssd дисков конкретный сбойнутый диск. Привяжите серийник ssd к своему конкретному имени этого диска. И ещё, напомню. Очерёдность воткнутости в хаб дисков для "дискового пространства" не обязательна. "Дисковое пространство" всеядно и ему пофигу очерёдность, по сравнению с RAID который был сделан в "управление дисков".
...
Из статьи (см выше пост), становиться ясно, что сделанный раид в хабе способен пахать с максимальной скоростью usb3, только на 3-ёх дисков.
Поэтому вставляем в хаб 3-и ssd и делаем из него раид0, для проверки на максимальную скорость самого хаба.
скрипт на PowerShell.
... Можно было заморочиться этим и на VBS, но там "долбёжки" много будет для поиска нужного элемента в WMI, но исполнение будет 1 в 1 такое же как и на  PowerShell.
Прежде чем запускать скрипт, нужно подготовить диски к созданию пула. Поэтому если диски с завода, то из надо инициализировать в GPT в diskpart или в "управление дисков". Если нет, то лучше:
1- Запустить diskpart


diskpart
lis disk
sel disk N- N это номер вашего диска который нужно засунуть в "дисковое пространство"
clean
convert GPT
create partition primary size=1000 
format fs=ntfs label=test - тут форматирование медленное а не быстрое. Это надо обяза сделать что бы стереть размер 1гиг и диска, который мешает инициализировать в пул этот диск.
clean - после этого опять стираем диск - он уже без инфы 1гиг.
convert GPT
exit
 

всё диск готов.
PowerShell.


# Шаг 1: Найти подходящие диски
$disks = Get-PhysicalDisk | Where-Object { $_.CanPool -eq $true }
# Шаг 2: Показать все диски которые вин обнаружил для создания пула
Write-Output $disks
# Шаг 3: Создать пул
Get-StorageSubsystem -FriendlyName "*Windows Storage*"
$pool = New-StoragePool -FriendlyName "RAID0" -PhysicalDisks $disks -StorageSubSystemFriendlyName "Windows Storage*"
# Шаг 4: Если вам нужно включить в пул не все диски а конкретные, то выполнять команду нужно так
$disks = Get-PhysicalDisk | Where-Object {$_.SerialNumber -In ("YS20210531000001061","YS20210531000001049","YS20210531000001050")}
Write-Output $disks
#- сами серийники дисков получаете из команды Get-PhysicalDisk. В ответе терминала PowerShell их копируете и вставляете в свой код.
#- потом опять пишем команду инициализации в которой переменная $disks уже содержит в себе нужные вам диски
$pool = New-StoragePool -FriendlyName "RAID0" -PhysicalDisks $disks -StorageSubSystemFriendlyName "Windows Storage*"

 
Теперь если вы откроете графическую среду  "дисковое пространство" из панели управления, то увидите созданный вами пул под именем RAID0
Теперь создадим виртуальный диск и правильно форматнём его.
Напомню. Создаём RAID0 в хабе из 3-ёх дисков.


New-VirtualDisk -StoragePoolFriendlyName "RAID0" -ProvisioningType Fixed -FriendlyName "test_raid0" -UseMaximumSize -ResiliencySettingName Simple -NumberOfColumns 3 -Interleave 16KB -WriteCacheSize 32MB


от себя. Я добавил в код свой параметр -WriteCacheSize 32MB. Как известно сама винда по умолчанию, имеет кешь 2000гиг. И поэтому при копировании файлов на диск первые 2-а гига пишутся на ура, а потом туфта.
В коментах той статьи (см пост выше), один юзер проводил эксперементы и вывел что кешь на эти раиды лучше иметь постоянный 32 мегабайта, а не 2гига. При этом все ссылаются на этот параметр как оптимальный из-за того что шины pci по стандарту имеют полосу 32 мега за раз. Т.е. 32 это стандарт для всех контролёров, а потом эти контролёры её умножат как хотят. Она кратна 32. Т.о. кешь 32 мега будет постоянно заполняться данными и переноситься в раид, не задерживаясь когда будет новая партия. Всё будет происходить одним потоком.

продолжение следует

4 (изменено: 3wedsmncjklvjvd73734, Вчера 16:18:02)

Re: В продолжение темы "Не убиваемый windows 10" (PowerShell)

1- Хотя у меня мой личный хаб и переделан мной под отдельный внешний блок питания, наш оптимизировнный  по параметрам раид будет отлично пахать и без внешнего блока питания, потому, что оптимизировнный наш райд будет поочерёдно подключать к юсб3 только один диск для записи/чтения. Главное условие, по хабу, это точное исполнения по железу для юсб3, а не для юсб2.
2- AUX в той статье (см выше пост), это размер параметра при форматировании тома. В вине этот параметр если захотеть форматировать том, будет обзываться "размер единицы распределения".
Поэтому для AUX в винде существуют только ЭТИ параметры -->

Refs = 4096 и 64k
ntfs = 4096,8192,16k,32k,64k,128,256k,512k,1024k,2048k

3- Для "дисковое пространство" не существует параметра -Interleave ниже 16KB. Винда всегда будет на ругаться, если его сделать ниже 16к, например 8к. Поэтому исходя из формулы AUX=(NumberOfColumns - кол. дисков для защиты данных)*Interleave , всегда должна быть кратна 2.
Иначе у вас будет калапс в хабе с данными.
Пример. делаем раид1. дисков =2 , один из них зеркало. формула такая  AUX=(2-1)*16к. Вместо 16к можно подставить хоть 2048k, но тогда у вас
будет излишне расходоваться дисковое пространство для одного маленького файла равного 1к. А если их 1000-и?
4- Почему раид в "дисковом пространстве" выгоден  нежели купить один большой диск? Да оч при оч просто. При вылите большого диска, у вас теряется вся инфа. Второе скорость его записи будет зависеть от ячеек памяти в нём одном. Третье, его  TBW (Total Bytes Written) будет зависеть от производителя памяти. В случае же с раид TBW (Total Bytes Written), будет умножаться на количества дисков, потому что один файл будет распределяться на 3-и диска а не на один в случае с одним диском. А скорость будет зависеть тоже от ячеек памяти в каждом диске, но есть большая вероятность, что они будут попадаться инфе не все сразу, а рамдомно. Поэтому скорость будет выровнена по серёдке.
..
продолжим.

+ открыть спойлер

в коде выше, параметр  -ResiliencySettingName Simple ЭТО раид0. Если нужно раид5 то параметр будет таким -ResiliencySettingName Parity. если же раид1 то -ResiliencySettingName Mirror
параметр -NumberOfColumns 3 лучше применять по количеству дисков.
Из вышесказанного получаем что AUX у нас при раид0 и при наличии 3-ёх дисков должен быть равен 16к*3=48к но AUX с 48к не существует. Поэтому лучше для раид0 применять 4-е диска а не 3. Но для раид5
AUX=(3-1)*16к=32к будет полёт ракеты сравнимый по скорости записи инфы с раид0.


Initialize-Disk -VirtualDisk (Get-VirtualDisk -FriendlyName "test_raid0") -PartitionStyle GPT
Get-Disk -FriendlyName "test_raid0"

разобьём наш раид "test_raid0" на разделы по 100гиг. И запишем в каждый раздел для теста на скорость инфу разных по размеру файлов с другого диска, и который имеет точно большую скосроть на чтение.


New-Partition -DiskNumber 10 -DriveLetter M  -Size 100GB | Format-Volume -AllocationUnitSize 4KB -FileSystem NTFS -NewFileSystemLabel "RAID0_1" -Confirm:$false
New-Partition -DiskNumber 10 -DriveLetter N  -Size 100GB | Format-Volume -AllocationUnitSize 4KB -FileSystem NTFS -NewFileSystemLabel "RAID0_2" -Confirm:$false
New-Partition -DiskNumber 10 -DriveLetter R  -UseMaximumSize | Format-Volume -AllocationUnitSize 4KB -FileSystem NTFS -NewFileSystemLabel "RAID0_3" -Confirm:$false

 
тут в коде есть параметр -DiskNumber 10. Это номер диска пула раид. Его можно посмотреть в упр диском или в diskpart. У вас будет этот номер другой. Учтите ЭТО.
И теперь проверьте какая будет скорость на каждом разделе. В параметрах по форматированию указано AUX=4096 (4к). Можете отформатировать по другому, всё равно скорость у вас будет очень низкая, из-за несовпадения AUX с Interleave равным кратности 2.
После испытания, стираем всё.


#-- удаляем test_raid0
Remove-VirtualDisk -FriendlyName "test_raid0" -Confirm:$false
#-- удаляем "RAID0"
Remove-StoragePool -FriendlyName "RAID0"  -Confirm:$false


Теперь добавляем 4-ый диск, и делаем новый раид0.
# Шаг 1: Найти подходящие диски
$disks = Get-PhysicalDisk | Where-Object { $_.CanPool -eq $true }
Write-Output $disks
# Шаг 2: Создать пул
Get-StorageSubsystem -FriendlyName "*Windows Storage*"
$pool = New-StoragePool -FriendlyName "RAID0" -PhysicalDisks $disks -StorageSubSystemFriendlyName "Windows Storage*"
-- RAID0 разбитый на 5-ть разделов по 100гиг
New-VirtualDisk -StoragePoolFriendlyName "RAID0" -ProvisioningType Fixed -FriendlyName "test_raid0" -UseMaximumSize -ResiliencySettingName Simple -NumberOfColumns 4 -WriteCacheSize 32MB
Initialize-Disk -VirtualDisk (Get-VirtualDisk -FriendlyName "test_raid0") -PartitionStyle GPT
Get-Disk -FriendlyName "test_raid0"
New-Partition -DiskNumber 10 -DriveLetter M  -Size 100GB | Format-Volume -AllocationUnitSize 4KB -FileSystem NTFS -NewFileSystemLabel "RAID0_1" -Confirm:$false
New-Partition -DiskNumber 10 -DriveLetter N  -Size 100GB | Format-Volume -AllocationUnitSize 4KB -FileSystem NTFS -NewFileSystemLabel "RAID0_2" -Confirm:$false
New-Partition -DiskNumber 10 -DriveLetter O  -Size 100GB | Format-Volume -AllocationUnitSize 4KB -FileSystem NTFS -NewFileSystemLabel "RAID0_3" -Confirm:$false
New-Partition -DiskNumber 10 -DriveLetter P  -Size 100GB | Format-Volume -AllocationUnitSize 4KB -FileSystem NTFS -NewFileSystemLabel "RAID0_4" -Confirm:$false
New-Partition -DiskNumber 10 -DriveLetter R  -UseMaximumSize | Format-Volume -AllocationUnitSize 4KB -FileSystem NTFS -NewFileSystemLabel "RAID0_4" -Confirm:$false
------ СКОРОСТЬ НА ЭТИХ ПАРАМЕТРАХ РАВНА 400мегб/сек
Как будто мы имеем большой ssd и он весь скоростной. Его уже можно применять как ssd для записи данный.
Но т.к. он не раид1, и не раид5 то о сохранение данных при вылете одного из дисков, придётся забыть.
1- При создании раид5 использовать всегда нужно не чётное количество дисков.
2- AUX при этом всегда будет 32к. Т.е. форматировать его нужно с параметром "размер единицы распределения" = 32к.
При таких -NumberOfColumns 3 - всегда равен количеству дисков  -Interleave 16KB всегда равен 16к для лучшего использования дискового пространства. Если будите использовать под раид5 чётное количество дисков вы потеряете в скорости.
поэтому я в своих 2-ух мамах использую максимальное количество sata 8 штук, Но если будет раид5 то буду применять 7 штук дисков.

...
отдельно про sata. У моих 2-х мам всего 2-а сата3 (6 гиг). Остальные сата 2. Для раид всегда должны использованы одинаковые парметры по сата. Поэтому я использовал pci контролёры с asm1061R (читайте мою самую первую тему тут на форуме про неубиваемый вин10).
Упрежу сразу. Все pci контролёры которые asm1061 без R выбросите сразу. Они просто делители на 2-а. И поэтому с них будите получать скорость равную сата2. Это же касается и с pci контролёры которые имеют 2-а юсб3. они тоже делители на 2-а и скорость их в раид показывает что это  просто делители. Я для теста делал раид1 и сравнивал с разъёмами на маме. Ну например т.к. в моих тех мам есть 2-а юсб3 и 2-а юсб2 , то методом перестановки легко доказал в отзыве по нему на озоне что это делитель одного юсб3 на 2-а юсб2. Что и привело продавца этих pci контролеров к возврату мне средств, и даже сам контролёр оставил мне без возврата. Остальные 3-и штуки pci я  просто не получал и сдал их в пункте приёма озона.