Ssd накопители на linux

Коротко и ясно о Linux и SSD

Недавно, хороший человек подарил мне SSD. Неделю он пролежал у меня на столе, т.к. времени перенастраивать систему под его использование не было. Когда же время появилось, прочитав вот этот пост habrahabr.ru/post/129551, и перелопатив немало форумов, узнал много нового.

Ниже предлагаю компиляцию всего усвоенного в одном тексте.

Итак, сперва теория:

1. ССД диск имеет ограниченное количество циклов перезаписи. Т.е. в один и тот же блок диска, в среднем, можно записать информацию 3000-5000 раз (на дорогие модели дисков можно и больше).

2. Что бы выравнивать износ диска, нужно как можно реже писать в одно и то же место, т.е. сперва использовать незанятые блоки диска, и только когда они кончатся, писать поверх.

3. В незанятый блок, ССД диск пишет намного быстрее чем в занятый.

4. Диск не «знает», о том, какие блоки заняты, т.к. эта информация сохраняется в файловой системе, и при удалении файла, фактически диску об этом не сообщается. Но когда файловая система решит повторно использовать блок, который уже когда то использовался, он может быть еще не очищен от информации которая там была, т.к. диск не знал, что его можно освобождать. И запись в такой блок займет много времени.

5. В отличие от HDD, в ячейку флеш-памяти NAND нельзя перезаписать новые данные поверх старых, не очистив ее перед этим. Ячейки памяти SSD сгруппированы в страницы (обычно по 4 Кбайт каждая), страницы сгруппированы в блоки (64-128 страниц). Данные можно вписать на чистую страницу, но стирать можно только блоки целиком. Запись на SSD-носитель выполняется очень быстро до тех пор, пока существуют чистые страницы, но значительно замедляется, если необходимо очищать предварительно записанные страницы. Чтобы вернуть в обращение ячейки блока, содержащего смесь актуальных данных и мусора (невалидных данных), контроллер копирует нужное (валидные данные) на пустую страницу нового блока, а затем стирает весь исходный блок. После этого ячейки блока будут готовы принять новые данные.

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

Что бы система начала использовать эту команду при удалении файлов:

1. диск должен поддерживать эту команду.

2. файловая система должна поддерживать эту команду.

3. функция TRIM в файловой системе должна быть включена.

А теперь все это на практике

Чтобы проверить поддерживает ли TRIM диск:

root@citadel:/home/serp# hdparm -I /dev/sdd|grep «TRIM supported»
* Data Set Management TRIM supported (limit 1 block)

Если получаем «Data Set Management TRIM supported (limit 1 block)», то поддерживается. Если слева от этой строки стоит звездочка, то функция активирована.

Читайте также:  Запуск панели задач linux

TRIM поддерживается в BTRFS, XFS, JFS и EXT4.

На данный момент, наиболее пригодна для использования EXT4.

Включить TRIM для файловой системы можно, если добавить discard в опции монтирования в /etc/fstab, или с помощью tune2fs -o discard /dev/sdaX (добавит discard в опции по умолчанию для данной ФС)

Проверить смонтирована ли ФС в данный момент с этой опцией можно посмотрев вывод mount:

/dev/sdd1 on / type ext4 (rw,discard,errors=remount-ro)

