Каков рекомендуемый способ очистки SSD?

53

Я только что получил мой новый SSD, так как старый умер. Этот Intel 320 SSD поддерживает TRIM. В целях тестирования мой дилер установил на него Windows, но я хочу избавиться от этого и установить на него Kubuntu.

Это не должно быть "безопасным стиранием", мне просто нужно очистить диск самым здоровым способом. Я считаю, что это dd if=/dev/zero of=/dev/sdaпросто заполняет блоки нулями и, таким образом, делает еще одну запись (поправьте меня, если я ошибаюсь).

Я видел ответ Как включить TRIM , но похоже, что он подходит для очистки пустых блоков, а не для очистки диска.

hdparmКажется, это программа для этого, но я не уверен, очищает ли он диск ИЛИ очищает пустые блоки. С его страницы руководства:

  --trim-sector-ranges
          For  Solid State Drives (SSDs).  EXCEPTIONALLY DANGEROUS. DO NOT
          USE THIS OPTION!!  Tells the drive firmware to discard  unneeded
          data  sectors,  destroying  any  data that may have been present
          within them.  This makes those sectors available  for  immediate
          use  by  the firmware's garbage collection mechanism, to improve
          scheduling for wear-leveling of the flash  media.   This  option
          expects  one  or  more  sector range pairs immediately after the
          option: an LBA starting address, a colon, and  a  sector  count,
          with no intervening spaces.  EXCEPTIONALLY DANGEROUS. DO NOT USE
          THIS OPTION!!
          E.g.  hdparm --trim-sector-ranges 1000:4 7894:16 /dev/sdz

Как сделать так, чтобы все блоки отображались как пустые с помощью TRIM?

Lekensteyn
источник
Хороший вопрос, может быть, достаточно просто удалить файловую систему NTFS?
htorque
1
Следовательно, это просто комментарий. ;) Однако вы можете сначала проверить некоторые сектора в этом разделе sudo dd if=/dev/sda iflag=direct bs=512 skip=<some_sectors> count=32 | hexdump -C, а затем удалить раздел NTFS, используя последнюю версию Gparted, и еще раз проверить с помощью той же команды - если данные были стерты, вы просто увидите нули.
августа
1
@htorque: Я только что проверил, но он не работает, я использовал hexdump -C /sda1и hexdump -C /sda1для определения начального блока. Хорошая идея, хотя.
Лекенштейн
1
@Lekensteyn - я имел в виду, что это немного языком в щеке и выложил правильный ответ для вас ниже. В статье Джеффа также есть кое-что о производительности, поэтому он использует их, несмотря на частоту отказов :-)
Rory Alsop
3
Я до сих пор не понимаю, почему вам нужно стереть это ... почему вы не можете просто переформатировать его с помощью Ext4 или чего-то еще?
Натан Осман

Ответы:

52

ATA Безопасное стирание

Вы должны использовать функцию стирания безопасности диска .

  1. Убедитесь, что диск Security не заморожен . Если это так, это может помочь приостановить и возобновить работу компьютера.

    $ sudo hdparm -I /dev/sdX | grep frozen
           not     frozen 
    

    Вывод команды (отфильтрованный) означает, что этот диск «не заморожен», и вы можете продолжить.

  2. Установите пароль пользователя (этот пароль также очищается, точный выбор не имеет значения).

    sudo hdparm --user-master u --security-set-pass Eins /dev/sdX
    
  3. Выполните команду безопасного стирания ATA

    sudo hdparm --user-master u --security-erase Eins /dev/sdX
    

Примечание:

  • /dev/sdX это SSD как блочное устройство, которое вы хотите стереть
  • Eins пароль, выбранный в этом примере

См. Статью ATA Secure Erase в вики ядра Linux для получения полных инструкций, включая устранение неполадок.

