$ findmnt /
TARGET SOURCE FSTYPE OPTIONS
/ /dev/nvme0n1p5[/@] btrfs rw,noatime,compress=lzo,ssd,space_cache,subvolid=257,subvol=/@
# df неправильно показывает размер btrfs подразделов
$ df -h /
Filesystem Size Used Avail Use% Mounted on
/dev/nvme0n1p5 71G 14G 57G 19% /
$ btrfs filesystem df -h /
Data, single: total=15.01GiB, used=12.42GiB
System, single: total=4.00MiB, used=16.00KiB
Metadata, single: total=1.01GiB, used=772.20MiB
GlobalReserve, single: total=44.47MiB, used=0.00B
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 1 14.5G 0 disk
sdb 8:16 1 14.5G 0 disk
└─sdb1 8:17 1 14.5G 0 part /run/media/sergey/ARCH_201907
nvme0n1 259:0 0 232.9G 0 disk
├─nvme0n1p1 259:1 0 499M 0 part
├─nvme0n1p2 259:2 0 99M 0 part /boot/efi
├─nvme0n1p3 259:3 0 16M 0 part
├─nvme0n1p4 259:4 0 160G 0 part /mnt/c
├─nvme0n1p5 259:5 0 70.3G 0 part /home
└─nvme0n1p6 259:6 0 2G 0 part [SWAP]
$ sudo btrfs sub li -a /
ID 257 gen 3460 top level 5 path <FS_TREE>/@
ID 258 gen 3466 top level 5 path <FS_TREE>/@home
ID 281 gen 3466 top level 5 path <FS_TREE>/@var
$ sudo systemctl restart snapper-timeline.timer
# Через 5 минут после рестарта snapper сделал снапшоты
# Затираем флешку
$ sudo dd if=/dev/zero of=/dev/sdb bs=1M count=512 status=progress && sync
512+0 records in
512+0 records out
536870912 bytes (537 MB, 512 MiB) copied, 31.7763 s, 16.9 MB/s
# Создаем на ней фаловую систему ext4
$ sudo mkfs.btrfs -f -L storage /dev/sda
btrfs-progs v5.1.1
See http://btrfs.wiki.kernel.org for more information.
Label: storage
UUID: 1b4ec9c9-ae69-4c0c-a651-29370a4a9cbf
Node size: 16384
Sector size: 4096
Filesystem size: 14.45GiB
Block group profiles:
Data: single 8.00MiB
Metadata: DUP 256.00MiB
System: DUP 8.00MiB
SSD detected: no
Incompat features: extref, skinny-metadata
Number of devices: 1
Devices:
ID SIZE PATH
1 14.45GiB /dev/sda
$ sudo fdisk /dev/sdb << EOF
g
n
1
w
EOF
$ sudo mkfs.ext4 -L 'ADATA-16GB' /dev/sdb1
# С полными правами на чтение и запись
$ sudo mount -o rw,users,umask=000 /dev/sdb1 /mnt/usb1
$ mkdir /mnt/usb1/backup
$ sudo btrfs send /.snapshots/1/snapshot | gzip > /mnt/usb1/backup/root_`date '+%F'`.gz
$ sudo btrfs send /home/.snapshots/1/snapshot | gzip > /mnt/usb1/backup/home_`date '+%F'`.gz
$ sudo btrfs send /var/.snapshots/1/snapshot | gzip > /mnt/usb1/backup/var_`date '+%F'`.gz
# Проверка
# Извлечем образ
$ zcat /mnt/usb1/backup/root_`date "+%F'`.gz > /tmp/root.img
# Создадим тестовый подраздел
$ sudo btrfs sub create /@backup
# Монтируем его
sudo mkdir /mnt/backup
# Тут следует обратить внимание на собаку!
$ sudo btrfs sub li -a /
ID 257 gen 4382 top level 5 path <FS_TREE>/@
ID 258 gen 4393 top level 5 path <FS_TREE>/@home
ID 281 gen 4393 top level 5 path <FS_TREE>/@var
ID 327 gen 3847 top level 257 path @/.snapshots
ID 328 gen 3847 top level 258 path <FS_TREE>/@home/.snapshots
ID 329 gen 3847 top level 281 path <FS_TREE>/@var/.snapshots
ID 330 gen 3844 top level 328 path <FS_TREE>/@home/.snapshots/1/snapshot
ID 331 gen 3844 top level 327 path <FS_TREE>/@/.snapshots/1/snapshot
ID 332 gen 3845 top level 329 path <FS_TREE>/@var/.snapshots/1/snapshot
ID 339 gen 4382 top level 257 path @/@backup
# subvol=@/backup будет выдавать ошибки монтирования
$ sudo mount -o noatime,compress=lzo,space_cache,subvol=@/@backup /dev/nvme0n1p5 /mnt/backup
$ sudo btrfs receive -f /tmp/root.img /mnt/backup
# Почему появился еще один подраздел?
$ sudo btrfs sub list -a /
...
ID 340 gen 4413 top level 257 path @/@backup
ID 341 gen 4424 top level 340 path <FS_TREE>/@/@backup/snapshot
# Тут вроде все нормально
$ ls /mnt/backup/snapshot
bin dev home lib64 mnt proc run srv 'System Volume Information' usr
boot etc lib lost+found opt root sbin sys tmp var
$ sudo umount /mnt/backup
$ sudo rmdir /mnt/backup
$ rm /tmp/root.img
# Так чтоли?
$ mv /@backup/snapshot /@home
# А потом удаляем?
# А так нельзя: /@/@backup/snapshot
$ sudo btrfs sub del /@backup/snapshot
# Это интересно: данные после восстановления занимают меньше места
Можно ли отнего избавиться? Или так и должно быть? Или я что-то делаю не так? Снапшоты делаются snapper’ом.