Как включить TRIM?

189

Я знаю, что ядро ​​Linux поддерживает TRIM начиная с версии 2.6.33, поэтому в Ubuntu должна быть поддержка TRIM.

TRIM включен по умолчанию или мне нужно изменить некоторые настройки или установить дополнительное программное обеспечение для его работы? Если так, то как?

Uli
источник
Я просто следовал этим инструкциям на webupd8, который дает несколько действительно хороших опций :-) webupd8.org/2013/01/enable-trim-on-ssd-solid-state-drives.html Я попробовал вариант автоматической обрезки, как описано выше в «Automatic TRIM», но обнаружил, что настройка ежедневного cron намного лучше работала с моей настройкой.
bmbaker

Ответы:

197

Ubuntu 14.10 года

В Ubuntu 14.10 и 15.04 TRIMming происходит автоматически каждую неделю на всех поддерживаемых SSD fstrim.

$ tail -n1 /etc/cron.weekly/fstrim 
/sbin/fstrim --all || true

С 15.04 Ubuntu использует systemd и его таймер ( man systemd.timer, Arch wiki )

systemctl list-timers
systemctl status fstrim.timer

Ubuntu 14.04

Начиная с Ubuntu 14.04, запланированный TRIM включен по умолчанию для твердотельных накопителей Intel, SAMSUNG, OCZ, Patriot и Sandisk. Если у вас есть другой бренд, вы можете отключить проверку поставщика, выполнив следующую команду:

sed -i 's/exec fstrim-all/exec fstrim-all --no-model-check/g' /etc/cron.weekly/fstrim

(или просто отредактируйте файл /etc/cron.weekly/fstrimи добавьте --no-model-check)

Ubuntu 13.10 и ранее

Существует три способа выполнения TRIM: ручной, запланированный и автоматический:

Ручная TRIM

В Ubuntu это можно выполнить с помощью fstrim:

sudo fstrim /

однако это не требуется при включенном расписании или автоматическом режиме TRIM, как подробно описано в разделах ниже.

Примечание: для Ubuntu 11.04 и более ранних систем fstrim недоступен, поэтому вы должны использовать wiper.shприлагаемый hdparmв/usr/share/doc/hdparm/contrib/wiper.sh.gz

Запланированный TRIM (рекомендуется)

Это рекомендуемый в настоящее время метод, который планируется активировать по умолчанию для Ubuntu 14.04 . Вот как активировать его вручную в старых версиях ubuntu (с 11.10 по 13.10):

Создайте файл сценария еженедельного задания CRON:

gksudo gedit /etc/cron.weekly/fstrim

Вставьте следующий код в файл, затем сохраните и закройте файл:

#! /bin/sh  

# By default we assume only / is on an SSD. 
# You can add more SSD mount points, separated by spaces.
# Make sure all mount points are within the quotes. For example:
# SSD_MOUNT_POINTS='/ /boot /home /media/my_other_ssd'  

SSD_MOUNT_POINTS='/'  

for mount_point in $SSD_MOUNT_POINTS
do  
    fstrim $mount_point  
done

Обратите внимание, что приведенное выше предполагает, что только ваша корневая файловая система /находится на SSD. Если у вас есть больше точек монтирования, которые находятся на одном или нескольких твердотельных накопителях, добавьте их, SSD_MOUNT_POINTSкак описано в коде.

Сделайте скрипт исполняемым:

sudo chmod +x /etc/cron.weekly/fstrim

И наконец, проверьте это:

sudo /etc/cron.weekly/fstrim

Если вы не видите ошибок, ваша работа cron должна работать нормально.

Автоматическая TRIM (устарела, медленная)

Автоматический TRIM поддерживается с Ubuntu 10.10 (ядро 2.6.33) с файловой системой EXT4. Однако было установлено, что отправка команд TRIM на твердотельный накопитель в режиме реального времени - после каждого удаления - делает удаление на некоторых дисках намного медленнее, чем обычно. Поэтому рекомендуется еженедельная запланированная TRIM через задание cron (описанное выше).

Чтобы включить автоматический TRIM на диске или разделе, их необходимо смонтировать с discardпараметром в fstab. Сначала сделайте резервную копию вашего fstab, затем откройте его для редактирования:

sudo cp /etc/fstab ~/fstab-backup
gksudo gedit /etc/fstab

Добавьте discardк записи параметров fstab (через запятую) для SSD-диска или каждого раздела.

UUID=00000000-0000-0000-0000-000000000000  /  ext4  discard,errors=remount-ro  0  1

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

Тестирование автоматического TRIM

Чтобы проверить, работает ли TRIM, введите следующие команды ( источник ):

cd  / # Replace with SSD file system
sudo dd if=/dev/urandom of=tempfile count=100 bs=512k oflag=direct
sudo hdparm --fibmap tempfile

Из выходных данных скопируйте число под begin_LBAи проверьте имя устройства вашего SSD: System->Administration->Disk Utilityнапример, sda, sdb, sdc ...

Запустите следующее, но замените [ADDRESS](begin_LBA) и sdX(имя устройства SSD) данными, полученными выше.

sudo hdparm --read-sector [ADDRESS] /dev/sdX 

