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

// Январь 31st, 2011 // Аппаратное обеспечение

Сегодня на почте я прочитал комментарий от читателя моего блога «ещё 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

Share

Спасибо!


Если вам помогла статья, или вы хотите поддержать мои исследования и блог - вот лучший способ сделать это:


26 Responses to “Включение TRIM для SSD дисков в Ubuntu”

  1. petu:

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

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

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

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

  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

    • google.com Андрей Токарчук:

      Хм, в 2.6.35 есть поддержка TRIM…

      • Василий Петров:

        Может быть дело в диске? Хотя на коробке написано «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

  3. vyaz:

    Спасибо за ваши статьи по настройке 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

    • google.com Андрей Токарчук:

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

  4. Bankir82:

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

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

  5. Alex:

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

    • google.com Андрей Токарчук:

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

      • Ну да, тем более, что ТРИМ почему-то не работает (ядро 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. Lotos:

    Какое здесь значение стартового 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. haku:

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

  8. lina:

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

  9. gmcg:

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

  10. Alexei:

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

Комментировать