После того, как я
чуть не потерял системный диск, я все же решил бекапить его не только частями, но и образ диска отдельно и целиком. Благо, файловая система позволяет это делать.
Понятное дело, что можно делать снимок, выключая компьютер, а можно и вообще просто сделать dd, скопировав все на ходу, но есть некоторая уверенность, что второй вариант рано или поздно начнет генерировать убитые образы, а первые я просто по причине загруженности не будут успевать делать. Итого, надо сделать снапшоты.
Код:
btrfs subvolume snapshot -r / /mnt/@snap
Create readonly snapshot of '/' in '/mnt/@snap'
В итоге моментально появляется директория /mnt/@snap, в которой дублируется содержимое /
Теперь можно зайти в /etc и поудалять там файлы (ну только так, чтобы система не упала), у вас все равно есть копия в снапшоте, откуда их можно будет скопировать.
Для просмотра снапшотов можно использовать команду
Код:
btrfs subvolume list /
ID 729 gen 1474295 top level 5 path mnt/@snap
Если честно не очень понял 729, поскольку руками я на этом диске создавал снапшот в первый раз...
Теперь для того, чтобы этот снапшот можно было куда-то унести, из него надо сделать файлик. Файлик можно много куда передавать, в том числе и по сети, но я сделаю самое простое - файлик на соседнем диске.
Код:
btrfs send /mnt/@snap > /mnt/e/sda3.img
At subvol /mnt/@snap
У меня на 250Гб SSD, заполненный на 89Гб, файлик получился в 50Гб.
И снапшот удаляю. Не забывайте это делать, поскольку снапшоты небесплатные и поддержка истории изменения от снапшота до текущего состояния может достаточно сильно нагрузить как носитель, так и процессор.
Код:
btrfs subvolume delete /mnt/@snap
Delete subvolume 729 (no-commit): '/mnt/@snap'
Чтобы закоммитить изменения, то есть завершить изменения на диске делаем
Код:
btrfs filesystem sync /
И теперь представим, что нам надо файлик обратно замонтировать в снапшот
Код:
btrfs receive /mnt/snapshot < /mnt/e/sda3.img
At subvol @snap
Соответственно, посмотрим, куда это все попало
Код:
btrfs subvolume list /
ID 730 gen 1474361 top level 5 path mnt/snapshot/@snap
В директорию /mnt/snapshot/@snap
Файлик sda3.img является форматом BTRFS stream и, как я понял, замонтировать его нельзя. Но, учитывая возможности работы btrfs send даже по сети, все это - хорошая идея для бекапов. Однако, если хотите с этим заморочиться чуть сложнее, то лучше, конечно, использовать что-то с поддержкой инкрементальных бекапов, что уже существует в достаточном количестве и ищется в пакетном менеджере по слову btrfs, например, btrbk.
Код:
sudo btrfs send /snapshots/homebckup | ssh <USERNAME>@<REMOTEPC> “sudo btrfs receive /backups/home”
Код:
ssh user@remote_machine 'tar cf - /path/to/remote/file_or_folder | xz -T0' | cat > /path/to/local/destination/file.tar.xz