вывод должен быть длинной строкой символов для этих секторов

sudo rm tempfile
sync

Повторите hdparmкоманду сверху:

sudo hdparm --read-sector [ADDRESS] /dev/sdX 

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

Uli
источник
5
Тестирование TRIM может на самом деле работать не так: serverfault.com/a/401506/60525
chrishiestand
1
@Uli Пожалуйста, кто-нибудь, помогите мне. Это не похоже на работу для меня. У меня есть 4 раздела в моем ССД / /boot /usrи /optя использовал другой жесткий диск для моего /home. Я иду cd / #sdcи продолжаю инструкции, но я никогда не получаю нули. Заранее спасибо!
BugShotGG
1
@lightrush: Отличное редактирование! Спасибо за актуальность ответа.
Uli
1
Возможно, вы захотите добавить syncпосле ddкоманды, так как по крайней мере в моей системе временный файл не создается сразу, поэтому hdparm ничего не сообщает.
Андреас Дж.
2
systemd обрабатывает это сейчас. sudo systemctl статус fstrim.timer
воздушные шары
28

Обратите внимание, что если вы используете шифрование, решения, опубликованные здесь, вам не помогут, потому что вам также необходимо включить поддержку TRIM на уровне шифрования. Это можно сделать с помощью версий ядра 3.1+ и cryptsetup версии 1.4+, которые включены в Ubuntu 12.04.

Найти мое руководство по настройке TRIM для зашифрованных разделов LUKS здесь


Как активировать TRIM на зашифрованных разделах LUKS в Ubuntu и Debian


Это пошаговое руководство позволит вам воспользоваться технологией TRIM для ваших зашифрованных разделов SSD для cryptsetup 1.4 или выше и ядра 3.1 или выше. Это приводит к беспроблемной работе SSD, потому что

«TRIM позволяет SSD обрабатывать затраты на сборку мусора, которые в противном случае значительно замедлили бы будущие операции записи в задействованные блоки».

Пример настройки

Ноутбук с SSD в качестве единственного диска, Linux установлен в одном корневом разделе ext4 LVM с разделом подкачки LVM, оба через зашифрованный логический раздел LUKS.

SSD: / dev / sda

sudo fdisk -l /dev/sda
/dev/sda1               # boot partition (83) (unencrypted, ext4)
/dev/sda2               # extended partition
/dev/sda5               # logical partition (83) with LUKS encryption

ls /dev/mapper
/dev/mapper/sda5_crypt         # encrypted LUKS device in physical /dev/sda5 partition
/dev/mapper/volumegroup-root   # rootpartition sda5_crypt
/dev/mapper/volumegroup-swap   # swap partition sda5_crypt

Как

  1. Сделайте резервную копию всех ваших данных. Вы возитесь с файловой системой, поэтому резервное копирование - это просто хорошая идея.
  2. Убедитесь, что у вас есть необходимые версии ядра и cryptsetup (3.1 и 1.4, например, в Ubuntu 12.04, но будьте осторожны, на момент написания 12.04 все еще бета).
  3. Добавьте параметр discard в параметры файловой системы зашифрованных томов LVM в файле / etc / fstab. Это позволяет файловой системе вашего LVM-раздела знать, что вы хотите использовать TRIM.

    /dev/mapper/volumegroup-root    /   ext4 discard,noatime,nodiratime,errors=remount-ro    0    1
    
  4. Хотя последнего шага недостаточно. Пока LUKS не знает, что вы хотите использовать TRIM, он будет эффективно блокировать все операции TRIM, поступающие из файловой системы раздела LVM, из соображений безопасности. Добавьте параметр discard в параметры устройства crypt в / etc / crypttab, чтобы LUKS принимал поведение сброса раздела LVM.

    sda5_crypt UUID=e364d03f-[...]6cd7e none luks,discard
    
  5. Восстановите ваши initramfs. Опции crypttab хранятся там и используются при загрузке.

    sudo update-initramfs -c -k all
    
  6. Перезагрузка.

  7. Проверьте, активен ли теперь TRIM.

    sudo dmsetup table /dev/mapper/sda5_crypt --showkeys
    
  8. Если последняя команда показывает такой результат (1 allow_discards в конце), все готово.

    0  77656056  crypt  aes-cbc-essiv:sha256  abc[...]c7a0c  0  8:5  2056  1  allow_discards
    

Результат

TRIM активирован. Наслаждайтесь вашим SSD без проблем!

nem75
источник
@ Marco Ceppi - какая-то конкретная причина для редактирования, что-то, что я упустил?
nem75
Просто приведите в порядок уценку и удалите строку «подпись» (предполагается, что вы получите обратную связь с помощью комментариев и голосования на сайте.
Марко Сеппи
7
Руководство должно быть включено здесь в случае, если сайт / страница недоступна.
Cas
Кроме того, это эффективный ответ только для ссылок, он вообще не работает. Большинство из вас будет использовать LVM с LUKS, который не способен распространять TRIM в 12.04. Смотрите этот ответ для получения дополнительной информации.
gertvdijk
1
После выполнения этих инструкций по-прежнему необходимо настроить задание cron для обрезки диска 14.04?
AJN