Конфигуриране на TRIM за SSD съхранение на Linux Server

Оферта от 8host.com

съхранение

Дългосрочното използване на SSD хранилище (или SSD устройство) води до намаляване на неговата производителност. За да може такова хранилище да продължи по-дълго, работата му трябва да бъде внимателно обмислена. Командата TRIM казва на SSD кои блокове данни вече не се използват. Това позволява на вътрешната система на SSD да изравнява износването на устройството и да го подготвя за по-нататъшни операции на запис. TRIM може да окаже значително влияние върху производителността и издръжливостта на устройството.

В Linux можете да конфигурирате TRIM да работи непрекъснато, но това натоварване може да повлияе отрицателно на производителността. Съществува и по-мека алтернатива, периодично TRIM. В този случай устройството ще получи всички предимства на екипа, без да нарушава производителността.

Това ръководство ще ви помогне да конфигурирате TRIM да се изпълнява периодично на различни дистрибуции на Linux.

Как SSD съхраняват данни?

За да разберете по-добре какви проблеми отстранява TRIM, трябва да се запознаете с характеристиките на съхранението на данни на SSD.

Ограничаване на цикли на пренаписване

SSD устройствата могат да записват данни на страница, но те изтриват данни само на ниво блок. Освен това данните се записват на страници само след нулиране: тоест не е възможно директно презаписване на съществуващи данни.

За да промени данните, SSD трябва да прочете старата версия, да я редактира в паметта и след това да запише актуализираните данни на нова - нулирана - страница. След това устройството актуализира вътрешната таблица и задава новото местоположение на данните. Предишното местоположение на данните остарява - вече не се използва, но все още не е нулирано.

Възстановяване на остарели страници

За да възстановят остарелите страници, вътрешните процеси за събиране на боклук на SSD трябва да прочетат всички валидни страници от блока и да ги запишат в нов блок. След това вътрешната таблица се актуализира отново. Старият блок, който понастоящем не съдържа никакви уникални и заявени данни, може да бъде нулиран и използван за по-нататъшен запис.

Как работи TRIM?

SSD процесите за събиране на боклук са отговорни за премахването на блокове и изравняването на износването на устройството. Файловите системи обаче са склонни да изтриват данни просто като маркират пространството, което заемат като място за запис. Всъщност те не изтриват данни от основното хранилище, а просто ви позволяват да презапишете предварително заета област от паметта.

Това означава, че SSD обикновено не знае, че страницата вече не е необходима, докато файловата система използва това логическо местоположение за запис на нови данни. Устройството не може да извършва събиране на боклук, защото просто не е било информирано за изтриването на данни, то знае само за него, когато заетото преди това пространство се използва за записване на други данни.

Командата TRIM уведомява SSD устройството за блокове с данни, които вече не се съдържат във файловата система. Това позволява на устройството да извършва своевременно събиране на боклука и да нулира страниците за по-късна употреба. SSD може да почиства остарелите страници и да поддържа себе си в изправност.

Както бе споменато по-рано, стартирането на TRIM след всяка операция за изтриване на данни може да повлияе отрицателно на производителността на устройството. Затова се препоръчва да планирате стартирането на командата TRIM, което ще му позволи да предава обща информация за всички ненужни страници на SSD устройството.

Деактивирайте непрекъснатото изпълнение на TRIM

Ако вече сте конфигурирали командата TRIM да работи непрекъснато на монтираното устройство, деактивирайте командата, за да я конфигурирате да се изпълнява периодично.

Непрекъснатото изпълнение на команди е активирано с помощта на опцията за отхвърляне при монтиране на устройство или дял.

Намерете текущата файлова система, монтирана с опцията за изхвърляне.

findmnt -O изхвърляне
ЦЕЛЕВИ ОПЦИИ ЗА ИЗТОЧНИЦИ
/ mnt/data/dev/sda1 ext4 rw, relatime, отхвърляне, данни = подредени
/ mnt/data2/dev/sdb1 ext4 rw, relatime, отхвърляне, данни = наредени

Повторно инсталирайте тези файлови системи, като премахнете опцията за изхвърляне. За да направите това, използвайте командата за монтиране и опцията -o remount, nodiscard:

sudo mount -o remount, nodiscard/mnt/data
sudo mount -o remount, nodiscard/mnt/data2

Стартирайте findmnt отново, той вече не трябва да връща изход:

findmnt -O изхвърляне

sudo nano/etc/fstab

Намерете опцията за изхвърляне в него и го премахнете:

. . .
#/dev/sda1/mnt/data ext4 по подразбиране, nofail, отхвърляне 0 0
/ dev/sda1/mnt/data ext4 по подразбиране, nofail 0 0
#/dev/sdb1/mnt/data2 ext4 по подразбиране, nofail, отхвърляне 0 0
/ dev/sdb1/mnt/data2 ext4 по подразбиране, nofail 0 0

Запазете и затворете файла. Сега опцията за отхвърляне няма да се използва при повторно монтиране на файловата система.

Конфигуриране на TRIM на systemd дистрибуции

Този раздел ви показва как да конфигурирате TRIM да се изпълнява периодично в дистрибуции, които използват systemd init системата.

Ubuntu 16.04

Разпространението на Ubuntu 16.04 предоставя скрипт, който се изпълнява седмично с помощта на cron.

Забележка: Стратегията за конфигуриране на TRIM в Ubuntu 16.04 е системно независима и различна от другите дистрибуции от този тип.

cat /etc/cron.weekly/fstrim
#!/bin/sh
# изрежете всички монтирани файлови системи, които го поддържат
/ sbin/fstrim --все || вярно

