Включение TRIM для SSD дисков в Ubuntu

Сегодня на почте я прочитал комментарий от читателя моего блога “ещё TRIM включить?”  к статье “Настройка Ubuntu для рабоыт на SSD диске“. И действительно, самое главное то я и забыл. В этой заметке опишу процесс настройки поддержки команды TRIM в Ubuntu.

TRIM — команда, позволяющая операционной системе уведомить твердотельный накопитель о том, какие блоки данных больше не используются и могут быть очищены накопителем самостоятельно. TRIM входит в спецификацию интерфейса ATA, стандартизацией которого занимается группа T13 в составе INCITS. Интересующихся подробностями сразу отправляю на Wikipedia. В Windows 7 поддержка TRIM уже встроена, но мы же не будем ставить это решето. А будем продолжать работать в идеологически правильной Ubuntu 🙂

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

Проверка, а не включён ли trim уже сейчас

Пусть /dev/sdX – наш SSD диск

  1. Меняем пользователя на root:
    sudo -i
  2. Пишем файл 50Мб со случайными данными:
    dd if=/dev/urandom of=tempfile count=100 bs=512k oflag=direct
  3. Ищем стартовый LBA адрес у файла
    hdparm --fibmap tempfile
  4. Читаем данные со стартового LBA адреса файла, замените [ADDRESS] на свой Starting LBA address из вывода предыдущей команды:
    hdparm --read-sector [ADDRESS] /dev/sdX
  5. Теперь удалим временный файл и синхронизируем ФС:
    rm tempfile
    sync
  6. Повторяем пункт 4:
    hdparm --read-sector [ADDRESS] /dev/sdX
Если TRIM включен, то в результате вывода должны быть одни нули, если же их нет TRIM выключен.

Включаем TRIM

Помните, что всё это вы делаете на свой страх и риск (хотя тут его немного).

Замечания:

  • Вам нужно ядро Linux 2.6.33 или старше. У меня стоит 2.6.36, какой там в репозитарии для Ubuntu 10.10 я не понмю, но вроде старше (2.6.35).
  • Для бенчмарка использовалась Disk Utility. В Ubutnu этот пакет называется “gnome-disk-utility” и в десктопной версии ставится по-умолчанию.
  • ВНИМАНИЕ: Некоторые пользователи рекомендуют использовать отключение журнала для Ext-4 и увеличенные таймауты для сброса грязных буферов (в т.ч. и я). Вы сами должны понимать, что в случае отключения питания ваши данные могут быть повреждены. Либо используйте UPS либо делайте это на ноутбуке (т.к. там есть батарейка).   Делайте это, только в случае, если вы реально знаете, что вы делаете. Для стабильности данных просто используйте опцию “discard”, как показано ниже.. Контроллер жесткого диска должен быть в хорошей форме, в смысле хранения данных и скорости. У меня стоит Samsung и я использовал его только с опцией discard и как вы видите из тестов скорость осталась на прежнем уровне ~250MB/s после всех манипуляций.

Большинство существующих SSDs поддерживают команду  ATA_TRIM для устойчивой долгосрочной производительности и выравнивания износа. На Linux trim поддерживается файловыми системами Ext4 и Btrfs. Для включения TRIM мы должны сделать следущее:

  1. Открываем наш fstab gksudo gedit /etc/fstab
  2. Для каждого раздела Ext4 добавляем опцию discard в список параметров.Например, если у нас только один корневой раздел “/”:
    UUID=[NUMS-AND-LETTERS] /               ext4    errors=remount-ro 0       1

    we change the entry to:

    UUID=[NUMS-AND-LETTERS] /               ext4    discard,errors=remount-ro 0       1
  3. Сохраняем файл и выходим
  4. Перезагружаем компьютер

Всё, теперь TRIM должен работать. Проводим тест из предыдущего абзаца и убеждаемся в этом.

Литература

http://yalb.net/?p=167

https://sites.google.com/site/lightrush/random-1/checkiftrimonext4isenabledandworking

https://sites.google.com/site/lightrush/random-1/howtoconfigureext4toenabletrimforssdsonubuntu

