Вопрос: Восстановление производительности и оценка срока службы используемого SSD-накопителя?


Мой старый 128-Гбайт накопитель SSD составляет около полутора лет, и с тех пор я обновился до другого диска.

Я бы хотел очистить старый SSD, чтобы ...

  • восстановить его производительность до почти новых уровней

  • восстановить его и в целом дать ему проверку здоровья

Как мне это сделать?


69
2018-05-15 00:27


Источник


Хотя это не касается восстановления, вы можете найти это сообщение в блоге интересно предотвратить это. - Tom Wijsman
Возможно, я просто пропустил это, но я не видел, чтобы какой-либо из нижеприведенных ответов был "проверено«В этом вопросе мне действительно любопытно, что случилось в конечном итоге для вас« наилучшим »для вас (если вы вспомните ...) - irrational John


Ответы:


В Linux просто запустите

hdparm --trim-sector-ranges start:count /dev/sda

передавая диапазоны блоков, которые вы хотите использовать TRIM вместо start а также count и устройство SSD вместо /dev/sda, Преимущество заключается в том, чтобы быстро и не писать нули на диске. Скорее, он просто отправляет команды TRIM контроллеру SSD, позволяя ему знать, что вам не нужны данные в этих блоках, и он может свободно предположить, что они не используются в его алгоритме сбора мусора.

Вероятно, вам нужно запустить эту команду как root. Поскольку эта команда чрезвычайно опасна, так как она может сразу вызвать серьезную потерю данных, вам также необходимо пройти --please-destroy-my-drive аргумент hdparm (Я не добавил это в командную строку, чтобы предотвратить случайную потерю данных, вызванную копированием и вставкой.)

В приведенной выше командной строке, /dev/sda следует заменить на SSD-устройство, на которое вы хотите отправить команды TRIM. start является адресом первого блока (сектора) для TRIM и count - количество блоков, которые будут отмечены как свободные от этого начального адреса. Вы можете передать несколько диапазонов команде.

Сделав это с hdparm v9.32 на Ubuntu 11.04 на моем ноутбуке с 128-битным Crucial RealSSD C300, я должен указать на проблему: я не смог передать общее количество блоков диска (0: 250069680) в качестве диапазона , Я вручную (по существу «двоичный поиск вручную») нашел достаточно большое значение для подсчета блоков, которое работало (40000), и было в состоянии выдавать команды TRIM в последовательности из 40000 диапазонов, чтобы освободить весь диск. Это можно сделать с помощью простого сценария оболочки, подобного этому (проверен на Ubuntu 11.04 под root):

 # fdisk -lu /dev/sda

 Disk /dev/sda: 128.0 GB, 128035676160 bytes
 255 heads, 63 sectors/track, 15566 cylinders, total 250069680 sectors
 ...  

для удаления всего диска, возьмите это общее количество секторов и замените 250069680 в следующей строке этим числом и запустите (добавьте --please-destroy-my-drive):

 # i=0; while [ $i -lt 250069680 ]; do echo $i:40000; i=$(((i+40000))); done \
 | hdparm --trim-sector-ranges-stdin /dev/sda

И вы сделали! Вы можете попробовать прочитать необработанное содержимое диска с помощью hexedit /dev/sda до и после и убедитесь, что диск отбросил данные.


Конечно, даже если вы не хотите использовать Linux в качестве основной операционной системы, вы можете использовать этот трюк, загрузив Live CD и запустив его на диске.


55
2018-05-15 01:23



Отличная запись, но это, к сожалению, не будет работать для поддержки без TRIM SSD. Для этого вам нужно идти немного дальше. См. ATA wiki на kernel.org для получения инструкций о том, как это сделать с помощью hdparm. Было бы даже лучше, если бы вы могли изменить свою оригинальную запись, чтобы включить эту информацию :) - James
«fstrim» - простая версия выше (см. отдельный ответ). - Bryce
@Bryce, неверно; TRIM является только рекомендательным и предназначенным по соображениям производительности, а не для безопасности, что означает, что диск свободен игнорировать команду или стирание задержки до более позднего времени, как это делают большинство дисков. - psusi


