Бесплатное решение для создания программного гибрида SSD и HDD на домашнем ПК Windows Tiered Storage Spaces

Привет, Хабр! Уже много лет я читаю замечательные посты, и, кажется, наконец нашел чем сам могу поделиться с сообществом. 

Сегодня я хотел бы рассказать про технологию создания программного гибридного локального диска на основе SSD и HDD. Впервые я заинтересовался этой технологией когда купил себе новый процессор от Ryzen и прочитал статью про AMD StoreMI, но к сожалению поддержка данного продукта прекратилась, а покупать FuzeDrive или PrimoCache не хотелось. 

upd. оказывается AMD выпустили вторую версию StoreMI, хотя еще недавно заявляли что прекращают поддержку. Напомню, что StoreMI работает только при наличии материнской пла​ты с чипсетом AMD X570, B550, 400 серии, X399 или TRX40.

В серверных версиях windows существует весьма интересная технология Tiered Storage Spaces, которая позволяет легко объединять один или несколько SSD и HDD в общий пул - логический диск, на котором часто используемые “горячие” данные будут незаметно для пользователя переноситься на SSD, а “холодные” данные, к которым пользователь обращается не так часто, будут при этом храниться на HDD. Про настройку данной технологии на серверных продуктах можно почитать тут по ссылке, также уже существует несколько статей на Хабре. Но, как оказалось, данная технология присутствует также и на настольной версии windows, правда настраивается она только через командную строку так как нет GUI. Для упрощения этого процесса существует репозиторий со скриптами, которые позволяют автоматизировать процесс создания tier storage. 

Для хранения важных данных не рекомендуется использовать конфигурации windows storage spaces с выключенным mirroring. Mirroring позволяет создать массив RAID c функцией коррекции ошибок, которая должна помочь сохранить данные в случае поломки одного из дисков, но для этого необходимы дополнительные диски, объем которых не получится использовать для хранения данных.

Перейдем к делу

Для начала советую запустить PowerShell от имени администратора и использовать команду

Get-PhysicalDisk

Параметр CanPool должен соответствовать Trueоколо всех ваших SSD и HDD, которые вы хотите добавить в пул. Если по запросу команды Get-PhysicalDisk у одного из ваших накопителей, которые вы хотите добавить в пул будет состояние False, то необходимо при помощи утилиты diskpart запущенной от имени администратора выполнить команды:

list disk #выбрать номер нужного диска, для примера диск 2
select disk 2
clear

А затем в Powershell запущенной от имени администратора выполнить команду:

Reset-PhysicalDisk ST2000DM008-2FR102 

где ST2000DM008-2FR102 - это параметр friendly name диска, который вы хотите вернуть в состояние True. Обратите внимание, что диски, у которых значение CanPoolравно True будут отформатированы в процессе выполнения скрипта, и, если вы не хотите добавлять их в пул, то необходимо заранее отсоединить эти диски, либо переписать скрипт.

Затем просто клонируйте репозиторий, и запустите запустите скрипт new-storage-space.ps1 Во время выполнения закройте окна, которые будут предлагать вам отформатировать диск, и ждите завершения скрипта.

По поводу того, что будет, если один из дисков пула отвалится. Я пытался просто отключать SSD на выключенном компьютере и, к сожалению, до тех пор пока я его не присоединил SSD обратно и не перезагрузил компьютер, локальный диск не был виден в системе (думал может хотя бы данные, которые были на HDD отображаться будут, но нет).

А что там по скорости?

Автор репозитория указал следующие скорости при тестировании системы:

Также интересным мне показалось сравнение из этого видео на youtube.

Я сам не производил тестирования на чтение, но сравнивал скорость записи на чистый 2 Тб HDD Seagate BarraCuda 7200 rpm и 256 MB cache, и tier storage space из этого же HDD диска и SSD Crucial BX500 на 240 Гб. 

При копировании больших файлов (установленный stalker anomaly, который почти полностью состоит из больших файлов .db размером примерно в 1 Гб) storage tier изначально копировал на скорости чуть более 400 Мб/сек, но затем, скорость копирования опускалась до 110 Мб/сек, что даже меньше чем скорость записи на HDD без storage tier (160 Мб/сек на тех же файлах).

К сожалению, в тот момент когда я производил тесты я не думал что буду писать статью и не догадался использовать snipping tool а просто делал фото на телефон.

слева storage tier справа просто HDD
слева storage tier справа просто HDD

Зато, при копировании порядка 10 Гб стандартных фоток (размер одной примерно 4-5 Мб) storage tier практически стабильно имел скорость порядка 260 Мб/сек против скачущих 180 Мб/сек у HDD.

Для того чтобы посмотреть какой процент данных на самом деле сейчас находится именно на SSD диске нужно в PowerShell с правами администратора запустить:

defrag D: /g /h /#

Наиболее интересными для нас тут являются параметры Percent of total I/Os serviced from the Performance tier - процент данных, которые при чтении были считаны именно с SSD. Также в таблице можно увидеть зависимость процента данных, которые будут взяты с высокопроизводительного накопителя от минимальной требуемой емкости SSD диска.

