btrfs - andyceo/documentation GitHub Wiki
sda1 sda2 sd.. sdn <-- block devices (aka "Devices" in BTRFS terms)
| | | |
+--logical address space--+
| | | |
+--metadata and extents---+
| | | |
@root @usr @home @var <-- subvolumes (root elements of filesystem, entry points)
| | | |
+----files and folders----+
В BTRFS нет томов, аналогичных томам в LVM. Есть subvolume
. Это не блочное устройство и не может трактоваться так. Субвольюм гораздо ближе к понятию директория, чем к LVM-тому.
Имя субвольюма может быть произвольным и не обязано начинаться на @
. Это просто соглашение, чтобы отличать папки от субвольюмов. Субвольюм с именен @
и subvolume id = 0
является истинным корневым субвольюмом, не показывается при использовании команды btrfs subvolume list
. Субвольюмы должны начинаться с @
, чтобы использовать timeshift
.
-
показать список всех субвольюмов:
btrfs subvolume list /path/to/any/subvolume
. Ключ-d
покажет также субвольюмы, которые были удалены пользователем и на текущий момент находятся в процессе удаления с диска. -
создать субвольюм:
btrfs subvolume create /mnt/subvolume_name
. По умолчанию, владелец субвольюма будетroot
. Можно сменить владельца, используяchown
-
удалить субвольюм:
btrfs subvolume delete /mnt/subvolume_name
. Также субвольюм можно удалить командойrm
.-
удалить все subvolumes в папке
/var/lib/docker/btrfs
(не повторять на рабочей системе!):sudo btrfs subvolume list /var/lib/docker/btrfs/subvolumes sudo ls /var/lib/docker/btrfs/subvolumes | xargs -i sudo btrfs subvolume delete /var/lib/docker/btrfs/subvolumes/'{}'
-
-
посмотреть свойства субвольюма:
btrfs subvolume show /mnt/subvolume_name
-
вывести субвольюм, который будет монтироваться по умолчанию, если в параметрах монтирования не указан субвольюм:
btrfs subvolume get-default /path/to/any/subvolume
-
установить субвольюм, монтируемый по умолчанию:
btrfs subvolume set-default 258 /path/to/any/subvolume
Субвольюм можно скопировать командой cp
, но в результате получится просто новая директория. Более эффективный способ копирования (или бекапа субвольюмов) - это снапшоты. Снапшот - это такой же субвольюм, у которого установлены поля Parent UUID
и Received UUID
- записи о том, от какого субвольюма был произведен снапшот. У обычного субвольюма эти поля тоже есть, только пустые.
-
создать снапшот:
btrfs subvolume snapshot /path/to/subvol /path/to/snapshot
-
создать снапшот "только для чтения":
btrfs subvolume snapshot -r /path/to/subvol /path/to/snapshot
. В этом случае снапшот нельзя будет изменять, файлы гарантировано останутся в том состоянии, в котором они пребывали на момент создания снапшота. Операция создания снапшота нерекурсивна: вместо вложенных сабвольюмов в снапшоте будут созданы пустые директории. -
установить/сбросить флаг "только для чтения" (работает для любых сабвольюмов, не только для снапшотов):
btrfs property get /path/to/subvol ro btrfs property set /path/to/subvol ro true
-
сравнить два субвольюма (они должны быть "только для чтения"):
btrfs send --no-data -p SHAPSHOT_OLD SHAPSHOT_NEW | btrfs receive --dump | grep ^update_extent
Также, интересное решение находится здесь: https://github.com/sysnux/btrfs-snapshots-diff
mkfs.btrfs /dev/sdc -L single_drive
-L
задает метку файловой системе (необязательно)
btrfs filesystem resize max /
Сама по себе файловая система BTRFS предоставляет возможность дедупликации данных, но делается это сторонними утилитами.
- bees: утилита для поблочной дедупликации
- to be continued
@todo текст про дедупликацию ниже - перепроверить, т.к. он был написан давно.
Для того чтобы воспользоваться функцией дедупликации на BTRFS, нужно воспользоваться утилитой bedup
, которая, в свою очередь, находится в пакете burp
. Поэтому сначала установим burp
:
sudo aptitude install burp
Теперь можно запустить bedup
:
sudo bedup -n /var
, где флаг -n
отключает чтение файла конфигурации /etc/burp/burp.conf
, который мы после установки burp
не настраивали, и задает примонтированную файловую систему для дедупликации, в данном случае, /var
. Указывать надо именно точку монтирования, а не устройство.
Полезные ссылки:
- btrfs | Русскоязычная документация по Ubuntu
- How do I recover a BTRFS partition that will not mount?
Просмотреть текущий статус сжатия папки:
sudo btrfs property get /path/to/directory compression
Отключить сжатие для данной папки, действует только на новые файлы/папки внутри переданной директории:
sudo btrfs property set /path/to/directory compression none
Часто встречается ошибка BTRFS: could not find root 8
(Ubuntu 16.04). Можно попробовать такое решение:
btrfs quota enable /
reboot
Источник. Также можно попереходить по ссылкам на этой странице.
-
compsize
: пример использования:sudo compsize -x /
- показывает истинный размер, занятый данными, с учетом сжатия и дедупликации. См. справку. -
btdu
: какncdu
, только для BTRFS. (В Arch Linux только в AUR)