27 Comments

  1. Спасибо за статью, однако, не помогло :(. Возможно, что-то сделал не так. В частности, не уверен, что верно выполнил пункт 4

    # Читаем данные со стартового LBA адреса файла, замените [ADDRESS] на свой Starting LBA address из вывода предыдущей команды:
    hdparm –read-sector [ADDRESS] /dev/sdX

    ADDRESS брал из второй колонки, первой (после заголовка) строчки. Верно?

    После изменений и перезагрузки не нули. Что я делаю не так?

    1. Да, вроде всё верно. А какой вывод команды uname -a ?

  2. Тоже не помогло.
    uname -a
    Linux www 2.6.35-22-generic-pae #35-Ubuntu SMP Sat Oct 16 22:16:51 UTC 2010 i686 GNU/Linux

      1. Может быть дело в диске? Хотя на коробке написано “Support WIN7 TRIM command”. При загрузке ничего необычного:

        ata1: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
        ata1.00: ATA-8: ADATA S596, 100312, max UDMA/133
        ata1.00: 62533296 sectors, multi 16: LBA48 NCQ (depth 31/32), AA
        ata1.00: configured for UDMA/133
        scsi 0:0:0:0: Direct-Access ATA ADATA S596 1003 PQ: 0 ANSI: 5
        sd 0:0:0:0: Attached scsi generic sg0 type 0
        sd 0:0:0:0: [sda] 62533296 512-byte logical blocks: (32.0 GB/29.8 GiB)
        sd 0:0:0:0: [sda] Write Protect is off
        sd 0:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn’t support DPO or FUA

        Или дело всё же дело в ядре. Тут стандартное с ubuntu 10.10 server’a

          1. Нормальный диск, нормальное ядро, ошибок не вылезает, TRIM не работает. Хм, даже не знаю, чем вам помочь…

          2. Я вот тут подумал, а откуда вы взяли способ проверки работы TRIM? Может быть он неверный? Почему там должны быть 0? Ведь, по идеи, при удалении очищается только запись в таблице файлов, а содержимое файла на диске, как раз для уменьшения количества операций записи на диск, не меняется…

  3. Спасибо за ваши статьи по настройке SSD.

    И одна трудность с которой я столкнулся при настройке. Система Ubuntu 10.10, диска Intel X-25 M 80 gb. Настраивал по первой статье, а затем взялся за TRIM. И с его включением возникли проблемы – он никак не хотел включаться. Решение нашел вот тут http://forum.ubuntu.ru/index.php?topic=140713.0 – после включение журналирования TRIM нормально заработал.

    Включал так.

    sudo tune2fs -o ^journal_data_writeback /dev/sda3

    1. О, спасибо за ссылочку! Вот теперь думаю, что есть большее благо отсутствие журналирование, или работающий TRIM…

  4. Подтверждаю, с выключенным журналом Трим не работает.

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

    1. опечаточка *”а потом пытался включить ТРИМ”

  5. Так что в итоге меньшее зло, ТРИМ или журнал? 🙂

    1. Думаю лучше журналирование вырубить.

      1. Ну да, тем более, что ТРИМ почему-то не работает (ядро 2.6.38 из стока 11.04 убунты)

        [ 69.128240] EXT4-fs warning (device dm-2): release_blocks_on_commit:2672: discard not supported, disabling
        [ 70.750986] EXT4-fs warning (device dm-4): release_blocks_on_commit:2672: discard not supported, disabling

  6. Какое здесь значение стартового LBA, подскажите пожалуйсто

    hdparm –fibmap tempfile

    tempfile: underlying filesystem: blocksize 4096, begins at LBA 96487424; assuming 512 byte sectors
    byte_offset begin_LBA end_LBA sectors
    0 96988160 96989183 1024
    524288 96991232 96992255 1024
    1048576 96993280 96995327 2048
    2097152 98842624 98846719 4096
    4194304 98887680 98981887 94208

  7. Спасибо, проверил, действительно без опции discard на ext4 разделе остаётся мусор после удаления файла.

  8. Спасибо Вам большое за статью. Но мне, к сожалению, не помогло. У меня диск Kingston SSDNow V Series 64 gb, установлена Ubuntu 10.10, ядро 2.6.35-30. Сделала, все по вашим рекомендациям, но нули не появились. Скажите, пожалуйста, когда проверяем включен ли trim, после пункта 6 сразу должны появиться нули или нужно подождать какое-то время и потом еще раз повторить?

  9. Не работает с даже с 3.4.0-999-generic #201205020430 кернел и Nova SSD-V60G2, то есть ноли не появляются. Все сделал точно по инструкции.

  10. Вы забыли подать команду после всего
    sudo update-initramfs -u
    для того, чтобы Ваши новые опции из /etc/fstab попали в процесс начальной загрузки системы.

  11. Чёт пошло не так:
    root@rb-nout:~# hdparm –fibmap tempfile
    tempfile: No such file or directory
    хотя делала всё по инструкции.

Leave a Comment