Solid state drive (Русский)

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

Состояние перевода: На этой странице представлен перевод статьи Solid state drive. Дата последней синхронизации: 15 октября 2022. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

Использование

TRIM

Большинство твердотельных накопителей поддерживает команду ATA_TRIM для обеспечения стабильной долгосрочной производительности и выравнивания износа. Статья на TechSpot приводит сравнение производительности до и после заполнения SSD данными.

Начиная с версии 3.8 ядра Linux, поддержка TRIM постоянно добавлялась для различных файловых систем. Ориентировочный обзор приведён в следующей таблице:

File systemНепрерывный TRIM
(опция discard)
Периодический TRIM
(fstrim)
Ссылки
и примечания
BtrfsДаДа
exFATДаДаfstrim поддерживается с версии ядра 5.13,
ext3ДаДа
ext4ДаДа"discard, nodiscard(*)" в
F2FSДаДа
JFSДаДа
NILFS2ДаДа
NTFS-3GНетДас версии 2015.3.14,
VFATДаДаfstrim поддерживается с версии ядра 4.19,
XFSДаДа
Важно: Убедитесь, что ваш SSD поддерживает TRIM, прежде чем пытаться использовать его, иначе возможна потеря данных!

Проверить поддержку TRIM можно с помощью команды:

$ lsblk --discard

Проверьте значения столбцов DISC-GRAN (discard granularity) и DISC-MAX (discard max bytes). Ненулевые значения означают поддержку TRIM.

Другой вариант — установить пакет и выполнить команду:

Периодический TRIM

Пакет util-linux предоставляет systemd-службу , а также таймер , который вы можете включить. Он настроен на еженедельное включение службы. Служба выполняет на всех смонтированных файловых системах на устройствах, поддерживающих операцию discard.

Таймер полагается на метку времени (которую он создаст при первом запуске), чтобы проверять, прошла ли неделя с момента его последнего запуска. Поэтому нет необходимости беспокоиться о слишком частых вызовах, как это бывает с anacron.

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

Непрерывный TRIM

Вместо того чтобы выдавать команды TRIM время от времени (по умолчанию раз в неделю при использовании ), можно также выдавать команды TRIM при каждом удалении файлов. Этот вариант известен как непрерывный TRIM.

Важно: До SATA 3.1 все команды TRIM выполнялись без очереди, поэтому непрерывный TRIM приводил к частым зависаниям системы. В этом случае #Периодический TRIM является более хорошей альтернативой. Аналогичная проблема существует и для ряда устройств (смотрите ata_device_blacklist в исходном коде Linux), для которых выполнение команд TRIM через очередь было запрещено из-за повреждения данных. На таких устройствах система может быть вынуждена отправлять на SSD команды TRIM без использования очереди. Смотрите Wikipedia:Trim (computing)#Disadvantages для более подробной информации.

Использование опции монтирования discard в включает непрерывный TRIM в операциях с устройствами:

/dev/sda1  /           ext4  defaults,discard   0  1

В файловой системе ext4 флаг discard также может быть установлен как опция монтирования по умолчанию с помощью tune2fs:

# tune2fs -o discard /dev/sdXY

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

Примечание: Опции монтирования, которые используются по умолчанию, не видны в /proc/mounts.

Выполнение TRIM на устройстве целиком

Если вы хотите очистить сразу весь SSD, например, перед новой установкой или продажей диска, можно использовать команду blkdiscard.

LVM

Запросы TRIM, передаваемые из файловой системы на логический том, автоматически передаются на физические томы. Дополнительная настройка не требуется.

По умолчанию ни одна операция LVM (lvremove, lvreduce и все остальные) не отправляет запросы TRIM на физические томы. Это сделано для того, чтобы можно было восстановить предыдущую конфигурацию группы томов с помощью . Параметр в управляет тем, посылаются ли запросы TRIM на физические тома, лежащие в основе логического тома, когда логический том больше не использует пространство физических томов.

dm-crypt

