Jump to content

BTRFS/Автоматизация обслуживания: различия между версиями

мНет описания правки
Нет описания правки
Строка 7: Строка 7:
</div>
</div>


Если вы уже знаете, как проверять и обслуживать систему '''BTRFS''' вручную, то следующий логичный шаг — сделать это автоматически.   
Если вы уже знаете, как обслуживать файловую систему '''BTRFS''' вручную, следующий логичный шаг — автоматизировать эти процессы.   
Linux умеет выполнять задания сам, по расписанию, и всё, что нужно — один небольшой скрипт и два конфигурационных файла.
Linux умеет выполнять задачи по расписанию, и с помощью systemd это делается надёжно и прозрачно.


= '''Автоматизация обслуживания''' =
= '''Автоматизация обслуживания''' =


'''Автоматизация''' — это когда система сама:
'''Автоматизация''' позволяет системе самостоятельно:
* проверяет файловую систему (scrub)
* проверять целостность данных (scrub);
* балансирует данные (balance)
* периодически перераспределять пространство (balance);
* очищает свободное место на SSD (fstrim)
* выполнять TRIM для SSD/NVMe (fstrim).


Пользователю больше не нужно помнить о ежемесячном обслуживании — всё выполняется в фоне, без вмешательства.
Пользователю больше не нужно помнить о регулярном обслуживании — всё выполняется в фоновом режиме.


== '''Подготовка скрипта обслуживания''' ==
== '''Подготовка скрипта обслуживания''' ==


Создадим простой скрипт, который выполняет три базовые команды для ухода за BTRFS.
Создадим безопасный скрипт для регулярной проверки BTRFS.
 
Откройте терминал и создайте файл:


<pre>
<pre>
Строка 29: Строка 27:
</pre>
</pre>


Вставьте туда следующий код:
Содержимое файла:


<pre>
<pre>
#!/bin/bash
#!/bin/bash
# Еженедельное обслуживание Btrfs
set -e
btrfs scrub start -Bd /
 
btrfs balance start -dusage=50 -musage=50 /
# Проверка, что корень — BTRFS
fstrim -av
if ! findmnt -n -o FSTYPE / | grep -q btrfs; then
    echo "Корневая файловая система не BTRFS, выход."
    exit 0
fi
 
# Проверка целостности данных
btrfs scrub start /
 
# TRIM (если не используется fstrim.timer)
fstrim -av || true
</pre>
</pre>


Сохраните файл и сделайте его исполняемым:
Сделайте файл исполняемым:


<pre>
<pre>
Строка 45: Строка 52:
</pre>
</pre>


Пояснение:
== '''systemd-сервис для scrub''' ==
* <code>'''#!/bin/bash'''</code> — сообщает системе, что это скрипт Bash.
* <code>'''btrfs scrub start -Bd /'''</code> — проверяет целостность данных.
* <code>'''btrfs balance start -dusage=50 -musage=50 /'''</code> — перераспределяет данные и метаданные.
* <code>'''fstrim -av'''</code> — очищает неиспользуемые блоки SSD (аналог TRIM).


Теперь у нас есть готовый инструмент обслуживания.
Создайте сервис:
 
== '''Создание systemd-сервиса''' ==
 
Чтобы Linux понимал, как запускать наш скрипт, нужно создать сервис.
 
Создайте файл:


<pre>
<pre>
Строка 63: Строка 60:
</pre>
</pre>


Добавьте в него:
Содержимое:


<pre>
<pre>
[Unit]
[Unit]
Description=Еженедельное обслуживание Btrfs
Description=Регулярная проверка BTRFS (scrub)
Documentation=man:btrfs(8)
Documentation=man:btrfs-scrub(8)


[Service]
[Service]
Строка 75: Строка 72:
</pre>
</pre>


Что это значит:
== '''Таймер systemd (еженедельно)''' ==
* <code>'''[Unit]'''</code> — описание задачи, которое видит systemd.
* <code>'''[Service]'''</code> — сам сервис. 
  Тип `oneshot` означает, что команда запускается один раз и завершается.
 
== '''Создание таймера systemd''' ==
 
Теперь создадим "будильник", который будет запускать сервис каждую неделю.
 
Откройте новый файл:


<pre>
<pre>
sudo nano /etc/systemd/system/btrfs-maintain.timer
sudo nano /etc/systemd/system/btrfs-maintain.timer
</pre>
</pre>
Вставьте туда:


<pre>
<pre>
[Unit]
[Unit]
Description=Таймер для еженедельного обслуживания Btrfs
Description=Еженедельный scrub BTRFS