Както можете да видите, скриптът изисква версия на fstrim с флага –all. Много версии на fstrim, доставени в ранните версии на Ubuntu, не поддържат този флаг.

Други systemd дистрибуции

За други дистрибуции, базирани на systemd, поддръжката на TRIM е включена във файла fstrim.timer, който изпълнява TRIM операции на всички налични монтирани устройства веднъж седмично. Той също така използва опцията fstrim -all.

По време на писането на тези дистрибуции включват:

В CentOS 7, Fedora 23, Fedora 24 и CoreOS единиците fstrim.service и fstrim.timer са налични по подразбиране. За да конфигурирате седмичното TRIM да работи на всички монтирани устройства, активирайте .timer единицата:

sudo systemctl активира fstrim.timer

В Debian 8 единиците fstrim.service и fstrim.timer са налични във файловата система, но не се зареждат в systemd по подразбиране. Първо, просто копирайте тези файлове:

sudo cp /usr/share/doc/util-linux/examples/fstrim.service/etc/systemd/system
sudo cp /usr/share/doc/util-linux/examples/fstrim.timer/etc/systemd/system

След това можете да активирате тази единица по същия начин, както в други дистрибуции.

sudo systemctl активира fstrim.timer

Командата TRIM ще се изпълнява на всички налични устройства веднъж седмично.

Конфигуриране на TRIM на други дистрибуции

Повечето дистрибуции, които използват различна init система от Systemd, също се доставят с fstrim без флага -all. Това прави TRIM автоматичното стартиране до известна степен трудно.

Важно! Използването на TRIM на устройства, които не поддържат тази команда или я изпълняват неправилно, е много опасно и може да доведе до загуба на данни. Флагът -all може да осигури безопасно изпълнение на командата, но не се опитвайте ръчно да определите дали картографираните устройства поддържат тази операция правилно.

В Ubuntu 14.04 има кратък скрипт, наречен fstrim-all, който се изпълнява седмично от демона cron. Този скрипт обаче не винаги правилно интерпретира поддръжката на TRIM на картографирани устройства.

Има заобиколно решение за тази и други дистрибуции с поддръжка на fstrim без флага --all: трябва да компилирате статично свързана версия на fstrim с тази поддръжка на флаг. Тази версия може да бъде инсталирана и извикана изрично с помощта на cron.

Тази опция работи най-добре в:

  • Ubuntu 14.04
  • Ubuntu 12.04
  • Debian 7
  • CentOS 6

В Ubuntu 14.04 първо трябва да деактивирате скрипта fstrim-all, тъй като той не може да открие правилно състоянието.

sudo chmod a-x /etc/cron.weekly/fstrim
sudo mv /etc/cron.weekly/fstrim /etc/cron.weekly/fstrim.bak

Инсталиране на инструменти за компилация

Инсталирайте Build Toolkit.

На Ubuntu и Debian:
sudo apt-get update
sudo apt-get install build-essential
На CentOS:
sudo yum groupinstall 'Инструменти за разработка'

Изтегляне и извличане на изходния код

Помощната програма fstrim се доставя с инструментариума util-linux. Изходният код можете да намерите тук.

Изберете най-новата версия на пакета. По време на писането това е v2.28.

Отворете директорията и намерете най-новия архив (той трябва да започва с util-linux- и да завършва с разширението .tar.gz). В момента най-подходящ е util-linux-2.28.1.tar.gz. Щракнете с десния бутон и копирайте връзката в клипборда.

Върнете се на сървъра и отворете директорията/tmp. Изтеглете необходимия файл с помощта на помощната програма curl или wget.

cd/tmp
curl -LO https://www.kernel.org/pub/linux/utils/util-linux/v2.28/util-linux-2.28.1.tar.gz

tar xzvf util-linux *

Изходният код вече може да бъде компилиран.

Настройка и компилиране на изходния код

Отворете извлечената директория:

Сега трябва да конфигурирате софтуера. Създайте двоичен файл за fstrim.

За да направите това, трябва да активирате статични връзки и да деактивирате споделените библиотеки. Въведете:

./ configure --enable-static --disable-shared

За да компилирате помощната програма fstrim, въведете:

Копирайте двоичния файл в директория, която не е изброена в PATH. Този файл ще бъде извикан само от демона cron, така че трябва да се уверите, че той не противоречи на стандартната помощна програма fstrim.

Създайте директория/cron-bin и преместете двоичния файл в нея:

sudo mkdir/cron-bin
sudo cp/tmp/util-linux */fstrim/cron-bin

Вече имате достъп до персонализирана версия на помощната програма fstrim.

Настройка на Cron

Сега трябва да създадете нов скрипт, който ще се изпълнява от демона cron.

Това се прави по същия начин, както в Ubuntu 16.04 (трябва да посочите и местоположението на двоичния файл).

sudo nano /etc/cron.weekly/fstrim

Поставете следните редове в него. Това ще даде възможност за поддръжка на флага -all:

#!/bin/sh
# изрежете всички монтирани файлови системи, които го поддържат
/ cron-bin/fstrim --all || вярно

Запазете и затворете файла.

Направете скрипта изпълним.

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

Демоните cron и anacron ще могат да използват този скрипт за извършване на TRIM проверка.

Заключение

Linux сървърът вече изпълнява TRIM веднъж седмично. TRIM команда повишава производителността и намалява износването на SSD устройствата.

Ще работи ли изрязването, ако пишете постоянно в един и същ файл, в рамките на неговия размер? тези. по същество на едно и също място?
Или има "дупка" в ssd с течение на времето? )

PS: Аз съм за поставяне на файлове с бази данни на ssd дискове.