Прежде всего, давайте начнем с понимания того, что именно это вызывает ухудшение производительности. Не зная об этом, многие люди будут предлагать неадекватные решения (как я уже видел). Суть всего этого затруднительного положения сводится к следующему факту: Википедия, Помните, это важно:

При использовании флэш-памяти NAND операции чтения и программирования должны выполняться по-разному, а разблокировка и стирание должны выполняться по-блочно.

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

Для ясности я различаю между пустыми страницами, используемыми страницами и удаленными страницами с ∅, 1 и X. Ключ состоит в том, что есть разница между каждым из них с точки зрения контроллеров! Это не так просто, как 1 и 0. Итак, чтобы начать, страницы на нашем новом диске выглядят так:

∅, ∅, ∅, ∅ (все пустые)

Теперь мы переходим к записи некоторых данных на диск, и он заканчивается тем, что хранится на этой первой странице, таким образом:

1, ∅, ∅, ∅

Затем мы записываем немного больше данных, только на этот раз достаточно, чтобы для этого требовалось две страницы, и поэтому она сохраняется на 2-й и 3-й странице:

1, 1, 1, ∅

У нас заканчивается пространство! Мы решили, что нам действительно не нужны исходные данные, которые мы написали, поэтому давайте удалим его, чтобы освободить место .:

X, 1, 1, ∅

Наконец, у нас есть еще один большой набор данных, которые нам нужно сохранить, которые будут потреблять оставшиеся две страницы. ЭТО, ГДЕ ПРОИЗВОДИТЕЛЬНОСТЬ ПРОИЗВОДИТСЯ В ПРИВОДАХ БЕЗ ТРИМА !! Переход от нашего последнего состояния к следующему:

1, 1, 1, 1

... требует больше работы, чем большинство людей понимают. Опять же, это связано с тем, что флеш-память может стираться только блочно, а не по-разному, что именно требует последний переход. Различия между TRIM и SSD на основе TRIM когда выполняются следующие работы!

Поскольку нам нужно использовать пустую страницу и удаленную страницу, SSD необходимо сначала прочитайте содержимое всего блока в каком-то внешнем хранилище / памяти, удалите исходный блок, измените содержимое и затем напишите это содержимое обратно в блок, Это не так просто, как «написать», вместо этого теперь стало «читать-стирать-писать». Это большое изменение, и для того, чтобы это произошло, когда мы пишем много данных, вероятно, самое неподходящее время для его возникновения. Все это можно было бы избежать, если бы эта «удаленная» страница была восстановлена ​​раньше времени, что и делает TRIM. С помощью TRIM SSD либо восстанавливает наши удаленные страницы сразу после удаления, либо в какое-то другое подходящее время, когда алгоритмы TRIM считаются подходящими. Важная часть заключается в том, что с TRIM это не происходит, когда мы находимся в середине написания!

Без TRIM мы в конечном счете не можем избежать описанного выше сценария, поскольку мы заполняем наши диски данными. К счастью, некоторые новые SSD выходят за рамки только TRIM и эффективно выполняют то же самое, что и TRIM в фоновом режиме на аппаратном уровне без необходимых команд ATA (некоторые называют эту сборку мусора). Но для тех из нас, кому не повезло, этого не нужно, важно знать, что писать нули на весь диск недостаточно для восстановления оригинальной производительности !!!!! Написание всех нулей на диске не указывает контроллеру, что страница со вспышкой свободна для записи. Единственный способ сделать это на диске, который не поддерживает TRIM, - это вызвать команду безопасного удаления ATA на вашем диске с помощью инструмента, такого как HDDErase (через Wayback Machine),