psusi
источник
Спасибо за ссылку, это выглядит хорошо для тех, у кого есть BIOS, который поддерживает его, но мой, кажется, не поддерживает его. (заморожено)
Лекенштейн
Ура! После прочтения статьи я снова прочитал: «Перевести мою систему в« спящий режим »(ноутбук Clevo M865TU) тоже работает - и это может привести к тому, что другие накопители также будут« не заморожены »». и попробовал, так как мой тоже родом из Клево (но БТО его построил). Это работает, я вижу "не заморожены" сейчас. ... но шаг 3 завершился неудачно с "ERASE_PREPARE: Bad address", потому что я заменил sudo на время, а не на добавление к команде!
Лекенштейн
1
OMG это сработало и заняло всего 19 секунд! Огромное спасибо! Хотел бы я, чтобы тебя голосовали десять раз: D
Лекенштейн
Я просто хотел сообщить, что в принятом ответе нет ссылки. Без указанной ссылки бесполезно, кто-нибудь захочет опубликовать резюме того, что сказано в этой ссылке?
Ашимема
@Ashimema: ссылка в настоящее время не работает, поскольку kernel.org был взломан и, следовательно, закрыт на техническое обслуживание. Google Cache пуст, но этот блог скопировал его: peter.membrey.hk/2011/09/11/…
Лекенштейн
30

Утилита linux 2.23 предлагает blkdiscardданные, которые удаляются без их безопасного удаления. Я тестировал: работает через SATA и mmcblk, но не через USB.

Выдержка из справочной страницы blkdiscard(8):

ИМЯ

blkdiscard - сбросить сектора на устройстве

СИНТАКСИС

blkdiscard [-o offset] [-l length] [-s] [-v] device

ОПИСАНИЕ

blkdiscard используется для сброса секторов устройства. Это полезно для твердотельных драйверов (SSD) и хранилищ с тонким предоставлением. В отличие от fstrim (8) эта команда используется непосредственно на блочном устройстве.

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

Аргумент устройства - это путь к блочному устройству.

ВНИМАНИЕ: Все данные в удаленном регионе на устройстве будут потеряны!

Команда существует с Ubuntu 15.04 и OpenSUSE 13.1 (да, в OpenSUSE она на 2 года впереди Ubuntu).

Танкист 六四
источник
Спасибо за добавление информации в это устаревшее сообщение и добро пожаловать в askubuntu.
понедельник
Arch Linux уже имеет этот пакет, так как util-linux 2.23 был выпущен 25 апреля 2013 года.
Lekensteyn
4
Спасибо за прием. Устаревший пост? Старые, но не устаревшие, поскольку они появляются на 1-й странице результатов поиска Google, всегда появляются новые парни, ищущие тот же ответ. Для меня это устарело только тогда, когда лучшие страницы выталкивают его из первой страницы результатов Google.
Tankman 六四
3
Если вам интересно , разница между blkdiscardи hdparmкоманды, он ответил здесь : «Когда вы используете blkdiscard, то SSD (при условии SATA SSD) получит команду ATA TRIM, а HDPARM --Безопасность-Стирание выпустит ATA SECURITY ERASE Команда UNIT. То, что на самом деле делает диск, зависит от деталей реализации прошивки данного конкретного SSD ».
Лекенштейн
2
Вы на самом деле не хотите использовать blkdiscard. Во-первых, он предназначен для информирования накопителя о том, что определенные его части могут быть выброшены, а не для того, чтобы стереть все это. Диск может или не может на самом деле стереть данные. Команда безопасного стирания должна стереть все данные, включая любые данные, которые находятся в частях диска, которые в данный момент недоступны. Редактировать: просто перечитайте вопрос и поняли, что его не нужно стирать, но это все же стоит отметить.
Псуси
5

Если вам не нужна безопасная очистка, почему бы вам просто не установить kubuntu, используя опции «использовать весь диск» и эквивалент «быстрого формата» (не могу вспомнить точную терминологию сейчас)

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