Для создания задачи автоматической оптимизации используется команда 

Get-ScheduledTask -TaskName "Storage Tiers Optimization" | Start-ScheduledTask

Модификация скрипта

После произведенных тестов мне захотелось изменить несколько вещей. Первое - отдельно изменять процент неиспользуемого места на дисках, так как даже 1 процент от 2 Тб диска это 20 Гб. (объяснение почему нельзя использовать весь диск можно найти тут). По итогу экспериментальным путем при моих параметрах удалось добиться всего 0.13 процента неиспользуемого места на жестком диске.

Во-вторых, я пытался изменить размер параметра WriteCacheSize для увеличения скорости записи данных на tiered storage, но к сожалению даже установив размер в 20 Гб, скорость записи совершенно не отличалась от дефолтного параметра AutoWriteCacheSize (при котором размер WriteCacheSize равен 1 Гб).

Также я нашел информацию, что можно использовать параметр представленный ниже для увеличения скорости, но это может быть небезопасно с точки зрения хранения данных.

Set-StoragePool -FriendlyName "SSHD Storage Pool" -IsPowerProtected $True

Все мои изменения для удобства я залил в свой репозиторий на github.

Выводы

Как я уже отметил выше, не стоит хранить важные данные, если вы используете схожую с моей конфигурацию 1 SSD 1 HDD (без использования Mirroring). Но для хранения не особо нужных тестовых виртуальных машин, игр, фильмов, и другой локальной файловой помойки такое решение подходит отлично. Загрузка игр заметно ускоряется, и обычно со второго запуска скорость на глаз не отличима от запуска с SSD.

Средняя зарплата в IT

120 000 ₽/мес.
Средняя зарплата по всем IT-специализациям на основании 3 754 анкет, за 1-ое пол. 2021 года Узнать свою зарплату
Реклама
AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Подробнее

