Установка і настройка / оптимізація SSD Linux

Отже, пані та панове - нарешті я поставив в свій маленький eee pc SSD диск 🙂 Перш ніж дізнатися, як його максимально оптимізувати в середовищі Linux, довелося неабияк помучитися

Отже, пані та панове - нарешті я поставив в свій маленький eee pc SSD диск 🙂 Перш ніж дізнатися, як його максимально оптимізувати в середовищі Linux, довелося неабияк помучитися.

Отже, SSD-носій хороший всім: швидкість читання / запису даних, час доступу, відсутність фрагментації, споживана потужність (що дуже важливо для Небука і ноутбуків). Останнє покоління цих дисків гарантують відпрацювання, порівнянну зі звичайними HDD, (а при правильному зверненні навіть в кілька разів вище) тому зараз вже можна обзавестися таким твердотілим девайсом.

Головний мінус цих носіїв, і, на жаль, мінус поки великий - необхідно уникати дуже частого звернення до диска з частою записом дрібних файлів. У порівнянні з HDD, у SSD розміри кластерів набагато більше, відповідно, запис невеликого балки потривожить цілий кластер. Ярий приклад - запис логів в Linux, журнал роботи файлової системи і інші подібні речі. Відповідно, наша з Вами завдання скоротити кількість звернень до диска. Отже, поїхали:

1) Найголовніше, від чого треба відштовхуватися - це команда TRIM. Для її підтримки необхідно ядро, не старше ніж 2.6.3.3. Якщо ядро ​​більш старе - то доведеться ставити ядро ​​новіше. Як це зробити в Debian Squeeze - можна прочитати тут . Якщо всі умови дотримані - необхідно відредагувати файл / etc / fstab:

# <File system> <mount point> <type> <options> <dump> <pass> proc / proc proc defaults 0 0 # / was on / dev / sda1 during installation UUID = eb07b6cb-e4ed-47a7-9518-19272a91a01a / ext4 noatime, nodiratime, discard, errors = remount-ro 0 1 # SWAP-розділ на флешці UUID = 93c7ee68-a625-44d6-b1ec-5fc1c55e1e57 swap swap defaults 0 0 / dev / scd0 / media / cdrom0 udf, iso9660 user, noauto 0 0 # Кеш браузера google-chrome на tmpfs tmpfs /home/erdees/.cache/google-chrome tmpfs size = 1000M, mode = 0777 0 0 # Решта розділів і директорії, перенесені в tmpfs tmpfs / tmp tmpfs defaults 0 0 tmpfs / var / tmp tmpfs defaults 0 0 tmpfs / var / lock tmpfs defaults 0 0 #tmpfs / var / log tmpfs defaults 0 0 erdees @ erdees-netbook: ~ $

Найголовніше в цьому конфіги - це включення TRIM. За його включення відповідає параметр discard. Якщо придивитися, то там же поруч можна знайти параметри noatime і nodiratime - перший відключає оновлення час доступу до файлів, другий - відключає запис час доступу до каталогів. Таким чином, ми включили TRIM і трохи знизили кількість записи на SSD.
Як видно, всі директорії, в яких відбуваються часті цикли читання / запису знаходяться в tmpfs (tmpfs - це віртуальна файлова система, яка знаходиться в оперативній пам'яті), куди крім tmp, var і іншого перенесений кеш браузера google-chrome. Для інших браузерів рядок в fstab отлічасться практично не буде - головне, це перенести папку з кешем в tmpfs. Що стосується рядки зі SWAP-розділом на флешці - то ми поки його не чіпаємо.

2) Момент другий - файлова система повинна бути або ext4, або btrfs. Інші не підтримуються. SWAP-розділ рекомендовано відключити, або використовувати на іншому диску / носії. Як правило, на сучасних ноутбуках і нетбуках оперативної пам'яті завжди вистачає і своп не задіяне, але іноді туди може сипатися купа дрібниці. Наприклад, у мене SWAP висить на SD-флешці, побачити це можна в наведеному вище fstab. Але про це пізніше. Якщо Ви ставили систему зі свопом, то поки просто закоментуйте рядок.

3) Необхідно переконатися, чи працює TRIM. Є два способи зробити це. Однак перший не 100% точний і у мене не прокатав.