[Timer]
[Timer]
Строка 104: Строка 90:
</pre>
</pre>


Объяснение параметров:
Активация:
* <code>'''OnCalendar=weekly'''</code> — запускать каждую неделю (по умолчанию — по понедельникам).
* <code>'''Persistent=true'''</code> — если компьютер был выключен в момент запуска, задание выполнится при следующем включении.
 
== '''Активация таймера''' ==
 
Включаем наш таймер:


<pre>
<pre>
Строка 116: Строка 96:
</pre>
</pre>


Теперь система будет автоматически запускать обслуживание каждую неделю.
Проверка:
 
Чтобы убедиться, что всё работает, выполните:


<pre>
<pre>
Строка 124: Строка 102:
</pre>
</pre>


Вы увидите строчку примерно такую:
== '''Балансировка (раз в месяц)''' ==
 
Балансировка — ресурсоёмкая операция, поэтому **не должна выполняться часто**.
 
Создайте отдельный сервис:


<pre>
<pre>
btrfs-maintain.timer  loaded active waiting  Mon 2025-11-03 00:00:00 MSK  Mon 2025-10-27 00:00:00 MSK
sudo nano /etc/systemd/system/btrfs-balance.service
</pre>
</pre>


Это значит, что всё настроено, и таймер запланирован.
<pre>
[Unit]
Description=Месячная балансировка BTRFS
Documentation=man:btrfs-balance(8)


== '''Проверка работы вручную''' ==
[Service]
Type=oneshot
ExecStart=/usr/bin/btrfs balance start -dusage=50 -musage=50 /
</pre>


Вы можете запустить обслуживание вручную, не дожидаясь таймера:
Таймер:


<pre>
<pre>
sudo systemctl start btrfs-maintain.service
sudo nano /etc/systemd/system/btrfs-balance.timer
</pre>
</pre>


После завершения команд можно просмотреть журнал:
<pre>
[Unit]
Description=Месячная балансировка BTRFS
 
[Timer]
OnCalendar=monthly
Persistent=true


<pre>
[Install]
sudo journalctl -u btrfs-maintain.service
WantedBy=timers.target
</pre>
</pre>


== '''Отключение или изменение расписания''' ==
Активация:
 
Если вы хотите изменить расписание, откройте файл `/etc/systemd/system/btrfs-maintain.timer` и замените строку:


<pre>
<pre>
OnCalendar=weekly
sudo systemctl enable --now btrfs-balance.timer
</pre>
</pre>


на, например:
== '''Проверка журналов''' ==
 
* <code>'''OnCalendar=daily'''</code> — ежедневно; 
* <code>'''OnCalendar=monthly'''</code> — раз в месяц; 
* <code>'''OnCalendar=Sun 03:00'''</code> — каждое воскресенье в 3 утра.
 
После редактирования перезапустите таймер:


<pre>
<pre>
sudo systemctl daemon-reload
sudo journalctl -u btrfs-maintain.service
sudo systemctl restart btrfs-maintain.timer
sudo journalctl -u btrfs-balance.service
</pre>
</pre>


== '''Альтернатива: cron (для старых систем''' ==
== '''Альтернатива: cron (для старых систем)''' ==


Если по какой-то причине systemd-таймеры недоступны, можно использовать старый способ — cron.
Если systemd недоступен, можно использовать cron:
 
Создайте задачу:


<pre>
<pre>
sudo crontab -e
sudo crontab -e
</pre>
</pre>
Добавьте строку:


<pre>
<pre>
@weekly /usr/local/bin/btrfs-maintain.sh
@weekly /usr/local/bin/btrfs-maintain.sh
@monthly /usr/bin/btrfs balance start -dusage=50 -musage=50 /
</pre>
</pre>


Это даст тот же эффект, но без systemd.
== '''Практические рекомендации''' ==
 
== '''Проверка результата''' ==
 
Через неделю можно посмотреть, как прошла последняя операция scrub:
 
<pre>
sudo btrfs scrub status /
</pre>


Если видите "no errors found", всё отлично — автоматическое обслуживание работает.
* Scrub — раз в неделю или месяц.
* Balance — '''не чаще одного раза в 1–2 месяца'''.
* Если включён `fstrim.timer`, запуск `fstrim` из скрипта не требуется.
* Не запускайте баланс без параметров `dusage/musage`.


== '''Заключение''' ==
== '''Заключение''' ==


