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

70

Моему старому 128 ГБ SSD-накопителю уже около полутора лет, и с тех пор я перешел на другой диск.

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

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

  • реабилитировать его и вообще дать ему проверку здоровья

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

Джефф Этвуд
источник
4
Хотя это не касается восстановления, вы можете найти этот пост интересным, чтобы этого не произошло.
Тамара Вийсман
1
Возможно, я только что пропустил это, но я не видел, чтобы какой-либо из ответов ниже был « проверен ». В случае с этим вопросом мне действительно любопытно, что в итоге сработало «лучше» для вас. (Если вы вспомните ...)
иррациональный Джон

Ответы:

56

В 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 и запустив его на дисковод.

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

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

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

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

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

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

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

1, ∅, ∅, ∅

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

1, 1, 1, ∅

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

X, 1, 1, ∅

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

1, 1, 1, 1

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

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

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

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

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

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

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

Итак, чтобы сделать это в 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что все нули записываются на диск :

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

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

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

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

SSDLife Pro - здоровье диска плохое!

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

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

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

01 Частота ошибок чтения 7
09 Часы работы при включении 7085
0C Power Cycle Count 318
B8 Количество начальных плохих блоков 15
C3 Счетчик ошибок программы 0
C4 Счетчик ошибок стирания 0
C5 Счетчик ошибок чтения 0
C6 Считанные секторы 5468243171
C7 Write Sectors 41640920876
Команды чтения C8 100482453
Команды записи C9 417315851
Биты ошибок CA из Flash 345270
Чтение секторов CB с исправляемой ошибкой в ​​битах 340001
CC Bad Block Full Flag 0
Максимальное количество записей CD / P 5000
Минимальное количество стирания CE 3774
CF Максимальное количество стирания 65348
D0 Среднее количество стирания 4837
D1 Оставшийся Drive Life 4

Самое страшное число - это Remaining Drive Life, который составляет 4 .. процента!

И результирующие расчеты:

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

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

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

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

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

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

Кендалл Хопкинс
источник
если диск не поддерживает TRIM, тогда все ставки выключены ..
Джефф Этвуд
1
Неверный Джефф, безопасное стирание полностью не зависит от TRIM. Это настоящая команда ATA, и это единственное, что вы можете сделать, чтобы полностью восстановить диски, не поддерживающие TRIM. Когда SSD получает эту команду, все ячейки NAND помечаются как пустые, восстанавливая исходную производительность записи дисков без необходимости в TRIM. Есть множество доступных инструментов, которые могут сделать это, включая hdparm, на который есть ссылки в верхнем ответе.
Джеймс
5

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

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

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

СНХ
источник
он, вероятно, делает то же самое, что и другие рекомендуемые инструменты, записывая нули на весь диск, которые интерпретируются контроллером как команды очистки TRIM для каждого блока.
Джефф Этвуд
может быть? Понятия не имею.
chx
2

Чтобы проверить жизнь ssd на твердотельном диске ssd, вам нужно установить пакет smartmontools. Он содержит две служебные программы (smartctl и smartd) для управления и мониторинга систем хранения с использованием системы самоконтроля, анализа и отчетности (SMART), встроенной в большинство современных жестких дисков 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

Виктор Сандерс
источник
2

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

sudo fstrim -v / boot

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

Брайс
источник