Як продовжити життя SD-карти чи SSD-диску

  у розділі Технічні теми 

SD-карти

Маленькі, швидкі, без рухомих механічних частин — електронні носії пам'яті здаються ідеальними пристроями.

Для деяких мікрокомп'ютерів, як Raspberry Pi це основний спосіб збереження даних.

На жаль, через особливості роботи електронних чипів що зберігають дані, з часом дані можуть втрачатися. Тим швидше, чим частіше відбувається запис даних.

Чому SD-карти "помирають"?

Кожна частинка інформації зберігається у своїй частині чипа (комірці) — як електричний заряд певної величини. Щоразу, при зміні інформації в комірці її властивості утримувати цей заряд трохи погіршуються. І може настати такий момент коли комірка не може довго тримати правильний заряд, або на комірку надто сильно діють заряди сусідніх комірок, через що дані спотворюються безповоротно.

SD-карти, як і SSD-диски, використовують кмітливі алгоритми автокорекції правильності записаних даних, мають автодіагностику що, наприклад, використовує надлишкову кількість комірок, щоб зайняти місце таких що здаються ненадійними. Але, ніякі алгоритми не можуть врятувати електронну пам'ять від неминучого виходу з ладу. Це лише питання часу.

Для деяких типів сучасних SSD-дисків це не є такою сильною проблемою, бо їх час до настання відмови може перевищити час протягом якого цей диск буде використовуватися. Але, для більшості SD-карт чи SSD-дисків старих технологій проблема "старіння" дуже актуальна.

Приходимо до очевидного висновку: чим менше буде записів на карту, тим довше вона проживе.

Бережіть карти змолоду

Операційна система постійно читає і пише дані на диск. І повністю позбутися цього — неможливо. Проте, можна збільшити час життя карти використовуючи прості поради що наведено нижче.

Зменшення надлишкових даних

Немає потреби зберігати дані в яких немає потреби. Вимкніть непотрібні логи програм, або зменште їх рівень (щоб зберігалася лише критична інформація).

Зменшення службової інформації

Інформації на диску зберігається як спеціальна файлова система — набір даних та їх властивостей. Крім самих даних що містяться на диску файлова система зберігає інформацію про час створення даних, час їх зміни, права доступу до об'єкта тощо.

noatime

Якщо для файлової системи вжити атрибут noatime — при читанні файлу не буде зберігатися інформація про час останнього звернення. Я згадував про це у статті про встановлення Debian на нетбуці.

Цей параметр можна вказати під час встановлення системи та розбивання дисків, або пізніше, у файлі /etc/fstab:

klp@klipper:/$ cat /etc/fstab
# / was on /dev/sdd1 during installation
UUID=270e17a9-5c82-4677-9bed-a1da9cec33df /               ext4    noatime,errors=remount-ro 0       1
# /boot was on /dev/sda1 during installation
UUID=d4f01822-0954-42c9-8887-fbac3151884b /boot           ext4    noatime         0       2

commit

Файлові системи Ext3, Ext4 вміють синхронізувати зміну даних з даними на диску з затримкою, наприклад раз на 30 хв. Всі зміни даних, скільки б разів вони не відбулися, остаточно запишуться на диск лише 1 раз, через 30 хв.

Збереже записи, але не збереже дані які ще не записалися якщо система аварійно вимкнулася. Тому треба використовувати дуже обережно, на комп'ютерах з автономним живленням.

Приклад fstab:

PARTUUID=bbf24818-02 / ext4 defaults,noatime,commit=1800 0 1

swap (ні)

Розділ "підкачки", або файл підкачки. Використовується як резервне місце для оперативної пам'яті. SD-карти повільні та не помічні для підкачки даних. Вимкніть swap, якщо він був.

sudo swapoff --all

Якщо для swap використовується окремий розділ — закоментуйте його в /etc/fstab.

log2ram

Це вишенька-черешенька на верхівці оптимізації роботи SD-карт.

Розумним людям прийшла ідея — а що, якщо частину даних тримати не на диску (карті) а у швидкій, надійній, довговічній оперативній пам'яті (RAM)?

Єдина проблема — дані витираються при вимкненні комп'ютера, тому час від часу їх таки треба зберігати на диск. Виникли спеціальні файлові системи, оптимізовані для роботи в RAM. А ентузіасти створили готові скрипти для автоматизації цих процесів.

log2ram одна з таких систем. Триматиме вибрані директорії в оперативній пам'яті й зміна цих даних не використовуватиме ресурси запису диска (значно рідше).

Встановлення просте:

echo "deb [signed-by=/usr/share/keyrings/azlux-archive-keyring.gpg] http://packages.azlux.fr/debian/ bullseye main" | sudo tee /etc/apt/sources.list.d/azlux.list
sudo wget -O /usr/share/keyrings/azlux-archive-keyring.gpg  https://azlux.fr/repo.gpg
sudo apt update
sudo apt install log2ram

Конфігурація зберігається у файлі /etc/log2ram.conf:

klp@klipper:/$ cat /etc/log2ram.conf | grep -v "#"
SIZE=128M
MAIL=false
PATH_DISK="/var/log"
ZL2R=false
COMP_ALG=lz4
LOG_DISK_SIZE=100M

Після перевантаження видно що частина директорій живе в оперативній пам'яті:

klp@klipper:/$ df -h
Filesystem      Size  Used Avail Use% Mounted on
log2ram         128M   51M   78M  40% /var/log

Фізична копія даних зберігається в /var/hdd.log і оновлюється з RAM раз на добу.

Якщо потрібно частіше — змініть, виконавши команду systemctl edit log2ram-daily.timer:

[Timer]
OnCalendar=
OnCalendar=Mon *-*-* 23:55:00

У випадку проблем — читайте логи в /var/log/log2ram.log.

journalctl в Debian

Наприклад в мене розмір поточного /var/log був більшим ніж розмір RAM який я дозволив використати. Виявилося що директорія /var/log/journal/ займала купу місця. Я зменшив її командою

sudo journalctl --vacuum-size=10M

Також, можна видалити всі системні логи старіші за N днів:

sudo journalctl --vacuum-time=10d

Щоб зберегти ці зміни на постійно відредагуйте файл /etc/systemd/journald.conf, щоб він містив:

SystemMaxUse=10M

  1. Титульна ілюстрація від Aliaksei Baturytski 


Коментарі