Подниму тему и оставлю полезность от себя - сгруппировал с просторов Интернета.
А именно - как легко сохранять логи fstrim в комбинации fstrim + cron . syslog-ng не понадобится 👌
Опишу поподробнее, т.к. самому надо упорядочить информацию в голове 🧠
Рецепт:
1. Делать всё, как указывает ув. redarmy в первом посте.
Не забываем про
mount | grep sd
чтобы посмотреть точки монтирования, как упоминал ув. vai73
Для раздела EXT4 команда trim у меня срабатывает. Оборудование: NVMe SSD в боксе от JEYI (контроллер Realtek RTL9210B), подключенный к USB 3.0 на роутере. Но, похоже, до сих пор в драйвер NTFS, вшитый в Keenetic (прошивка 4.2.6.3), не добавили возможность trim - у меня не срабатывает.
Использую свой SSD, как своеобразный NAS: под торренты, бэкапы и файлообмен. Задача - запускать команду trim раз в месяц для тех разделов, где это применимо. Почти год разделы NTFS этой команды не получали - критических изменений в работе SSD не заметил. Подключил SSD-бокс через USB к Windows и запустил "оптимизацию". Ещё годик может поработать 😁
2. Далее для периодического запуска fstrim нужен cron - инструкция по его установке от ув. gvan в первом посте здесь .
Установку и настройку logrotate в той инструкции можно игнорировать.
Настраиваем основной файл /opt/etc/crontab - отключаем лишние строки, ставя перед ними # . Перезапускаем cron.
2.1. Если в веб-консоли Keenetic, в логе "Диагностика > Показать журнал" появляются строки
(*system*) BAD FILE MODE (/opt/etc/crontab)
то помогает следующее:
chmod 0600 /opt/etc/crontab
/opt/etc/init.d/S10cron restart
Пока не особо мониторил, но кажется, что иногда эти права доступа всё равно могут слетать 🤔
3. Добавляем для cron задачу (файл со скриптом) в нужный каталог (например, /opt/etc/cron.monthly ). Я назвал trim .
И вот тут кроется основная хитрость. Первоначально взял скрипт из поста ув. DzmitryK , но модифицировал его:
if [ $(cat /sys/block/sda/device/scsi_disk/0\:0\:0\:0/provisioning_mode) != unmap ]; then echo -n unmap > /sys/block/sda/device/scsi_disk/0\:0\:0\:0/provisioning_mode; fi; date +"%F %H:%M" >> /ПУТЬ/ДО/ЛОГА/ЛОГ.txt && fstrim -v /tmp/mnt/ПУТЬ_МОНТИРОВАНИЯ >> /ПУТЬ/ДО/ЛОГА/ЛОГ.txt
По-прежнему важно писать скрипт в одну строку - без переносов.
3.1. Важно сделать файл со скриптом исполняемым. С командной строки, для примера:
chmod 755 /opt/etc/cron.monthly/trim
ИЛИ
chmod +x /opt/etc/cron.monthly/trim
3.2. Скрипт у меня выглядит так:
if [ $(cat /sys/block/sda/device/scsi_disk/0\:0\:0\:0/provisioning_mode) != unmap ]; then echo -n unmap > /sys/block/sda/device/scsi_disk/0\:0\:0\:0/provisioning_mode; fi; date +"%F %H:%M" >> /opt/var/log/fstrim.txt && fstrim -v /tmp/mnt/853b1204-9fe9-284a-ad12-0d439adb0bd1 >> /opt/var/log/fstrim.txt
Из скрипта видно, что логи будут писаться в файл /opt/var/log/fstrim.txt - его создал заранее.
Из нововведений. Код:
date +"%F %H:%M" >> /opt/var/log/fstrim.txt
отвечает за вставку даты и времени отдельной строкой. Формат здесь такой: 2025-06-13 23:25 - можно менять.
Далее сама утилита fstrim при выполнении дописывает следующей строкой в этот же лог результат от себя:
fstrim -v /tmp/mnt/853b1204-9fe9-284a-ad12-0d439adb0bd1 >> /opt/var/log/fstrim.txt
Результат - вполне себе лаконичный лог, когда именно, и с каким результатом отрабатывал fstrim: