Назад | Перейти на главную страницу

Можно ли заставить SSD TRIM (discard) работать на ext4 + LVM + программный RAID в Linux?

Мы используем RAID1 + 0 с md в Linux (в настоящее время 2.6.37) для создания устройства md, затем используем LVM для обеспечения управления томами поверх устройства, а затем используем ext4 в качестве нашей файловой системы в группах томов LVM.

Используя SSD в качестве дисков, мы хотели бы, чтобы команды TRIM распространялись по уровням (ext4 -> LVM -> md -> SSD) на устройства.

Похоже, что в недавних ядрах 2.6.3x было добавлено много новой поддержки TRIM, связанной с SSD, в том числе гораздо больше охвата сценариев Device Mapper, но мы все еще не можем заставить его каскадировать должным образом.

Возможно ли это? Если да, то как? Если нет, то есть ли прогресс?

Начиная с версии 2.6.37 он должен присутствовать (источник). Ядро не делает этого в фоновом режиме, в настоящее время процесс сброса блока разработан для запуска по запросу (сценарий cron!). Поддержки dm-crypt пока нет.

13 января 2011 г. патч был объединен в dm-raid1.c, который гласит:

dm raid1: support discard

Enable discard support in the DM mirror target.
Also change an existing use of 'bvec' to 'addr' in the union.

Я не на 100%, но я думаю, что это окно слияния для 2.6.38.

EXT4 добавили поддержку некоторое время назад, как и LVM. RAID - единственный ключ, который не поддерживается. По состоянию на 13.01.2011, похоже, добавлена ​​поддержка. Ищите его в 2.6.38 или, может быть, в 2.6.39.


Прошло время, а поддержка TRIM обязательно включен в ядро ​​3.7. В совершить для чтения RAID10:

Это заставляет md raid 10 поддерживать TRIM. Если один диск поддерживает discard, а другой нет, или один имеет discard_zero_data, а другой нет, данные с таких дисков могут быть несогласованными. Но это не имеет значения, отброшенные данные бесполезны. Однако это добавит дополнительную копию при перестроении.

UPD. 2020-06-17

Оглядываясь на историю коммитов за 2020 год:

2 года спустя есть коммиты в отношении md (ЛСР), один из них:

- По сути, через несколько месяцев после того, как я отредактировал свой ответ ранее, ядро ​​Linux стало способно поддерживать сброс блоков при настройке.


Предыдущие варианты ответа:

UPD. 2012-07-17 UPD.: Спасибо Wodin за то, что сообщили мне - согласно lkml.org/lkml/2012/3/11/261 этот функционал был добавленопредложил в последнее время. предложил знак равно принято, хотя.

UPD. 2011-02-01 Невозможно, потому что Linux Soft RAID не поддерживает это (пока?).

Вкратце, вот текущие рекомендуемые настройки производительности и безопасности данных в Linux.

Из-за некоторых ошибок / рисков Debian по умолчанию не включает сброс LVM: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=717313

Gentoo Wiki предлагает одноразовую последовательность для отбрасывания блоков в свободном пространстве VG (как root):

lvcreate -l100%FREE -n trim yourvg
blkdiscard /dev/your/trim
lvremove yourvg/trim

Что касается файловых систем, рекомендуется не включать discard вариант монтирования в /etc/fstab но чтобы включить только fstrim.timer, обычно предоставляемый в дистрибутивах на основе systemd.

sudo systemctl enable fstrim.timer

Базовые уровни, такие как программный рейд, должны обрабатывать / пересылать события сброса / обрезки из FS или LVM.

Mdtrim может потребоваться дополнительная работа:

Cyberax-mdtrim-0a40e8d# ./mdtrim.py -m /dev/md4 -s /home
Scratch directory is /home, trimmer file size is 0 GB 790 MB
Found slave sdc2 on /dev/sdc with MD offset 0 and partition offset 249856
Creating trimmer file
252,2: device not found in /dev
Traceback (most recent call last):
  File "./mdtrim.py", line 120, in <module>
    if lines[2].find("assuming %d byte sectors" % sector_size) == -1:
IndexError: list index out of range

Вы можете использовать мой скрипт MDTRIM ( https://github.com/Cyberax/mdtrim/ ) для ОБРЕЗКИ пустого места на RAID-массивах ext4 / 3 уровня 1. Мы запускаем его периодически из cron, и у нас он отлично работает.

Возможно добавление поддержки для других уровней RAID, но у меня нет на это времени (или необходимости).

Как было предложено Вот Ты можешь использовать

lsblk -D

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

Также обратите внимание, что раздел устройства в lvm.conf содержит опцию issue_discards. Видеть

man 5 lvm.conf

для получения дополнительной информации.