я верить были некоторые ранние SSD, которые поддерживали TRIM только при удалении разделов или на таких вещах, как «diskpart clean all» в Windows 7, а не при удалении отдельных файлов. Это может быть причиной того, что более старый диск, как оказалось, восстанавливает производительность при выполнении этой команды. Мне это кажется немного туманным, хотя ...

Большая часть моих знаний о SSD и аппаратных / гаджетах в целом происходит из anandtech.com, Я думал, что у него отличная запись, объясняющая все это, но для жизни меня я не могу найти!


23
2018-05-15 07:54



Ага! Я нашел оригинальная статья Anandtech! - James
Только снял это, кроме +1, за упоминание безопасного удаления ATA, а также за каждую транзакцию за каждую страницу. - Christopher Galpin
Хотя большая часть этого ответа верна, часть об сборке мусора неверна. У всех твердотельных накопителей есть сбор мусора. Без него они не сработают. Сбор мусора не является альтернативой TRIM. В пустом состоянии ячейка NAND представляет 1, и вы можете записать ее на 0. Но чтобы вернуть ее к нулю, вы должны сразу удалить весь блок. Поэтому вместо перезаписи существующих данных любые изменения записываются в новый блок, а старые данные помечены как недействительные. Удаление недействительных данных - сбор мусора. TRIM сообщает SSD помечать данные как недействительные, когда вы удаляете их в ОС. - Mr Alpha
Не совсем мистер Альфа. Термин «сбор мусора» произошел от контроллеров, которые проактивно выполняют описанный вами процесс в оптимальное время, а не просто реагируют, когда они абсолютно необходимость (что опять же приводит к плохим результатам по мере того, как накопитель заполняется). - James
Может быть, мы никогда бы не назвали его «Garbage Collection» и вместо этого просто прозвали более старые, реактивные контроллеры «сокровищами». - James


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

Итак, чтобы сделать это в Windows:

  • запустите командную строку с правами администратора
  • выполнить команду diskpart

Когда-нибудь в утилите вы увидите DISKPART> и введите следующие команды:

DISKPART> list disk
DISKPART> select disk x

Очевидно, что УБЕДИТЕСЬ, ЧТО ВЫ ВЫБРАЛИ ПРАВИЛЬНЫЙ ПРИВОД SSD прежде чем продолжить!

DISKPART> clean all
DISKPART> create partition primary
DISKPART> format quick fs=NTFS 

Магия здесь clean all который записывает все нули на диск:

Если вы укажете все параметры, каждый сектор может быть обнулен, и все данные, содержащиеся на диске, могут быть удалены.

После этого я могу подтвердить, что производительность диска существенно выросла.


16
2018-05-15 00:32



@Jeff Причина, по которой писать все нули может быть полезной, недавно была объяснена Дэвид Спиллетт: некоторые контроллеры предполагают, что обнуленные блоки могут быть отброшены и возвращены в пул свободного пространства, эмулируя эффект команды TRIM. - sblair
2 балла - во-первых, обычно команда стирания флеша стирает блоки для всех 0xffs, поэтому было бы лучше написать это вместо 0s. Тем не менее, я должен был бы проверить данные. Во-вторых - если вы пытаетесь обмануть контроллер в TRIMing на диске, не было бы неплохо запустить какую-то утилиту, которая только TRIMed каждый блок на диске? Лично я, вероятно, буду делать и то, и другое (0xffs и TRIM), но я, вероятно, немного педантичен здесь. - Dennis Munsie
@dennis уверен, если есть такая утилита - не стесняйтесь указывать на нее. - Jeff Atwood
@Dennis: Если диск использует «физические» «на» биты, и они переведены на логические на бит else где, тогда 0xff может быть шаблоном, который вам нужен. Они могут использовать инвертированную логику, хотя документация или связь с производителем - единственный способ убедиться, прежде чем продолжить. Мое предложение использовать sdelete или подобное - попытаться обрезать неиспользуемые блоки в рабочей файловой системе. Конечно, это приведет к записи без подбора для всех блоков в сопоставлении SSD, которые являются комбинацией используемых и неиспользуемых. - David Spillett
Я немного ошеломлен тем, что многие люди, по-видимому, не знают о безопасном стирании SSD. Для каждого блока не требуется TRIM. Просто запустите утилиту, которая отправляет команду Secure Erase ATA на SSD, и ваша проблема решена, независимо от того, поддерживает ли SSD TRIM. - James