Для некорневых файловых систем добавьте опцию discard в файле /etc/crypttab для зашифрованных блочных устройств, расположенных на SSD (смотрите dm-crypt/System configuration#crypttab).

Для корневой файловой системы следуйте инструкциям из раздела dm-crypt/Specialties#Discard/TRIM support for solid state drives (SSD), чтобы добавить нужный параметр ядра в конфигурацию загрузчика.

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

Следуйте советам из раздела Увеличение производительности#Устройства хранения, чтобы максимально увеличить производительность дисков.

Размер сектора

Смотрите Advanced Format#Solid state drives.

Очистка ячеек памяти SSD

Можно полностью сбросить ячейки SSD до начального состояния, восстановив таким образом заводскую производительность записи. Известно, что производительность записи со временем снижается даже на SSD со встроенной поддержкой TRIM: он работает только при удалении файлов, но не при замене, например, инкрементном сохранении.

Сброс можно выполнить, следуя соответствующей процедуре, описанной в статье Очистка ячеек памяти SSD, для #SATA или #NVMe.

Hdparm показывает состояние "frozen"

Прошивки некоторых материнских плат отправляют команду «security freeze» SATA-устройствам при инициализации. Аналогичным образом, прошивки некоторых SSD (и HDD) переходят в состояние «security freeze» уже с завода. В обоих случаях параметры безопасности пароля устройства устанавливаются в состояние frozen:

На операции вроде форматирования или установки операционной системы это не влияет.

Приведённый выше вывод показывает, что устройство не заблокировано паролем HDD при загрузке (not locked), а состояние frozen защищает устройство от вредоносных программ, которые могут попытаться заблокировать его, установив на него пароль во время работы.

Если вы хотите установить пароль на устройство в состоянии «frozen», необходимо, чтобы BIOS материнской платы поддерживал эту функцию. Многие ноутбуки имеют такую поддержку, поскольку она требуется для аппаратного шифрования, но поддержка может оказаться нетривиальной для настольных/серверных плат. Например, в материнской плате Intel DH67CL/BL для доступа к настройкам необходимо перевести её в «режим обслуживания» с помощью физической перемычки (, ).

Если вы собираетесь стереть SSD, смотрите статьи Securely wipe disk#hdparm и Очистка ячеек памяти SSD.

Перевод SSD в состояние "frozen" после возвращения из ждущего режима

После возвращения из ждущего режима SSD обычно теряет состояние «frozen», что делает его уязвимым для команд ATA SECURE ERASE, подобных тем, что описаны в статье Очистка ячеек памяти SSD.

Чтобы предотвратить эту проблему, можно запустить скрипт после пробуждения от сна:

/usr/lib/systemd/system-sleep/ssd-freeze.sh
#!/bin/sh
if [ "$1" = 'post' ]; then
	sleep 1
	if hdparm --security-freeze /dev/disk/by-id/''ata-name-of-disk''; then
		logger "$0: SSD freeze command executed successfully"
	else
		logger "$0: SSD freeze command failed"
	fi	
fi

Аппаратное шифрование

Как отмечалось в разделе #Hdparm показывает состояние "frozen", установка пароля для устройства хранения данных (SSD/HDD) в BIOS может также инициализировать аппаратное шифрование поддерживающих его устройств. Если устройство также соответствует стандарту OPAL, это может быть достигнуто и без соответствующей функции BIOS для установки парольной фразы; смотрите статью Self-encrypting drives.

Решение проблем

Возможно, что проблема, с которой вы столкнулись, является ошибкой прошивки, не связанной с Linux, поэтому прежде чем пытаться устранить проблему, затрагивающую SSD-устройство, сначала проверьте, доступны ли обновления для:

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

Решение ошибок NCQ

Некоторые SSD и чипсеты SATA не работают должным образом с Linux Native Command Queueing (NCQ). Характерные ошибки выглядят в dmesg следующим образом:

[ 9.115544] ata9: exception Emask 0x0 SAct 0xf SErr 0x0 action 0x10 frozen
[ 9.115550] ata9.00: failed command: READ FPDMA QUEUED
[ 9.115556] ata9.00: cmd 60/04:00:d4:82:85/00:00:1f:00:00/40 tag 0 ncq 2048 in
[ 9.115557] res 40/00:18:d3:82:85/00:00:1f:00:00/40 Emask 0x4 (timeout)

Чтобы отключить NCQ при загрузке, добавьте в командную строку ядра в настройках загрузчика. Чтобы отключить NCQ только для определённого устройства (например, для диска 0 на порту 9), используйте

Также можно отключить NCQ для определённого диска без перезагрузки через sysfs:

# echo 1 > /sys/block/sdX/device/queue_depth

Если это (а также обновление прошивки) не решит проблему или вызовет другие проблемы, то отправьте сообщение об ошибке.

Решение ошибок, связанных с управлением питанием SATA

У некоторых SSD (например, Transcend MTS400) возникают проблемы при включенном управлении питанием SATA Active Link Power Management, ALPM. ALPM отключен по умолчанию и включается демоном энергосбережения (например, TLP, Laptop Mode Tools).

Если вы начинаете сталкиваться с ошибками, связанными с SATA, при использовании такого демона, попробуйте отключить ALPM, установив его состояние в и для профиля работы от батареи, и для профиля работы от сети.

Внешний SSD с поддержкой TRIM

Чипы некоторых USB-SATA мостов (например, VL715, VL716 и т.д.), а также USB-PCIe (например, JMicron JMS583, используемые во внешних NVMe, таких как IB-1817M-C31) поддерживают TRIM-подобные команды, которые могут быть отправлены через драйвер USB Attached SCSI (под именем «uas» в Linux).

Но ядро может не обнаружить эту возможность автоматически и из-за этого не использовать её. Например, если ваше блочное устройство — это /dev/sdX, вы можете узнать, так ли это, выполнив команду

# sg_readcap -l /dev/sdX

Если в её выводе вы найдёте строку «Logical block provisioning: lbpme=0», значит ядро предполагает, что устройство не поддерживает "Logical Block Provisioning Management", поскольку бит (LBPME) не установлен.

Если это так, то вам следует выяснить, есть ли в странице «Vital Product Data» (VPD) в разделе «Logical Block Provisioning» вашего устройства информация о поддерживаемых механизмах разметки данных. Это можно сделать с помощью команды:

# sg_vpd -a /dev/sdX

Найдите в выводе строки, которые выглядят следующим образом:

Unmap command supported (LBPU): 1
Write same (16) with unmap bit supported (LBPWS): 0
Write same (10) with unmap bit supported (LBPWS10): 0

Этот пример говорит о том, что устройство поддерживает команду «UNMAP».

Взгляните на вывод

$ cat /sys/block/sdX/device/scsi_disk/*/provisioning_mode

Если ядро не обнаружило поддержку unmap, то, скорее всего, будет возвращено значение «full». Кроме «full», драйвер накопителей SCSI в настоящее время знает следующие значения для provisioning_mode:

unmap
writesame_16
writesame_10
writesame_zero
disabled

Для приведённого выше примера теперь можно записать «unmap» в «provisioning_mode», чтобы попросить ядро использовать этот режим:

# echo "unmap" >/sys/block/sdX/device/scsi_disk/*/provisioning_mode

Это сразу же позволит вам использовать такие инструменты, как «blkdiscard» на /dev/sdX или «fstrim» на примонтированных файловых системах, расположенных на /dev/sdX.

Если вы хотите автоматически включать «provisioning_mode» при подключении внешнего устройства определённого производителя/продукта, это можно автоматизировать с помощью udev. Сначала найдите идентификаторы производителя и продукта USB:

$ cat /sys/block/sdX/../../../../../../idVendor
$ cat /sys/block/sdX/../../../../../../idProduct

Затем создайте или добавьте в файл правил udev (пример здесь использует idVendor 152d и idProduct 0583):

# echo 'ACTION=="add|change", ATTRS{idVendor}=="152d", ATTRS{idProduct}=="0583", SUBSYSTEM=="scsi_disk", ATTR{provisioning_mode}="unmap"' >>/etc/udev/rules.d/10-uas-discard.rules

(Вы также можете использовать команду для поиска соответствующего idVendor/idProduct).

Прошивка

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

ADATA

У ADATA есть утилита, доступная для Linux (i686) на странице поддержки. Ссылка на последнюю версию прошивки появится после выбора модели. Последняя утилита обновления для Linux упакована вместе с прошивкой и должна быть запущена от имени root. Возможно, сначала потребуется установить правильные права на исполняемый файл.

Crucial

Crucial предоставляет возможность обновления прошивки с помощью ISO-образа. Эти образы можно найти после выбора продукта на странице поддержки SSD и загрузки "Manual Boot File".

Владельцы модели M4 Crucial могут проверить необходимость обновления прошивки с помощью команды .

Если вы увидели это предупреждение — сделайте резервную копию важных данных и немедленно обновите прошивку. Смотрите инструкцию, как обновить прошивку Crucial MX100 с помощью ISO-образа и Grub.

Intel

У Intel есть Firmware Update Tool для операционных систем, не совместимых с Windows Intel® Memory and Storage Tool (GUI).

Существует также более новая утилита командной строки для Linux для перепрошивки под названием Intel Memory and Storage (MAS) Tool, доступная в AUR как (документация).

Пример проверки состояния прошивки:

# intelmas show -intelssd 0
DevicePath : /dev/nvme0n1
DeviceStatus : Healthy
Firmware : 002C
FirmwareUpdateAvailable : The selected Intel SSD contains current firmware as of this tool release.
можно опустить, если в системе только один SSD Intel, или передать  для второго SSD, и так далее.

Если обновление доступно, оно выполняется путём запуска . В документации указано, что в Linux эту процедуру нужно выполнить дважды, с отключением и повторным включением питания между выполнениями. Последняя версия прошивки для всех устройств распространяется как часть MAS Tool, поэтому её не нужно скачивать отдельно.

Kingston

Для накопителей на базе Sandforce на AUR доступен инструмент KFU, .

Mushkin

Менее известные твердотельные накопители марки Mushkin также используют контроллеры Sandforce и имеют утилиту Linux (почти идентичную Kingston) для обновления прошивки.

OCZ

У OCZ есть Command Line Online Update Tool (CLOUT), доступный для Linux. AUR предоставляет , ocztoolboxAUR и .

Samsung

Хотя Samsung считает методы обновления прошивки, не поддерживаемые программным обеспечением Magician, "неподдерживаемыми", они могут работать. Программа Magician может создать загрузочный USB-накопитель, содержащий обновление прошивки, однако Samsung больше не предоставляет это программное обеспечение для потребительских SSD. Samsung также предоставляет готовые загрузочные ISO-образы, которые можно использовать для обновления прошивки. Другой вариант - использовать утилиту Samsung magician (пакет ). Magician поддерживает только SSD под маркой Samsung; SSD, которые производит Samsung для OEM-производителей (например, Lenovo), не поддерживаются.

Пользователи, предпочитающие запускать обновление прошивки с Live USB, созданного через Linux (без использования программы Magician от Samsung на Microsoft Windows), могут обратиться к за более подробной информацией.

Обновление под Linux

Прошивку твердотельного накопителя можно обновить из обычного Linux (без создания загрузочного USB-накопителя), как показано ниже. Сначала посетите страницу Samsung downloads page, перейдите в раздел «Samsung SSD Firmware» и загрузите последнюю версию прошивки для вашего SSD - это должен быть ISO-образ.

Примечание: В некоторых ISO-образах отсутствует initrd образ Linux, упомянутый ниже. Смотрите раздел #Старые SSD вместо этого.

Извлеките образ Linux из ISO-образа:

$ bsdtar xf samsung_ssd_firmware.iso initrd

Извлеките . Этот каталог содержит файлы обновления прошивки:

$ bsdtar xf initrd root/fumagician

Наконец, запустите с правами root и перезагрузитесь (если прошивка была успешно обновлена).

Старые SSD

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

Модель SSDПуть к образу FreeDOSПуть к прошивке
470, 830
840samsung/DSRD/
840 EVO (mSATA), Pro

Сначала извлеките образ FreeDOS из ISO-образа:

$ bsdtar xf samsung_ssd_firmware.iso freedos_image_path.

Смонтируйте образ FreeDOS в :

# mount freedos_image_path /mnt

Получите номер диска SSD под Disk Number из утилиты управления SSD Magician:

# magician --list

Обновите прошивку SSD для указанного диска, указав путь к пакету прошивки:

# magician --disk disk_num --firmware-update --fwpackage-path /mnt/firmware_package_path

Наконец, убедитесь, что прошивка была успешно обновлена, проверив версию в разделе Firmware из вывода (запускать с правами root). В случае положительного ответа перезагрузите систему.

SanDisk

SanDisk создаёт ISO-образы с прошивками, чтобы можно было обновлять прошивку SSD в операционных системах, которые не поддерживает SanDisk SSD Toolkit.

Нужно выбрать прошивку для правильной модели SSD и правильной ёмкости (например, 60 ГБ, или 256 ГБ). После записи ISO-образа просто загрузитесь с созданного загрузочного диска CD/DVD (может работать и с USB-накопителя).

Образы iso содержат только ядро linux и initrd. Распакуйте их в раздел /boot и загрузитесь с помощью GRUB или Syslinux для обновления прошивки.

Смотрите также:

Смотрите также

gollark: Er, they have valid reasons.
gollark: We couldn't afford bottomless variants.
gollark: Well, at osmarks.tk, our data is stored in currently non-bottomless pits.
gollark: Maybe it was just running a ton of software and some of it had some unpatched security holes (it's a big space station), who knows.
gollark: And yet R2D2 could trivially meddle with the death star.
This article is issued from Archlinux. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.