ВНИМАНИЕ. Нельзя отключать журналирование, т.к. функция TRIM без него работать не будет. Если верить вот этому источнику (https://wiki.archlinux.org/index.php/SSD#Partition_Alignment), то разница в количестве операций записи с журналом и без него не существенна, т.е. на время жизни диска особо влиять не будет (если только вы не используете его в режиме только для чтения, и хотите чтобы он жил вечно).

В интернетах часто советуют проверить включен ли TRIM таким способом:
1. dd if=/dev/urandom of=tempfile count=10 bs=512k oflag=direct //запись 5Мб рандомных данных

2. hdparm —fibmap tempfile //Ищем любой стартовый LBA адрес у файла

3. hdparm —read-sector [ADDRESS] /dev/sdX //Читаем данные со стартового LBA адреса файла, замените [ADDRESS] на свой Starting LBA address из вывода предыдущей команды

4. rm tempfile //Теперь удалим временный файл и синхронизируем ФС:
5. sync

Повторяем пункт 3 — и смотрим на вывод консоли. Если выведутся нули — то трим работает. Если вы исправили fstab, перезагрузились, но трим не активировался — ищите ошибки в неверном отключении журналирования.

Так вот у меня не выдал нули. Но у меня из 60Гиг харда занято всего 20 (точнее занято всего 8, а 20 это размер раздела.) Я подозреваю, что диск не триммит данные пока не приспичит, или пока не появится много свободного времени.

Вот тут: sites.google.com/site/lightrush/random-1/checkiftrimonext4isenabledandworking по этому поводу написано, что если при таком тестировании, после шага 3, вы видите нули, значит TRIM однозначно работает. Если же вы нулей не увидели, то это еще не значит, что TRIM не работает. Возможно диск обнулит блок позже.

Для ускорения работы системы, за одно с перенастройкой под SSD я под шумок перенес /run и /tmp на tmpfs.

Скорость работы системы ЗНАЧИТЕЛЬНО ускорилась, точнее быстрее стали загружаться приложения, и быстрее загружается сама система.

Источник

Использование NVME SSD как системного накопителя на компьютерах со старым BIOS и ОС Linux

image

При соответствующей настройке можно загружаться с накопителя NVME SSD даже на старых системах. Предполагается, что операционная система (ОС) умеет работать с NVME SSD. Рассматриваю именно загрузку ОС, поскольку при имеющихся в ОС драйверах NVME SSD виден в ОС после загрузки и может использоваться. Дополнительного программного обеспечения (ПО) для линукса не требуется. Для ОС семейства BSD и прочих юниксов способ скорее всего тоже подойдёт.

Для загрузки с какого-либо накопителя нужно, чтобы в программе первоначальной загрузки (ППЗ), в BIOS или EFI (UEFI) содержались драйвера для данного устройства. Накопители NVME SSD есть достаточно новые устройства по сравнению с BIOS, и в ППЗ прошивок старых материнских плат таких драйверов нет. В EFI без поддержки NVME SSD можно добавить соответствующий код, и тогда становится возможна полноценная работа с этим устройством — можно установить операционную систему и загрузить её. Для старых систем с т. н. «legacy BIOS» загрузкой ОС так сделать вряд ли получится. Однако это можно обойти.

Читайте также:  Smb протокол astra linux

Как делать

Я использовал openSUSE Leap 15.1. Для других линуксов действия будет примерно те же.

1. Подготовим компьютер для установки операционной системы.
Нужен ПК или сервер со свободным разъёмом PCI-E 4x или более длинным, неважно какой версии, хватит и PCI-E 1.0. Конечно, чем новее версия PCI-E, тем выше будет скорость. Ну и, собственно, NVME SSD с переходником M.2 — PCI-E 4x.
Также нужен какой-либо накопитель с ёмкостью 300 МБ и более, который виден из биоса и с которого можно грузить ОС. Это может быть НЖМД с подключением по IDE, SATA, SCSI. SAS. Или USB флэшка, или карта памяти. На дискету — не влезет. Диск CD-ROM не подойдёт, потребуется перезапись. DVD-RAM — без понятия. Условно назовём эту штуку «legacy BIOS накопитель».

2. Загружаем линукс для установки (с оптического диска или загрузочной флэшки или др.).

3. При размечивании диска распределим ОС по имеющимся накопителям:
3.1. Создадим раздел для загрузчика GRUB в начале «legacy BIOS накопителя» размером 8 МБ. Отмечу, что здесь используется особенность openSUSE — GRUB на отдельном разделе. Для openSUSE по умолчанию используется файловая система (ФС) BTRFS. Если разместить GRUB на разделе с ФС BTRFS, то система не загрузится. Поэтому используется отдельный раздел. Можете разместить GRUB в другом месте, лишь бы грузился.
3.2. После раздела с GRUB создадим раздел с частью системной папки («корня»), а именно с «/boot/», размером 300 МБ.
3.3. Оставшееся добро — остаток системной папки, раздел для свопа, раздел пользователя «/home/» (если таковой вы решили создать) можно разместить на NVME SSD.

После установки система грузит GRUB, который грузит файлы из /boot/, после чего NVME SSD становится доступным, затем идёт загрузка системы с NVME SSD.
На практике я получил существенное ускорение.

Требования по ёмкости «legacy BIOS накопителя»: 8 МБ для раздела GRUB — это по умолчанию, и где-то от 200 МБ для /boot/. 300 МБ я взял с запасом. При обновлении ядра (и при установке новых) линукс будет пополнять раздел /boot/ новыми файлами, при удалении ненужных более ядер — освобождать место. Оставшееся место на «legacy BIOS накопителе» за пределами этих двух разделов можно использовать по своему усмотрению.

Оценка скорости и стоимости

Стоимость NVME SSD 128 ГБ — примерно от 2000 р.
Стоимость переходника M.2 — PCI-E 4x — примерно от 500 р.
Также есть в продаже переходники M.2 — PCI-E 16x на четыре накопителя NVME SSD, ценой где-то от 3000 р. — если это кому надо.

Читайте также:  We were here linux

Предельные скорости:
PCI-E 3.0 4x около 3900 МБ/с
PCI-E 2.0 4x 2000 МБ/с
PCI-E 1.0 4x 1000 МБ/с
Накопители с PCI-E 3.0 4x на практике достигают скорости около 3500 МБ/с.
Можно предположить, что достижимая скорость будет такой:
PCI-E 3.0 4x около 3500 МБ/с
PCI-E 2.0 4x около 1800 МБ/с
PCI-E 1.0 4x около 900 МБ/с

Что быстрее, чем SATA 600 МБ/с. Достижимая скорость для SATA 600 МБ/с — около 550 МБ/с.
При этом на старых материнских платах скорость SATA набортного контроллера может быть не 600 МБ/с, а 300 МБ/с или 150 МБ/с. Здесь набортный контроллер = контроллер SATA, встроенный в южный мост чипсета.

Отмечу, что для NVME SSD будет работать NCQ, а у старых набортных контроллеров этого может и не быть.

Я делал расчёты для PCI-E 4x, однако некоторые накопители имеют шину PCI-E 2x. Этого хватает для PCI-E 3.0, но для более старых стандартов PCI-E — 2.0 и 1.0 — такие NVME SSD лучше не брать. Также накопитель с буфером в виде чипа памяти будет быстрее, чем без оного.

Для желающих полностью отказаться от набортного контроллера SATA посоветую использовать контроллер Asmedia ASM 106x (1061 и др.), который предоставляет два порта SATA 600 (внутренних или внешних). Он работает весьма хорошо (после обновления прошивки), в режиме AHCI поддерживает NCQ. Подключается по шине PCI-E 2.0 1x.

Его предельная скорость:
PCI-E 2.0 1x 500 МБ/с
PCI-E 1.0 1x 250 МБ/с
Достижимая скорость будет такой:
PCI-E 2.0 1x 460 МБ/с
PCI-E 1.0 1x 250 МБ/с

Этого хватит на один SATA SSD или два НЖМД.

Замеченные недостатки

1. Не считываются параметры SMART с NVME SSD, есть только общие данные по производителю, серийному номеру и т.д. Возможно, из-за слишком старой материнской платы (мп). Для своих бесчеловечных опытов я использовал самую старую мп, которую смог найти, с чипсетом nForce4.

2. TRIM должен работать, но это надо проверять.

Заключение

Есть ещё другие возможности: купить контроллер SAS с разъёмом PCI-E 4x или 8х (бывают ли 16х или 32х?). Однако они если дешёвые, то поддерживают SAS 600, но SATA только 300, а дорогие будут дороже и медленнее предложенного выше способа.

Для использования с M$ Windows можно установить дополнительное ПО — загрузчик со встроенными драйверами для NVME SSD.

Предлагаю читателю самому оценить, нужно ли ему такое применение NVME SSD, или лучше будет купить новую материнскую плату (+ процессор + память) с имеющимся разъёмом M.2 PCI-E и поддержкой загрузки с NVME SSD в EFI.

Источник

Оцените статью
Adblock
detector