Команда Linux btrfs
Btrfs (B-tree File System) — это продвинутая файловая система Linux, разработанная Oracle и впервые выпущенная в 2007 году. Её цель — решить ограничения традиционных файловых систем, обеспечивая лучшую масштабируемость, надёжность и возможности управления.
Основные возможности
- Копирование при записи (CoW): Все операции записи не перезаписывают существующие данные, а вместо этого создают новые копии
- Функциональность снимков: Позволяет быстро создавать мгновенные снимки файловой системы, почти не занимая дополнительного пространства
- Управление подтомами: Поддерживает разделение файловой системы на несколько независимых подтомов
- Контрольные суммы данных: Автоматически обнаруживает повреждение данных
- Прозрачное сжатие: Поддерживает сжатие и распаковку данных файлов в реальном времени
- Поддержка RAID: Встроенная поддержка нескольких уровней RAID
Базовый синтаксис команд btrfs
btrfs [选项] [子命令选项] [参数]
Общие параметры
| Опция | Описание |
|---|---|
-v |
Подробный режим вывода |
--help |
Показать справочную информацию |
--version |
Показать информацию о версии |
Объяснение основных подкоманд
Создание файловой системы и управление ею
Создание файловой системы btrfs
Пример
sudo mkfs.btrfs /dev/sdX
# Создать файловую систему с меткой
sudo mkfs.btrfs -L mylabel /dev/sdX
# Создание RAID1 с использованием нескольких устройств
sudo mkfs.btrfs -m raid1 -d raid1 /dev/sdX /dev/sdY
Монтирование файловой системы btrfs
Пример
sudo mount /dev/sdX /mnt/btrfs
# Включение сжатия (рекомендуется lzo или zstd)
sudo mount -o compress=lzo /dev/sdX /mnt/btrfs
# Показать параметры монтирования
mount | grep btrfs
Операции с подтомами
Создание подтома
Пример
sudo btrfs subvolume create /mnt/btrfs/subvol1
# Список подтомов
sudo btrfs subvolume list /mnt/btrfs
# Удалить подтом
sudo btrfs subvolume delete /mnt/btrfs/subvol1
Управление снимками
Пример
sudo btrfs subvolume snapshot /mnt/btrfs /mnt/btrfs/snapshot_$(date +%Y%m%d)
# Снимок только для чтения
sudo btrfs subvolume snapshot -r /mnt/btrfs /mnt/btrfs/readonly_snap
# Удалить снимок
sudo btrfs subvolume delete /mnt/btrfs/snapshot_20230101
Управление пространством
Просмотр использования файловой системы
Пример
sudo btrfs filesystem usage /mnt/btrfs
# Показать использование диска
sudo btrfs filesystem df /mnt/btrfs
# Балансировка распределения данных (используйте с осторожностью, может занять много времени)
sudo btrfs balance start /mnt/btrfs
Изменение размера файловой системы
Пример
sudo btrfs filesystem resize +10G /mnt/btrfs
# Уменьшение файловой системы
sudo btrfs filesystem resize -5G /mnt/btrfs
Проверка целостности данных
Проверка файловой системы
Пример
sudo btrfs check /dev/sdX
# Попытка восстановления (используйте с осторожностью)
sudo btrfs check --repair /dev/sdX
Очистка и восстановление
Пример
sudo btrfs filesystem defrag /mnt/btrfs
# Проверка и восстановление файловой системы
sudo btrfs scrub start /mnt/btrfs
# Просмотр состояния восстановления
sudo btrfs scrub status /mnt/btrfs
Примеры практического применения
Пример 1: Настройка домашнего каталога btrfs со сжатием
Пример
sudo mkfs.btrfs -L home /dev/sdX
# Монтирование и включение сжатия
sudo mount -o compress=zstd /dev/sdX /mnt/newhome
# Копировать существующие данные
sudo rsync -avx /home/ /mnt/newhome/
# Обновить fstab для включения автоматического монтирования
echo "UUID=$(blkid -s UUID -o value /dev/sdX) /home btrfs defaults,compress=zstd 0 2" | sudo tee -a /etc/fstab
# Перемонтировать
sudo umount /mnt/newhome
sudo mount -a
Пример 2: Регулярные снимки и очистка
Пример
# Создать ежедневные снимки
SNAP_DIR="/mnt/btrfs/.snapshots"
mkdir -p "$SNAP_DIR"
sudo btrfs subvolume snapshot -r /mnt/btrfs "$SNAP_DIR/$(date +%Y%m%d)"
# Хранить снимки за последние 7 дней
find "$SNAP_DIR" -mindepth 1 -maxdepth 1 -type d -name "2*" | sort -r | tail -n +8 | xargs -r sudo btrfs subvolume delete
Решение распространённых проблем
Проблема 1: Недостаточно места, но df показывает доступное пространство
Пример
sudo btrfs subvolume list -s /mnt/btrfs
# Очистка ненужных снимков
sudo btrfs subvolume delete /mnt/btrfs/old_snapshot
Проблема 2: Операция балансировки зависла
Пример
sudo btrfs balance status /mnt/btrfs
# Приостановить операцию балансировки
sudo btrfs balance pause /mnt/btrfs
# Возобновить операцию балансировки
sudo btrfs balance resume /mnt/btrfs
Проблема 3: Сбой монтирования
Пример
sudo btrfs check /dev/sdX
# Попытаться восстановить
sudo btrfs rescue zero-log /dev/sdX
sudo mount /dev/sdX /mnt/btrfs
Рекомендации по лучшим практикам
-
Включите сжатие: особенно для сжимаемых данных, таких как текст и журналы
# 推荐使用 zstd 压缩算法 mount -o compress=zstd /dev/sdX /mnt/btrfs
-
Регулярно создавайте снимки: Вручную создавайте снимки перед важными операциями
-
Следите за использованием пространства: отображение информации о пространстве btrfs отличается от традиционных файловых систем
-
Избегайте 100% заполнения: Оставляйте не менее 5-10% свободного пространства
-
Используйте balance с осторожностью: Запускайте только при необходимости, так как это может занять очень много времени
-
Рассмотрите конфигурацию RAID: Используйте RAID1 или RAID10 для важных данных
-
Регулярно выполняйте scrub: Проверяйте целостность данных
# 每月执行一次数据检查 sudo btrfs scrub start /mnt/btrfs
Прочитав эту статью, вы должны были освоить основные операции и методы управления файловой системой btrfs. Мощные возможности btrfs делают её идеальным выбором для современных систем Linux, особенно подходящим для сценариев, требующих расширенных функций хранения.
Другие расширения
Справочник команд Linux