Рори Олсоп
источник
2
См. Anandtech.com/show/2865/2 . Удалить блок - это не то же самое, что удалить его и пометить его как пустой.
Лекенштейн
@Lekensteyn Удаление ничего не значит для блочного устройства. Установщик вызовет mkfs.ext4 и откажется от всего устройства; это так же безопасно, как и «безопасное стирание», в том смысле, что в обоих случаях вы доверяете прошивке SSD.
Тобу
1
@ Тобу Правильно, это изменилось в какой-то момент. mkfs.ext4(8)говорит: discard - попытка отбросить блоки во время mkfs (сначала отбрасывание блоков полезно на твердотельных устройствах и в хранилище с разреженным / тонким предоставлением). Когда устройство объявляет, что сброс также обнуляет данные (любое последующее чтение после сброса и до записи возвращает ноль), тогда помечают все еще не обнуленные таблицы inode как обнуленные. Это значительно ускоряет инициализацию файловой системы. Это установлено по умолчанию.
Лекенштейн
@Tobu Для моего случая использования «Безопасное стирание» не должно было действительно стирать данные с его флеш-чипов, оно должно просто гарантировать, что не будет никаких отрицательных эффектов производительности, связанных с использованием некоторых блоков.
Лекенштейн
1

Если на диске есть файловый элемент Linux, вы можете использовать fstrim. По умолчанию последняя версия Ubuntu работает fstrimна дисках от следующих поставщиков:

    if [ -z "$NO_MODEL_CHECK" ]; then
        if ! contains "$HDPARM" "Intel" && \
           ! contains "$HDPARM" "INTEL" && \
           ! contains "$HDPARM" "Samsung" && \
           ! contains "$HDPARM" "SAMSUNG" && \
           ! contains "$HDPARM" "OCZ" && \
           ! contains "$HDPARM" "SanDisk" && \
           ! contains "$HDPARM" "Patriot"; then
            #echo "device $DEV is not a drive that is known-safe for trimming"
            continue

Раз в неделю.

Итак, один ответ на ваш вопрос - загрузите систему и подождите неделю!

Брайс
источник
1
fstrim упоминается в этом посте blkdiscard , вы также можете вызвать его вручную с помощью sudo fstrim /(где /точка монтирования файловой системы, которая поддерживает эту discardопцию).
Лекенштейн
-4

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

Чтобы включить TRIM:

gksudo gedit /etc/fstab

Замените "ext4 errors = remount-ro 0" на "ext4 discard, errors = remount-ro 0". (Добавить сброс)

Сохраните и перезагрузите компьютер, теперь TRIM должен быть включен.

Проверьте, включен ли TRIM:

sudo -i
dd if=/dev/urandom of=tempfile count=100 bs=512k oflag=direct
hdparm --fibmap tempfile

Используйте первый адрес begin_LBA.

hdparm --read-sector [begin_LBA] /dev/sda

Теперь он должен возвращать цифры и символы. Удалить файл и синхронизировать.

rm tempfile
sync

Теперь снова запустите следующую команду. Если он возвращает нули, TRIM включен.

hdparm --read-sector [begin_LBA] /dev/sda
Alex
источник
2
Вы НЕ хотите заполнять SSD нулями, так как он будет записывать в каждый блок стирания, вызывая больший износ и оставляя каждый блок стирания заполненным. Также на многих дисках НЕ обрезается сразу секторы.
Псуси
Конечно, требуется много записей, но это не повредит диск. Я использовал Corsair F120 в течение 10-11 месяцев и часто заполнял его нулями. (Делая это перед каждым тестом) Итак, после 30-35 раз производительность остается прежней. (~ 285 МБ на чтение, 275 МБ / на запись) SMART говорит: диск исправен
Алекс
9
Алекс, каждая запись на SSD повреждает его немного. Запись в каждый отдельный блок стирания приводит к тому, что все они помечаются в процессе использования, что препятствует правильной работе ГХ накопителя и ухудшает производительность. Вы можете думать об этом как о едином диске.
psusi