Відновлення продуктивності та оцінка терміну експлуатації використовуваного SSD-накопичувача?


70

Моєму старовинному накопичувачу SSD на 128 ГБ зараз близько півтора років, і я з тих пір оновив інший накопичувач.

Я хотів би почистити свій старий 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 на моєму ноутбуці з вирішальним RealSSD C300 на 128 ГБ, я мушу зазначити проблему: мені не вдалося передати загальну кількість дискових блоків (0: 250069680) як діапазон . Я вручну (по суті, «двійковий пошук» вручну) знайшов достатньо велике значення для кількості блоків, який працював (40000) і зміг видавати команди TRIM в послідовності діапазонів 40000, щоб звільнити весь диск. Це можна зробити за допомогою такого простого скрипта оболонки (тестований на Ubuntu 11.04 під коренем):

 # 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 як основну ОС машини, ви можете скористатися цим фокусом, завантаживши живий компакт-диск і запустивши його на диску.


3
Чудово записуйте, але це, на жаль, не спрацює для не-TRIM, що підтримують SSD. Для цього вам потрібно буде піти трохи далі. Дивіться вікі ATA на kernel.org, щоб дізнатися, як це зробити з hdparm. Було б навіть краще, якби ви могли змінити свій початковий запис, щоб включити цю інформацію :)
Джеймс

"fstrim" - це проста версія вищезазначеного (див. окрему відповідь).
Брайс

@Bryce, неправильно; TRIM має лише рекомендаційний характер і призначений з міркувань продуктивності, а не безпеки, тобто привід може ігнорувати команду або затримати стирання до більш пізнього часу, як це робить більшість дисків.
psusi

24

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

За допомогою NAND флеш-пам’яті операції зчитування та програмування повинні виконуватись одночасно, в той час як розблокування та стирання повинні відбуватися блочно.

SSD складаються з NAND-спалаху, а спалах складається з "блоків". Кожен блок містить багато "сторінок". Для простоти, давайте уявимо, що ми щойно придбали блискучий новий SSD, який містить колосальний єдиний блок пам'яті, і цей блок складається з 4 порожніх сторінок.

Для наочності я розмежую порожні сторінки, використані сторінки та видалені сторінки з ∅, 1 та X. Ключовим є те, що між ними є різниця з точки зору контролерів! Це не так просто, як 1 та 0. Отже, для початку сторінки нашого свіжого диска виглядають так:

∅, ∅, ∅, ∅ (все порожньо)

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

1, ∅, ∅, ∅

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

1, 1, 1, ∅

Нам не вистачає місця! Ми вирішили, що нам не потрібні початкові дані, які ми написали, тому давайте видалити їх, щоб звільнити місце.

X, 1, 1, ∅

Нарешті, у нас є ще один великий набір даних, який нам потрібно зберігати, який буде споживати дві інші сторінки. ЦЕ ДІЯ, ЯКІ ДІЯЛЬНІСТЬ HIT OCCURS У ДВІГАХ БЕЗ ТРИМИ !! Від нашого останнього стану до цього:

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 лише після видалення розділів або таких речей, як "Discpart очистити все" Windows 7, а не після видалення окремих файлів. Це може бути причиною того, що старший диск виявив відновлення продуктивності після виконання цієї команди. Мені це здається трохи туманним ...

Значна частина моїх знань про SSD та обладнання / гаджети в цілому походить від anandtech.com . Я подумав, що він чудово пояснює все це, але все життя я не можу його знайти!



Лише знімав це, але +1, щоб згадати про безпечне стирання ATA, і цитату за один блок на сторінку.
Крістофер Гальпін

1
Хоча більшість цієї відповіді правильна, частина щодо вивезення сміття є неправильною. Усі SSD-диски мають збір сміття. Вони б не працювали без цього. Збір сміття не є альтернативою TRIM. У порожньому стані комірка NAND являє собою 1, а потім можете записати її до 0. Але, щоб повернути її до нуля, потрібно стерти цілий блок відразу. Тож замість перезапису існуючих даних будь-які зміни записуються до нового блоку, а старі дані позначаються як недійсні. Стирання недійсних даних - це Збір сміття. TRIM повідомляє SSD маркувати дані як недійсні, коли ви видаляєте їх в ОС.
Містер Альфа

Не зовсім містер Альфа. Термін "Збір сміття" походить від контролерів, які активно проводять описаний вами процес в оптимальний час, а не просто реагують, коли їм це потрібно робити (що знову ж таки призводить до поганої роботи в міру заповнення накопичувача).
Джеймс

1
Можливо, ми ніколи не повинні були називати це "Збір сміття", а натомість лише прозвали старших, реактивних контролерів "скарбами".
Джеймс

17