Я также нашел инструмент, SSD Life Pro, У меня есть плохие новости для меня.

SSDLife Pro -- drive health is bad!

Что касается того, как он вычисляет это, он использует индикаторы SMART SSD. По-видимому, это пытается предсказать на основе S.M.A.R.T. данные:

  • Время жизни флэш-памяти, на которой основаны SSD, ограничено 10 000 записей на ячейку
  • на большинстве дисков также отображаются данные о письменной и / или прочитанной информации в их S.M.A.R.T. параметры

Это сложно, потому что он также должен знать когда данные были написаны для оценки, но вот основные данные:

01 Ошибка чтения 7
09 Время включения питания 7085
0C Количество циклов питания 318
B8 Начальное количество неудачных блоков 15
Счетчик сбоев программы C3 0
C4 Стереть счетчик сбоев 0
C5 Считывание количества блоков отказов 0
C6 Считываемые секторы 5468243171
Секторы записи C7 41640920876
Команды чтения C8 100482453
Команды записи С9 417315851
Значения ошибок CA от Flash 345270
CB Read Sectors с исправляемой битовой ошибкой 340001
CC Bad Block Full Flag 0
CD Максимальное количество P / E Спецификация 5000
CE Минимальный Erase Count 3774
Максимальный уровень очистки CF 65348
D0 Средний Степень очистки 4837
D1 Оставшаяся жизнь привода 4

Страшный номер есть Оставшаяся жизнь привода который составляет 4 .. процент!

И полученные расчеты:

Модель: CRUCIAL_CT128M225
Размер: 128 ГБ
Серийный номер: xxxxxxxxxxxxxxxxx456
Прошивка: 2030
Время работы: 318
Поддержка TRIM в драйвере / ОС: включена / включена
Время работы: 9 месяцев 16 дней 5 часов
Общий объем данных: 2607.46 GB
написано: 19855.94 GB

Для записи этот диск был первоначально куплен в октябре 2009 года, так что он немного старше полутора лет.


15
2018-05-15 00:48



@Jeff В то время как флэш-память улучшилась в размере процесса, количество циклов программы / стирания сократилось, Значение 0xCD предполагает, что у вас есть накопитель на 34 нм с 5000 номинальными циклами P / E, а не 10 000. - sblair
@sblair хорошо знать; Я попробовал инструмент на новом OCZ Vertex 2 и имел совершенно разные поля и значения SMART. - Jeff Atwood
Эти данные немного сбиты - это говорит о том, что вы написали почти 10-кратное количество данных, которые вы прочитали. Разве это не так высоко? Я ожидал бы большего количества чтений. У вас есть файл подкачки на этом диске? - Dennis Munsie
Больше точек данных. У меня есть аналогичный SSD, установленный в MacBook моей жены. Это был мой ноутбук, который использовался в целях развития. Я просто посмотрел статистику на этом SSD, и за 8 месяцев жизни этого диска у него было в общей сложности 17 часов в час по сравнению с 7085 для вас (295 дней). Я знаю, что машина работает более чем на 17 часов, но похоже, что ОС агрессивно отключает привод. - Dennis Munsie
20 ТБ, записанный на диск емкостью 128 ГБ !? Для чего именно вы используете этот диск? - BlueRaja - Danny Pflughoeft


