Создание бэкапа в BTRFS (mbr)
Для наглядности и для полного понимания всего процесса, разберём простую ситуацию. В этом случае вся файловая система линукс, кроме раздела с /boot у нас установлена на btrfs в два subvolume.
У нас есть "HHD"(здесь это vdi) диск sda, на нём создано всего два раздела при установке системы.
/dev/sda1 для файлов загрузчика grub2 и ядер, в формате ФС ext4 размером 1gb с загрузочным флагом
/dev/sda2 раздел диска 30gb в btrfs c двумя подтомами. С корнем системы - subvolume : root и домашним пространством пользователя в subvolume : home
Здесь при выполнении операций подготовки к бэкапу, сразу входим в режим суперпользователя root, чтобы не вводить постоянно слово sudo
fdisk -l
И вот что мы видим:
☯
Terminal:
⌕
≡
✕
[vs@fedora ~]$ sudo su [sudo] пароль для vs: [root@fedora vs]# [root@fedora vs]# fdisk -l Диск /dev/sda: 31 GiB, 33290158080 байт, 65019840 секторов Disk model: VBOX HARDDISK Единицы: секторов по 1 * 512 = 512 байт Размер сектора (логический/физический): 512 байт / 512 байт Размер I/O (минимальный/оптимальный): 512 байт / 512 байт Тип метки диска: dos Идентификатор диска: 0x0863b45a Устр-во Загрузочный начало Конец Секторы Размер Идентификатор Тип /dev/sda1 * 2048 2099199 2097152 1G 83 Linux /dev/sda2 2099200 65017855 62918656 30G 83 Linux
В данном случае у нас структура разделов dos, значит это система с MBR и BIOS. Загрузчик GRUB и ядра OS, в этой системе находится в разделе sda1. Вся остальная файловая система в sda2. Убедимся в этом с помощью следующих команд:
ls /mnt
lsblk -f
При этом обратим внимание, что с результатом выполнения последней команды с ключом -f, мы получаем информацию и об UUID разделов, знание о которых нам понадобится, уже на следующем шаге.
☯
Terminal:
⌕
≡
✕
[root@fedora vs]# mount /dev/sda1 /mnt [root@fedora vs]# ls /mnt config-5.11.14-300.fc34.x86_64 config-5.11.3-300.fc34.x86_64 efi elf-memtest86+-5.31 extlinux grub2 initramfs-0-rescue-3cc94cbb1b0243dea550c3d45be8a0ba.img initramfs-5.11.14-300.fc34.x86_64.img initramfs-5.11.3-300.fc34.x86_64.img loader lost+found memtest86+-5.31 System.map-5.11.14-300.fc34.x86_64 System.map-5.11.3-300.fc34.x86_64 vmlinuz-0-rescue-3cc94cbb1b0243dea550c3d45be8a0ba vmlinuz-5.11.14-300.fc34.x86_64 vmlinuz-5.11.3-300.fc34.x86_64 [root@fedora vs]# [root@fedora vs]# lsblk -f NAME FSTYPE FSVER LABEL UUID FSAVAIL FSUSE% MOUNTPOINT sda ├─sda1 ext4 1.0 690c0d1a-43f3-4fe3-ae0d-b4dc3acad065 705,3M 21% /mnt └─sda2 btrfs fedora_localhost-live 1246f778-7ba5-430d-809a-a80ea801f09a 17,2G 41% /home zram0 [SWAP] [root@fedora vs]#
Первый раздел у нас в формате ext4, поэтому снять btrfs снимок с него нельзя, но мы желаем забэкапить всю систему. Поэтому снимем и сохраним образ sda1 в подтом на втором разделе, другим способом. Для создания полного бэкапа системы в снимках, с помощью btrfs subvolume snapshot ... Но об этом чуть позже. Сейчас отмонтируем первый раздел и посмотрим на второй - наш основной раздел btrfs с помощью команд:
mount /dev/sda2 /mnt
ls /mnt
☯
Terminal:
⌕
≡
✕
[root@fedora vs]# umount /mnt [root@fedora vs]# mount /dev/sda2 /mnt [root@fedora vs]# ls /mnt home root [root@fedora vs]#
Видим, что здесь два каталога, хоть внешне они ничем не отличаются, но это не просто каталоги, это и есть наши подтома subvolume
убедимся в этом с помощью команды, которая показывает все подтома в указанной точке монтирования:
☯
Terminal:
⌕
≡
✕
[root@fedora vs]# btrfs subvolume list /mnt ID 258 gen 94317 top level 5 path home ID 272 gen 100141 top level 5 path root ID 275 gen 57817 top level 272 path root/var/lib/machines [root@fedora vs]# [root@fedora vs]# umount /mnt [root@fedora vs]#
В этих двух подтомах находится вся наша система, поэтому всё, что нам нужно сделать, это снять с них snapshot и переместить их на другой носитель для хранения, предварительно, сохранив в один из них образ с первого раздела sda1. Тут также видно и ещё один подтом созданный самой системой внутри root, не имеющий особой важности root/var/lib/machines. Однако на всякий случай запомните, что снимок подтома не сохраняет вложенные подтома, вместо них сохраняется одноимённый каталог без содержимого. В стандартной ситуации как сейчас у нас, нам именно этот подтом не требуется, и мы не будем сохранять его в бэкап, но вопрос о нюансах рекурсивных снимков подробно раскрыт ЗДЕСЬ
Кстати, чтобы увидеть нашу ситуацию целиком, ознакомимся, каким образом смонтирована система. Это видно в конфигурационном файле /etc/fstab
☯
Terminal:
⌕
≡
✕
[root@fedora vs]#cat /etc/fstab # # /etc/fstab # Created by anaconda on Fri Apr 16 15:13:25 2021 # # Accessible filesystems, by reference, are maintained under '/dev/disk/'. # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info. # # After editing this file, run 'systemctl daemon-reload' to update systemd # units generated from this file. # UUID=1246f778-7ba5-430d-809a-a80ea801f09a / btrfs subvol=root,compress=zstd:1 0 0 UUID=690c0d1a-43f3-4fe3-ae0d-b4dc3acad065 /boot ext4 defaults 1 2 UUID=1246f778-7ba5-430d-809a-a80ea801f09a /home btrfs subvol=home,compress=zstd:1 0 0 [root@fedora vs]#
Здесь мы видим, что разделы монтируются с помощью имён UUID, они принадлежат разделам блочных устройств /dev/sdX. Эти данные мы уже встречали, при выводе в терминале команды lsblk -f. Прямо сейчас нам эта информация особо не требеуется. Работать с ней придётся, лишь на этапе востановления из бэкапа, который мы сейчас создадим.
Итак выполняем следующие действия:
- Выключаем систему.
- Подключаем загрузочный диск Live DVD(USB) и ставим первым в загрузку, чтобы загрузить linux с него.
- Подключаем дополнительный диск - принимающий, наш репозитарий. Куда и будем сохранять наш backup
- Включаем систему.
- На диске репозитария создаём раздел, достаточного размера, в формате btrfs с помощью утилиты gparted
(ссылка как пользоваться пример)
В результате имеем примерно такую ситуацию:
☯
Terminal:
⌕
≡
✕
demo@mx1:~/Desktop $ sudo su [sudo] password for demo: root@mx1:/home/demo/Desktop# root@mx1:/home/demo/Desktop# lsblk -f NAME FSTYPE FSVER LABEL UUID FSAVAIL FSUSE% MOUNTPOINT loop0 squashfs 4.0 0 100% /live/linux sda ├─sda1 ext4 1.0 690c0d1a-43f3-4fe3-ae0d-b4dc3acad065 └─sda2 btrfs fedora_localhost-live 1246f778-7ba5-430d-809a-a80ea801f09a sdb └─sdb1 btrfs f7274863-edf2-44f1-b64d-7d2ce764f441 sr0 iso9660 Joliet Extension MX-Live 2021-10-19-23-10-23-00 0 100% /live/boot-dev root@mx1:/home/demo/Desktop#
Здесь, видим по номерам UUID, и по структуре разделов, что sda это исходящий диск, с которого мы делаем backup, а sdb это целевой диск, наш будующий репозитарий где будет и храниться резервная копия(backup).
Создадим каталоги для точек монтирования. И смонтируем нужные нам разделы btrfs, исходящий и целевой:
mkdir /mnt/sdb1
mount /dev/sda2 /mnt/sda2
mount /dev/sdb1 /mnt/sdb1
☯
Terminal:
⌕
≡
✕
root@mx1:/home/demo/Desktop# mkdir /mnt/sda2 root@mx1:/home/demo/Desktop# mkdir /mnt/sdb1 root@mx1:/home/demo/Desktop# mount /dev/sda2 /mnt/sda2 root@mx1:/home/demo/Desktop# mount /dev/sdb1 /mnt/sdb1 root@mx1:/home/demo/Desktop# root@mx1:/home/demo/Desktop# ls /mnt/sda2 home root root@mx1:/home/demo/Desktop# root@mx1:/home/demo/Desktop# ls /mnt/sdb1 root@mx1:/home/demo/Desktop#
Всё в порядке, видим два наших subvolume, которые мы сохраним. Но сначала сделаем обещанный backup раздела загрузки sda1 с помощью утилиты dd в подтом root, создадим для этого каталог внутри подтома root. И отправим туда образ загрузочного раздела:
dd if=/dev/sda1 of=/mnt/sda2/root/backup_boot/dd_sda1_boot_1024mb.iso
Так как у нас структура разделов msdos, то нам стоит сохранить и блок MBR всего диска sda. (для структуры GPT нам этого делать было бы не нужно подробнее об этом здесь.)
Сохраним MBR-запись в файл file.mbr, сюда же:
☯
Terminal:
⌕
≡
✕
root@mx1:/home/demo/Desktop# mkdir /mnt/sda2/root/backup_boot root@mx1:/home/demo/Desktop# dd if=/dev/sda1 of=/mnt/sda2/root/backup_boot/dd_sda1_boot_1024mb.iso 2097152+0 records in 2097152+0 records out 1073741824 bytes (1.1 GB, 1.0 GiB) copied, 10.4123 s, 103 MB/s root@mx1:/home/demo/Desktop# dd if=/dev/sda of=/mnt/sda2/root/backup_boot/file.mbr bs=512 count=1 1+0 records in 1+0 records out 512 bytes copied, 0.000619172 s, 827 kB/s root@mx1:/home/demo/Desktop# root@mx1:/home/demo/Desktop# ls /mnt/sda2/root/backup_boot/ dd_sda1_boot_1024mb.iso file.mbr root@mx1:/home/demo/Desktop#
Теперь всё, что осталось, чтобы сделать полноценную резервную копию (backup) системы, это снять снимки (snapshot) двух subvolume root и home и перенести их на другой носитель в репозитарий sdb1.
Сначала делаются снимки в исходном разделе sda2 с защитой от записи ключ -r, эту опцию необходимо добавлять, т.к. в btrfs пересылать на другой раздел можно только readonly снимки.
btrfs subvolume snapshot -r /mnt/sda2/home /mnt/sda2/home_bp
снимки сделаются почти мгновенно
☯
Terminal:
⌕
≡
✕
root@mx1:/home/demo/Desktop# btrfs subvolume snapshot -r /mnt/sda2/root /mnt/sda2/root_bp Create a readonly snapshot of '/mnt/sda2/root' in '/mnt/sda2/root_bp' root@mx1:/home/demo/Desktop# btrfs subvolume snapshot -r /mnt/sda2/home /mnt/sda2/home_bp Create a readonly snapshot of '/mnt/sda2/home' in '/mnt/sda2/home_bp' root@mx1:/home/demo/Desktop# ls /mnt/sda2 home home_bp root root_bp root@mx1:/home/demo/Desktop#
Работая с btrfs будет не лишним выполнять синхронизацию данных на диске с данными в памяти. При этом выполняется системный вызов sync, который вызывает запись всех буферизованных изменений метаданных файлов и данных в базовые файловые системы.
☯
Terminal:
⌕
≡
✕
root@mx1:/home/demo/Desktop# sync root@mx1:/home/demo/Desktop# root@mx1:/home/demo/Desktop# btrfs filesystem sync /mnt/sda2 root@mx1:/home/demo/Desktop#
Подготовим диск для приёма сделанных снимков, создав каталог с текущей датой. Помним, что наш принимающий раздел, должен быть в формате btrfs и иметь достаточно свободного места.
И осуществим в него сам перенос двух снимков, по очереди.
Команда двойная, которая пишется строго через Пайп, где с левой стороны указывается путь к смонтированному источнику, с именем снимка, а с правой полный путь смонтированного приёмника, следующим образом:
btrfs send /mnt/sda2/root_bp | btrfs receive /mnt/sdb1/backup_4_11_21/
Эта процедура выполняется совсем не мнговенно, как предыдущие, поэтому придётся подождать. Например размеры около 80gb, у меня пересылись около 10-20 минут. Всё зависит от процессорных мощностей, но как ни крути, это всё-равно, на порядок быстрее чем копия таких объёмов утилитой dd.
Заметьте, у принимающей стороны мы указаваем только имя каталога, без имени подтома, которое останется таким же как и у источника.
☯
Terminal:
⌕
≡
✕
root@mx1:/home/demo/Desktop# mkdir /mnt/sdb1/backup_4_11_21 root@mx1:/home/demo/Desktop# btrfs send /mnt/sda2/root_bp | btrfs receive /mnt/sdb1/backup_4_11_21/ At subvol /mnt/sda2/root_bp At subvol root_bp root@mx1:/home/demo/Desktop# btrfs send /mnt/sda2/home_bp | btrfs receive /mnt/sdb1/backup_4_11_21/ At subvol /mnt/sda2/home_bp At subvol home_bp root@mx1:/home/demo/Desktop#
Мы успешно осуществили задуманное, выполним синхронизацию и выключаем систему. Теперь можете переходить к следующей статье, посвящённую пошаговому восстановлению из подобного бэкапа.
☯
Terminal:
⌕
≡
✕
root@mx1:/home/demo/Desktop# sync root@mx1:/home/demo/Desktop# root@mx1:/home/demo/Desktop# btrfs filesystem sync /mnt/sda2 root@mx1:/home/demo/Desktop# root@mx1:/home/demo/Desktop# btrfs filesystem sync /mnt/sdb1 root@mx1:/home/demo/Desktop# root@mx1:/home/demo/Desktop# ls /mnt/sdb1/backup_4_11_21 home_bp root_bp root@mx1:/home/demo/Desktop#
-
- Roman Sakhno
Комментарии (0):
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.