Спосіб перший:

Створюємо за допомогою утиліти dd файл:

dd if = / dev / urandom of = tempfile count = 10 bs = 512k oflag = direct

При успіху побачимо висновок:

10 + 0 записів лічено 10 + 0 записів написано скопійовано 5242880 байт (5,2 MB), 2,17641 c, 2,4 MB / c

Далі шукаємо стартовий LBA створеного нами файлу:

root @ erdees-netbook: / home / erdees / new # hdparm --fibmap tempfile tempfile: filesystem blocksize 4096, begins at LBA 2048; assuming 512 byte sectors. byte_offset begin_LBA end_LBA sectors 0 2886656 2888703 2048 1048576 2983936 2985983 2048 2097152 2979840 2983935 4096 4194304 2992128 2994175 2048

Після робимо пошук по begin_LBA:

hdparm --read-sector [номер сектора] / dev / sda

Побачимо приблизно такий висновок:

fd51 270e 3ea6 6a69 694e 48cf ed26 fa8f c124 ffc6 5a04 7d60 cbc2 0954 d2ca eff4 d645 8e75 c58b 3b94 adfd 2221 dfd0 20d8 e433 1e3c fcff f265 e899 4694 c4b3 6d0b 6016 be75 b076 23a2 01dc c7dd 6340 2991 06fe 4494 1a7e e2ae 4048 8c9b e3ec 9edf 0e0d 5726 3942 a154 1919 52ec b58e 410a ba61 f8bb 4811 54fc 95c5 5096 aae7 1670 423c 2aa4 0a48 6e1f de3d 6661 3f6d 2a3a e9e6 a082 b72a 87c9 2fa1 7a8b 9b97 1db6

Тепер видалимо файл:

rm tempfile

Виконуємо синхронізацію:

sync

Тепер виконав команду hdparm -read-sector [номер сектора] / dev / sda знову, після чого замість попереднього висновку секторів, у Вас повинні з'явиться тільки нулі. Однак у мене це не проканало, на жаль. Спосіб перевірки дуже наочний, однак sync не гарантує синхронізацію ФС.

Спосіб другий - це всього лише одна команда:

root @ erdees-netbook: / home / erdees / new # hdparm -I / dev / sda | grep TRIM * Data Set Management TRIM supported (limit unknown)

Відповідно, наявність напису supported означає, що TRIM підтримується, а зірочка зліва - то що він в даний момент активований. Так то.

4) Ще парочка конфігов і рекомендацій. Я налаштував відкладений запис. Тобто всі процеси в системі пишуться в tmpfs, а коли прийде заданий час - то звертаються вже до диска. Додаємо рядки в /etc/sysctl.conf

vm.laptop_mode = 5 vm.dirty_writeback_centisecs = 15000

На цьому з sysctl все. Ще я б порадив вимкнути планувальник введення-виведення, так як він не здатний працювати з SSD. Заходимо в конфіг GRUB, / etc / default / grub, і замінюємо рядок

GRUB_CMDLINE_LINUX_DEFAULT = "quiet splash"

на

GRUB_CMDLINE_LINUX_DEFAULT = "elevator = noop"

І ще один викрутас з GRUB: я відключив затримку при виборі ядра при включенні системи, щоб скоротити час включення нетбука. Редагуємо файл /boot/grub/grub.cfg і параметр

set timeout = 5

Робимо рівним "0". Так само я включив автоматичний вхід в систему. Одним словом, система з моменту проходу POST, вантажиться 5-7 секунд, вимикається всього за 4 секунди.

5) Стежимо за інтенсивністю читання / запису з диска. У цьому мені допомогла чудова утиліта - iotop. Встановлюємо її:

aptitude install iotop

І запускаємо командою iotop від root. Утиліта виглядає точно так само, як і звичайний top, однак, виводить інформацію про процеси запису / читання з диска.

Ось в принципі і все, що я поки накопав про SSD-диски під Linux. Так само в мережі ходило багато інформації про відключення журнал файлової системи. Якщо це зробити, то можна добре скоротити кількість циклів запису на диск. Однак, я вважаю, що це трохи ризиковано: по-перше, при неправильному відключенні журналирования можна втратити TRIM, по-друге - при відключенні харчування, можна втратити важливі дані.