Теперь ваша система '''BTRFS''' полностью автономна: она сама следит за своим здоровьем, проверяет и очищает диск, не требуя вашего участия. 
С правильно настроенной автоматизацией '''BTRFS''' практически не требует ручного вмешательства. 
Такое решение особенно полезно для ноутбуков и рабочих станций, которые часто остаются включёнными на ночь.
Система сама следит за целостностью данных, эффективно использует пространство и остаётся стабильной даже при длительной работе.


{| style="width:100%; margin-top:1em; font-size:95%;"
{| style="width:100%; margin-top:1em; font-size:95%;"
| style="text-align:left;" | [[BTRFS/Обслуживание|← Назад: Обслуживание]]
| style="text-align:left;" | [[BTRFS/Обслуживание|← Назад: Обслуживание]]
|}
|}

Версия от 16:47, 11 января 2026

← Назад: Обслуживание

⚠️ Эта статья находится в разработке. Содержание может измениться в ближайшее время.

Если вы уже знаете, как обслуживать файловую систему BTRFS вручную, следующий логичный шаг — автоматизировать эти процессы. Linux умеет выполнять задачи по расписанию, и с помощью systemd это делается надёжно и прозрачно.

Автоматизация обслуживания

Автоматизация позволяет системе самостоятельно:

  • проверять целостность данных (scrub);
  • периодически перераспределять пространство (balance);
  • выполнять TRIM для SSD/NVMe (fstrim).

Пользователю больше не нужно помнить о регулярном обслуживании — всё выполняется в фоновом режиме.

Подготовка скрипта обслуживания

Создадим безопасный скрипт для регулярной проверки BTRFS.

sudo nano /usr/local/bin/btrfs-maintain.sh

Содержимое файла:

#!/bin/bash
set -e

# Проверка, что корень — BTRFS
if ! findmnt -n -o FSTYPE / | grep -q btrfs; then
    echo "Корневая файловая система не BTRFS, выход."
    exit 0
fi

# Проверка целостности данных
btrfs scrub start /

# TRIM (если не используется fstrim.timer)
fstrim -av || true

Сделайте файл исполняемым:

sudo chmod +x /usr/local/bin/btrfs-maintain.sh

systemd-сервис для scrub

Создайте сервис:

sudo nano /etc/systemd/system/btrfs-maintain.service

Содержимое:

[Unit]
Description=Регулярная проверка BTRFS (scrub)
Documentation=man:btrfs-scrub(8)

[Service]
Type=oneshot
ExecStart=/usr/local/bin/btrfs-maintain.sh

Таймер systemd (еженедельно)

sudo nano /etc/systemd/system/btrfs-maintain.timer
[Unit]
Description=Еженедельный scrub BTRFS

[Timer]
OnCalendar=weekly
Persistent=true

[Install]
WantedBy=timers.target

Активация:

sudo systemctl enable --now btrfs-maintain.timer

Проверка:

systemctl list-timers | grep btrfs

Балансировка (раз в месяц)

Балансировка — ресурсоёмкая операция, поэтому **не должна выполняться часто**.

Создайте отдельный сервис:

sudo nano /etc/systemd/system/btrfs-balance.service
[Unit]
Description=Месячная балансировка BTRFS
Documentation=man:btrfs-balance(8)

[Service]
Type=oneshot
ExecStart=/usr/bin/btrfs balance start -dusage=50 -musage=50 /

Таймер:

sudo nano /etc/systemd/system/btrfs-balance.timer
[Unit]
Description=Месячная балансировка BTRFS

[Timer]
OnCalendar=monthly
Persistent=true

[Install]
WantedBy=timers.target

Активация:

sudo systemctl enable --now btrfs-balance.timer

Проверка журналов

sudo journalctl -u btrfs-maintain.service
sudo journalctl -u btrfs-balance.service

Альтернатива: cron (для старых систем)

Если systemd недоступен, можно использовать cron:

sudo crontab -e
@weekly  /usr/local/bin/btrfs-maintain.sh
@monthly /usr/bin/btrfs balance start -dusage=50 -musage=50 /

Практические рекомендации

  • Scrub — раз в неделю или месяц.
  • Balance — не чаще одного раза в 1–2 месяца.
  • Если включён `fstrim.timer`, запуск `fstrim` из скрипта не требуется.
  • Не запускайте баланс без параметров `dusage/musage`.

Заключение

С правильно настроенной автоматизацией BTRFS практически не требует ручного вмешательства. Система сама следит за целостностью данных, эффективно использует пространство и остаётся стабильной даже при длительной работе.

← Назад: Обслуживание