Table of Contents

SSD Over Provisioning

SSD Over Provisioning - это резервирование блоков на SSD для подстановки вместо выходящих из строя.
Типичное количество циклов перезаписи, которое выдерживает ячейка диска SSD, лежит в пределах от 1000 (для TCL flash) до 3000 (для MLC flash). В дальнейшем, ячейка памяти может выйти из строя. Конечно, существует память SLC, для которой количество циклов перезаписи может достигать 100 000, однако она заметно дороже.
Для оперативной замены выходящих из строя блоков на SSD выделяется недоступная пользователю резервная область, из которой берутся свежие блоки, на замену выходящим из строя. Эта методика и называется Over Provisioning.

Объем резервной области

Типичный объем такой области - 7% от емкости SSD.
Для понимания объема резервной области нужно понимать некоторе нюансы. Во-первых - различают две единицы емкости - гигабайт (Gb) и гибибайт (GiB). Гигабайт равен ровно миллиарду (1 000 000 000) байт. Гибибайт - это 2^30 = 1 073 741 824 байт. Таким образом, гибибайт на 7,37% больше гигабайта. Маркетологи продают нам гигабайты, а в чипах по прежнему фигурируют гибибайты. В результате этой нехитрой махинации в дисках образуется некоторый излишек физических ячеек памяти, который и становится резервом.
Кроме того, часто производители еще немного урезают полезную емкость SSD расширяя резервную область. Допустим, у нас есть 128GiB памяти. Мы превращаем гибибайты в гигабайты и получаем 7,37%, а потом еще уменьшаем объем диска до 120GB и у нас получается SSD с объемом OP ~15%.
Также, умные контроллеры для увеличения срока жизни дисков будут использовать в качестве резерва и доступные пользователю, но ни разу не записанные области диска. Это называется Dynamic Over Provisioning.

Увеличение срока жизни SSD

Итак, жизнь SSD подойдет к концу, когда исчерпается запас резервных ячеек. Как же можно увеличить объем резервной области? Варианта два.
Первый - надеяться на Dynamic Over Provisioning и создавать разделы, которые не будут занимать весь объем диска.
Второй - ограничить объем диска вручную. Под Linux это можно сделать с помощью hdparm и механизма HPA - Host Protected Area.
Посмотреть текущее количество доступных секторов:

#hdparm -N /dev/sdb

/dev/sdb:
 max sectors   = 312581808/312581808, HPA is disabled

Спрятать от пользователя часть диска:

# hdparm -Np281323627 --yes-i-know-what-i-am-doing /dev/sdb

/dev/sdb:
 setting max visible sectors to 281323627 (permanent)
 max sectors   = 281323627/312581808, HPA is enabled

В результате чать SSD станет недоступна пользователю и может быть использована как резервная. На некоторых дисках, для того, чтобы сектора не рассматривались как использованные - нужно выполнить Secure Erase.
Эти рекомендации соответствуют позиции производителей SSD.
https://storage.toshiba.com/docs/services-support-documents/ssd_application_note.pdf