Я обнаружил, что запись нуля через диск - не лучший подход. Хотя это может помочь в краткосрочной перспективе, я обнаружил, что он определенно не восстановил мой диск до полной производительности (у меня есть довольно старый Intel-SSD с поддержкой без TRIM). После года или около того довольно интенсивного использования, я начинаю работать на 1-2 секунды замерзает, когда SSD попытается написать Любые файл, даже после нулевого SSD.

Единственное, что я обнаружил, что полностью восстанавливает производительность, было безопасное стирание с помощью hdparm, У меня есть привычка защищать-стирать мой SSD каждые 6-12 месяцев, когда он начинает испытывать некоторые незначительные икоты. Кто-то из Macrumors сделал специфический для Mac руководство о том, как сделать для Mac * устройств.

Согласно всем утверждениям, которые я видел, безопасное удаление посылает специальную команду SSD, которая заставляет его устанавливать все сектора на ноль на гораздо более низком уровне, а затем просто использовать dd или что-то.


5
2018-05-15 04:50



если диск не поддерживает TRIM, тогда все ставки отключены. - Jeff Atwood
Неправильно Jeff, Secure Erase полностью не зависит от TRIM. Это настоящая команда ATA, и это единственное, что вы можете сделать для в полной мере восстанавливать поддерживающие диски без TRIM. Когда SSD принимает эту команду, все ячейки NAND помечены как пустые, восстанавливая исходную производительность записи дисков без необходимость TRIM. Есть множество доступных инструментов, которые могут это сделать, включая hdparm, на который ссылается в верхнем ответе. - James


На Mac проверьте digilloydTools DiskTester, Есть также некоторые интересные данные, чтобы увидеть последствия восстановления производительности привода.


4
2018-05-15 00:59



Я считаю, что все, что делает, это написать очень большой файл с нулевым значением для вашего SSD. Вы можете добиться результатов сохранения, выполнив cat /dev/zero > /tmp/bigfile, - Kendall Hopkins


В ThinkPad есть скрытое меню BIOS (с http://www-307.ibm.com/pc/support/site.wss/MIGR-68369.html ), который сбрасывает ваш SSD.


3
2018-05-15 01:02



он, вероятно, делает то же самое, что и другие рекомендуемые инструменты, записывая нули на весь диск, которые интерпретируются контроллером как команды очистки TRIM на каждом блоке. - Jeff Atwood
может быть? Понятия не имею. - chx


Чтобы проверить ssd жизнь, оставленную на (твердотельном диске) ssd, вам нужно будет установить пакет smartmontools. Он содержит две служебные программы (smartctl и smartd) для управления и мониторинга систем хранения с использованием системы самоконтроля, анализа и отчетности (S.M.A.R.T.), встроенной в большинство современных жестких дисков ATA и SCSI.

Для дистрибутивов Ubuntu, Mint или Debian

# apt-get install smartmontools

For Fedora, Centos, or Red Hat based distributions
# yum install smartmontools

Media_Wearout_Indicator - это то, что вы ищете. Для 100 означает, что ваш ssd имеет 100% жизнь, меньшее число означает, что осталось меньше жизни.

# smartctl -a /dev/sda | grep Media_Wearout_Indicator

Выход с моего ноутбука

233 Media_Wearout_Indicator 0×0032 100 100 000 Old_age Always – 0

Если вы хотите увидеть больше деталей и полных атрибутов с вашего диска, вы можете запустить

# smartctl -data -A /dev/sda

Источник: namhuy.net/1024/how-to-check-ssd-life-left.html


1
2017-11-28 15:52





Теперь для Linux-систем гораздо лучший ответ, по сравнению с ответом @LeakyCode:

sudo fstrim -v / boot

Команда «fstrim» из «util-linx» будет работать через файловую систему и выдавать команды TRIM для всего неиспользуемого пространства. В таких дистрибутивах, как Ubuntu, это отключено по умолчанию, за исключением списка «известных безопасных» дисков от Intel и Samsung. Но команда может быть запущена вручную на любом разделе для любого диска.


1
2018-03-01 06:30