Комментарии 26

    0
    А как это физически отображается на SSD? Файлы в какой-то папке?
      0
      Не совсем понял вопрос.
      SSD не будет отдельно отображаться. SSD и HDD будут отображаться вместе как просто локальный диск D (букву можно в скрипте поменять).
      А если ты имеешь в виду в каком виде реально данные хранятся на диске — к сожалению не могу ответить на этот вопрос…
      +2

      Такие штуки железно были же. Жесткие диски с небольшим ССД. А еще была технология, где предлагалось на флешку писать часто-востребванные данные


      При текущих ценах на SSD — эти штуки вымерли

        0
        ну тут почти тоже самое, только часто-востребованные «горячие» данные пишутся на SSD. Вообще хотелось бы найти что-то типа этого, вот только чтобы можно было указать чтобы файлы размером скажем менее 1 Гб писались именно на SSD (вне зависимости от востребованности). И когда они начинают преодолевать выделенный лимит, лимит на максимальный размер файла уменьшался.
        0
        Меня интересует немного другой сценарий использования.
        1. Есть данные которые 95% времени нужны только на чтение.
        2. Скорость чтения и записи не важна
        3. Надежность важна
        4. Тишина компьютера важна

        Допустим у меня есть 2Тб данных и два диска для них — hdd 2Tb и ssd 2Tb. Я хочу использовать их в зеркале. Можно ли настроить систему так чтобы hdd не запускался до тех пор пока не потребуется что-то записать. Да может будет немного медленнее чем читать с hdd и ssd вместе (хотя не думаю) но это в общем-то меня устраивает. Хочется чтобы компьютер не шумел вообще. Все остальное кроме дисков у меня полностью бесшумное.

        Можно конечно решить проблему радикально — купить и на вторую часть зеркала ssd но как-то дорого, да и потребности пока нет, места хватает, диски все нормально работают.

        Есть ли такая опция?
          0
          Я думаю в этом случае можно к примеру сделать задачу которая будет запускаться когда вы не рядом с компьютером и бэкап на HDD из SSD делать.
          А вообще, у меня в конфигурации HDD начинает шуметь именно когда я его открываю. То есть если я в данный момент по нему не лазаю или не редактирую что-то, он не шумит.
          На самом деле я в зеркало их ставить не пробовал, возможно и стандартное зеркало из storage spaces будет работать именно так как вы хотите…
          Если все же решите проверить, напишите пожалуйста результат.
            0

            Согласен, кто му же у Intel есть софт или правильнее технология, управления дисками. Ставиться под Windows. Она автоматически ускоряет ssd на 15% и контролирует, обращение к дискам. Если нет обращений то и диски все не работают. Конечно при частом обращении это вопрос спорный, не раз обсуждался. Но в данном случае, ssd уже в полный рост стоят на ногах, а hdd больше для хранения данных. То думаю отключение дисков, становиться актуальным. Кто му же, технология позволяет настроить, оповещения о состоянии носителей, даже на вашу почту, при молейшем подозрении на неисправность, предупреждение исходит от средств диагностики, тесть сам процес, как выглядит не известно. Всё работает в фоне. Как результат ssd 1 4 hdd шума ни какого. Но доступ при обращении к hdd чуть замедлен при первом обращении, после долгого простоя диска. Что мне не критично, вообще.

            0

            Советую попробовать unraid.
            Там точно есть настройка чтобы крутились только те диски которые сейчас нужны.
            Плюс полезное место это n-1 (или -2 если два диска под хэш).
            Плюс если вылетит больше дисков чем можно — данные на живых дисках останутся доступными.
            Минус только один — платно. (Ну или условно наказуемо)

            0
            Технология хорошая, но в рамках домашнего использования бесполезная. Оное не предполагает того, что вы долго используете последовательное чтение и/или запись. Оно бесполезно для медисервера, оно бесполезно для файлопомойки. Можно подумать об этом если у вас есть домашний сервер виртуализации на базе Hyper-V или процессы сборки кода, но даже в этом случае чаще проще и дешевле купить емкий ssd диск. Но я понимаю, что могут найтись энтузиасты и специфичные методы использования хотя мне трудно их (кейсы использования) себе представить.

            На мой взгляд хорошо, что Microsoft внедряет в свои серверные продукты технологии из мира ентерпрайз схд, но нужно понимать что на всем этом есть ограничения не только железного характера из-за отсутствия выделенных контроллеров. Самое большое ограничение — это фича работает не онлайн. Она собирает информацию по частоте использования блоков и в процессе оптимизации, запущенной когда то ночью по расписанию, засовывает более востребованные блоки в часть тома располагающегося на ссд. Вроде профит.

            Однако есть нюансы:
            Т.е. вы можете в воскресенье весь день вертеть тестовую базу в хвост и в гриву, а в понедельник обнаружить что блоки данных от продовой базы лежат на медленных дисках и вы никак не можете оперативно и на лету это исправить.

            Тиринг очень был нужен когда ссд были дорогими, но с ними всеравно был прирост по производительности на схд где блоки летают от медленных дисков до быстрых онлайн и в фоне. Там где не allflash решение оное и сейчас активно используется.
              0
              Ну конкретно в моем случае, мне очень нравится что виртуалки и игры начинают грузиться со скоростью SSD со второго раза. Из-за медленного интернета качать все в каждый раз — не вариант, а основной SSD небольшой и не охота его забивать. Думаю найдется много человек у которых как и у меня уже имеется HDD.
              Но, в целом, я согласен с тем, что наверное новый HDD я сейчас покупать не стал бы и все же доплатил и просто купил SSD. Так что основное применение — для тех у кого уже есть HDD и выкидывать его — жалко.
                0
                Технология хорошая, но в рамках домашнего использования бесполезная

                Много лет использую похожую технологию на домашнем ПК с linux (lvm-cache). Очень доволен. Сколько бы мне стоил настоящий NVME на 10Тб боюсь смотреть, а так за скромный прайс всё что нужно работает быстро и места много.

                  0
                  вопрос в юзеркейсе, какой у вас?
                    0

                    То же, что и у всех. Кинцо, игры, хобби.

                0

                А как эта конструкция выглядит в диспетчере дисков?

                0
                Так есть же Intel Optane, тоже самое, только аппаратно. Многие материнские платы сейчас поддерживают эту технологию. По сути тоже самое, что описал автор, только на уровне биос.
                  +1

                  Поправочка, Storemi жив. Кажется ещё в августе выпустили версию 2, и на днях вышлю обновление. Только переход 1-2 нетривиален, особенно если вы кешировали системный винт. Итого первую версию надо удалить, для чего нужен другой жестокий диск куда нужно клонировать разделы винды. Вторая версия не такая криповатая, и отключить её на раз два если что, и если ssd накренился данные не попадут. Один минус — показатели smart и прочего не видно, и фирменные утилиты не видят накопителя.

                    0
                    Действительно! Хотя AMD заявляли что прекращают поддержку StoreMI. Оказывается что недавно выпустили 2ую версию. Спасибо за инфу!
                      0

                      Первую версию и правда больше не поддерживают

                      0
                      Хех. Специально купил AMD ради него. Так StoreMI у меня просто не устанавливается. Пишет «Failed to install» и всё. Техподдержка пишет, что передали мой запрос специалистам более высокого уровня и просит подождать решения. Вот уже с декабря жду, периодически попинывая этих криворуких индусов.
                        0
                        У меня аналогичная ситуация была, собственно после этого и начал со storage spaces экспериментировать.
                      +1

                      Еще приемуществом этой технологии перед StoreMI является то, что StoreMI работает только при наличии материнской пла​ты с чипсетом AMD X570, B550, 400 серии, X399 или TRX40.

                        0
                        HDD у меня показывает
                        CannotPoolReason : Insufficient Capacity
                        CanPool : False

                        Я так понимаю, без удаления всех данных с HDD, подключить его к пулу не получится?
                          0
                          Именно. К сожалению как это все без очистки диска проделать — я не нашел.
                          0

                          А получится ли перенести систему на такой слоеный диск, или хотя бы установить с нуля?

                            0
                            Нет, систему на такой диск поставить не получится. Но я бы и не стал, система гораздо лучше всегда ведет себя на чистом SSD. Но если очень хочется, насколько я помню, в StoreMI есть возможность ставить систему.

                          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                          Самое читаемое