Мабуть, стандартна рекомендація - робити повне записування всіх нулів. Я не зовсім впевнений, чому це допомагає (чи не багато записів врешті-решт вбиває 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що записує всі нулі на диск :

Якщо вказати всі параметри, кожен сектор може бути нульовим, а всі дані, що містяться на диску, можна видалити.

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


11
@Jeff Причину, чому написання всіх нулів може бути корисним, нещодавно пояснив Девід Спіллетт : деякі контролери припускають, що нульові блоки можна відкинути і повернути в пул вільного простору, імітуючи ефект команди TRIM.
sblair

1
2 бали - по-перше, зазвичай команда flash erase стирає блоки для всіх 0xffs, тому краще здатись, що замість 0s. Мені доведеться перевірити таблиці, щоб бути впевненим. По-друге - якщо ви намагаєтеся обдурити контролер на TRIMing накопичувач, чи не було б гарною ідеєю запустити якусь утиліту, яка просто ОБРІНУвала кожен блок на диску? Особисто я б, мабуть, робив і те, і інше (0xffs та TRIM), але я, мабуть, трохи педантичний.
Денніс Мюнсі

2
@dennis впевнений, якщо є така утиліта - не соромтеся вказати мені на одну.
Джефф Етвуд

1
@Dennis: Якщо накопичувач використовує "фізичний" "на" біт, і це перекладається на логічне на біти в іншому місці, тоді 0xff може бути потрібним шаблоном. Вони можуть використовувати інвертовану логіку, тому документація або спілкування з виробником - це єдиний спосіб бути впевненим, перш ніж продовжувати. Моя пропозиція використовувати sdelete або подібне - спробувати обрізати невикористані блоки на робочій файловій системі. Звичайно, це призведе до необрізного запису для всіх блоків у зіставленні SSD, які є сукупністю використаних та невикористаних.
Девід Спіллетт

2
Я трохи здивований, що так багато людей, очевидно, не знають про безпечне видалення SSD. Не потрібно ТРІМУВАТИ кожен окремий блок. Просто запустіть утиліту, яка надсилає SSD команду Secure Erase ATA, і ваша проблема буде вирішена, незалежно від того, підтримує чи ні SSD TRIM.
Джеймс

16

Я також знайшов інструмент, SSD Life Pro . Це має для мене погані новини.

SSDLife Pro - здоров’я приводу погано!

Щодо того, як він це обчислює, він використовує індикатори SMART SSD. Мабуть, він намагається передбачити на основі даних SMART :

  • Час роботи флеш-пам’яті, на якій базуються SSD, обмежений 10000 записів на комірку
  • більшість накопичувачів також показують дані про записану та / або зчитувану інформацію у своїх SMART параметрах

Це складно, оскільки він також повинен знати, коли дані були написані для оцінки, але ось основні дані:

01 Прочитайте швидкість помилок 7
09 Години включення рахунку 7085
Кількість циклів живлення 0C 318
B8 Початковий поганий блок 15
Блок відмови програми C3 0
C4 Блок стирання відмов Кількість 0
C5 Кількість блоків читання відмов 0
C6 Прочитайте сектори 5468243171
C7 Запишіть сектори 41640920876
C8 Прочитайте команди 100482453
C9 Запишіть команди 417315851
Біти помилок CA від Flash 345270
CB зчитують сектори з виправленою помилкою бітів 340001
CC Bad Block Повний прапор 0
Максимальна специфікація лічильника CD 5000/5000
Мінімальний кількість стирань СЕ 3774
Максимальна кількість стертостей CF 65348
D0 Середній кількість стирань 4837
D1 Залишився термін служби диска 4

Жахлива кількість є Залишився Драйв Диска, який становить 4 .. відсотків!

І отримані розрахунки:

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

Для запису цей привід спочатку був придбаний у жовтні 2009 року, тож він трохи старший півтора року.


3
@Jeff Незважаючи на те, що флеш-пам’ять покращилася в розмірі процесу, кількість циклів програми / стирання зменшилася . Значення 0xCD говорить про те, що ви маєте 34nm-накопичувач із 5000 номінальними циклами P / E, а не 10 000.
sblair

1
@sblair добре знати; Я спробував інструмент на новому OCZ Vertex 2, і він має абсолютно різні SMART поля та значення.
Джефф Етвуд

2
Ці дані виглядають дещо - це говорить про те, що ви написали майже в 10 разів більше даних, ніж прочитали. Це не звучить високо? Я очікував би більше читань, ніж це. Чи є у вас файл сторінки на цьому диску?
Денніс Мюнсі

1
Більше даних - у мене схожий SSD встановлений у MacBook моєї дружини. Раніше це був мій ноутбук, який використовувався в цілях розвитку. Я просто переглянув статистику цього SSD, і за 8 місяців життя цього диска він мав загальну потужність 17 годин у порівнянні з 7085 для вас (295 днів). Я знаю напевно, що машина працювала більше 17 годин, але, здається, ОС агресивно вимикає накопичувач.
Денніс Мунсі

2
20 ТБ записано на накопичувач 128 ГБ !? Для чого саме ви використовуєте цей привід?
BlueRaja - Danny Pflughoeft

6

Я виявив, що записувати нулі через накопичувач - не найкращий підхід. Хоча це може допомогти в короткостроковому періоді, я виявив, що він точно не відновив мій накопичувач до його повної продуктивності (у мене досить старий не-TRIM Intel-SSD). Після року, або близько того, досить важкого використання, я починаю на 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 . Там також є кілька цікавих даних, щоб побачити ефекти відновлення на продуктивність диска.


Я вважаю, що все, що потрібно зробити, це написати дуже великий файл з нуля на ваш 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 / завантаження

Команда "fstrim" з "util-linx" запуститься через файлову систему і видасть команди TRIM для всього невикористаного простору. У таких дистрибутивах, як Ubuntu, цей режим за замовчуванням вимкнено, за винятком списку "відомих безпечних" дисків від Intel та Samsung. Але команду можна виконати вручну на будь-якому розділі для будь-якого диска.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.