Bootstrap

Восстановление из бэкапа btrfs (gpt)

Восстановление из бэкапа btrfs (gpt)

Полное восстановление системы на диске с gpt из созданных снимков btrfs

Сейчас у нас есть репозитарий со снимком системы, который мы сделали в предыдущей статье. И есть новый диск, на который мы востановим систему.


Подробности по текущей задаче:

Мы сделали снимки(snapshot) двух подтомов(subvolume) с системой, в один из которых предварительно поместили образы загрузочных разделов EFI и BOOT. Эти снимки мы переслали на другой носитель, в целях сохранности данных в случае неисправности основного диска. Для этого нужно было провести ряд подготовительных работ. В btrfs снимки системы делаются мгновенно, но они остаются на том же разделе, того же диска, на котором делаются... Это является удобным и надёжным решением для сохранения данных, но не в случае когда сам диск с системой выходит из строя.  Чтобы убедиться в абсолютной надёжности и целесообразности бэкапов btrfs с помощью snapshot, в этой статье мы пошагово восстановимся из снимков, которые переслали на другой носитель - наш репозитарий.

Итак предположим, что основной диск с системой у нас накрылся... теперь у нас есть совершенно новый диск подходящего размера, и репозитарий - со снимками. Благодаря этой инструкции мы пошагово, восстановим систему в состояние на момент созданных снимков.


Порядок действий:

  1. Всё достаточно просто, нам необходимо на новом диске воссоздать структуру накрывшегося диска, который состоял из трёх разделов, эту информацию мы тоже сохранили в снимках... Первый раздел там был и теперь будет для EFI в формате fat32, второй загрузочным в формате ext4, их мы востановим из сохранённых образов. А основной третий раздел btrfs, восстановим снапшотами.
  2. Есть несколько важных моментов, которые необходимо будет учесть: это правка fstab под новый UUID, 
  3. Имена при создании снимков, которые теперь и есть наши новые подтома, отличаются от имён подтомов с которых их снимали. Здесь с загрузчиком efi, эти новые имена подтомов нужно будет вернуть в исходное состояние т.е. переименовать текущие имена снимков на те, что указаны в fstab... утилитой mv (это одно из ключевых отличий от востановления на дисках с mbr и bios, где мы просто правили эти имена subvolume в самом файле fstab, а переустановка grub2 закрывала вопрос.) 
  4. Снять защиту от записи, сбросить флаг ro, с подтомов после переноса их на целевой диск командой btrfs property set.
  5. После изменения fstab под uuid, в режиме chroot сконфигурировать файлы загрузчика EFI.

И после выполнения этой последовательности процедур, наша система будет полностью восстановлена.


Решение задачи:

Сейчас я всё это делаю в виртуальной машине. Поэтому, первым делом добавляем новый диск в эту машину, на него мы будем востанаваливаться из бэкапа. 40gb, судя по размерам репозитария, нам хватит с лихвой. Старый диск, который по сценарию накрылся, здесь же убираем из системы, чтобы он нам не мешал. Все необходимые инструкции по работе в программе VirtualBox здесь.

Загружаемся с live образа линукс, например MXlinux, удобный, дистрибутив, не зря, на день создания этого туториала занимает первое место в рейтинге https://distrowatch.com/

Здесь уже в лайв системе, для выполнении операций, сразу входим в режим суперпользователя root, чтобы не вводить постоянно слово sudo

последовательность команд:

sudo su
lsblk -f

Как они выглядят в терминале:

Terminal:

    demo@mx1:~/Desktop
    $ sudo su

    [sudo] password for demo: 
    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 btrfs                         6474de7f-b5a6-4f08-addc-c2ee57e82971                
    
    sdb                                                                                      
    sr0    iso9660  Joliet Exten MX-Live 2021-10-19-23-10-23-00                     0   100% /live/boot-
  

Так видно, что диск sdb, который у нас здесь пока вообще без разделов будет целевым. А диск sda, у которого есть один раздел sda1, это наш репозитарий с backup-ом.

    • Создадим точку монтирования, смонтируем раздел sda1 и посмотрим. Откроем каталог снимка root_bp с backup-ом образов загрузочных разделов, чтобы в именах увидеть размеры разделов и их количество. Теоретически ведь разделов может быть много, это всё тоже видно в файле fstab
    • Видим по uuid и точкам монтирования в выводе терминала ниже, у нас всего четыре точки монтирования и три раздела. Две точки монтирования в разные подтома первая и четвёртая на разделе btrfs
    • Поэтому создадим разделы соответствующих размеров на целевом диске sdb с помощью gparted. ( статья как пользоваться gparted)

       

последовательность команд:

mkdir /mnt/sda1
mount /dev/sda1 /mnt/sda1
ls /mnt/sda1/
ls /mnt/sda1/backup_7_11_21/root_bp/backup_boot
cat /mnt/sda1/backup_7_11_21/root_bp/etc/fstab

Как они выглядят в терминале:

Terminal:

    root@mx1:/home/demo/Desktop# mkdir /mnt/sda1
    root@mx1:/home/demo/Desktop# mount /dev/sda1 /mnt/sda1
    root@mx1:/home/demo/Desktop# ls /mnt/sda1/
    backup_7_11_21
    root@mx1:/home/demo/Desktop# ls /mnt/sda1/backup_7_11_21
    home_bp  root_bp
    root@mx1:/home/demo/Desktop# ls /mnt/sda1/backup_7_11_21/root_bp
    backup_boot  boot  etc  lib  lost+found  mnt  proc  run   srv  tmp  var
    bin      dev   home  lib64  media     opt  root  sbin  sys  usr
    root@mx1:/home/demo/Desktop# ls /mnt/sda1/backup_7_11_21/root_bp/backup_boot
    dd_sda1_efi_600mb.iso  dd_sda2_boot_1024mb.iso
    root@mx1:/home/demo/Desktop#       

    root@mx1:/home/demo/Desktop# cat /mnt/sda1/backup_7_11_21/root_bp/etc/fstab                                               

    #
    # /etc/fstab
    # Created by anaconda on Sat Nov  6 06:53:48 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=48bebba0-a3c9-4408-8fcd-d2ea03201a35 /                       btrfs   subvol=root00   0 0
    UUID=4fa6cee5-6902-4bf5-bed6-dad03bc8c83e /boot                   ext4    defaults        1 2
    UUID=D58C-0FAF                            /boot/efi               vfat    umask=0077,shortname=winnt 0 2
    UUID=48bebba0-a3c9-4408-8fcd-d2ea03201a35 /home                   btrfs   subvol=home00   0 0
    root@mx1:/home/demo/Desktop#  

  

Теперь на диске sdb нам нужно создать таблицу разделов gpt и отформатировать третий раздел sdb3 в btrfs. В нашем случае sdb1 и sdb2 можно было бы просто создать нужных размеров без форматирования, ведь они будут полностью востановлены утилитой dd из образов, вместе с форматом файловой системы... Но sdb3 сейчас форматируем обязательно.

Открываем gparted и сделаем это всё сразу.

gparted результат

как пользоваться gparted, parted, fdisk... можно изучить здесь

В результате данных действий, мы должны увидеть вот такой вывод команды lsblk -f. Т.е. на целевом диске sdb имеем теперь три нужных раздела. Обратите внимание, что у всех трёх разделов при создании утилитой gparted присвоились свои уникальные UUID. Причём у разделов sdb1 и sdb2 UUID вернуться на исходные из образов утилитой dd уже на следующем шаге. В то время как быть с UUID на sdb3? Правильно скопировать в буфер и прописать в новом fstab. Но при этом  придётся ещё в режиме chroot переконфигурировать и grub-efi

На мой взгляд, этот вариант является более правильным, так как с ним мы не трогаем метаданные файловой системы btrfs. 

Однако есть и другой вариант действий, противоположный этому - смена uuid нового раздела по образцу из fstab ...

Вывод в терминале текущей ситуации:

Terminal:

        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 btrfs                             6474de7f-b5a6-4f08-addc-c2ee57e82971   16.1G    35% /mnt/sda1
        sdb                                                                                          
        ├─sdb1 vfat     FAT32                    9374-D76C                                           
        ├─sdb2 ext4     1.0                      ead313f6-d00b-418c-be5c-81187c484400  907.4M     0% /media/demo/ead313f6-d00b-418c-be5c-81187c484400
        └─sdb3 btrfs                             efc75c33-6462-47d4-9315-65c502aa684b   36.6G     0% /mnt/sdb3
        sr0    iso9660  Joliet Extension MX-Live 2021-10-19-23-10-23-00                     0   100% /live/boot-dev
        root@mx1:/home/demo/Desktop# 
    

Cоздаём  - точку монтирования для нового btrfs раздела /mnt/sdb3 целевого диска, монтируемся.

последовательность команд:

mkdir /mnt/sdb3
mount /dev/sdb3 /mnt/sdb3

 

Настала пора, можно сказать, ключевого момента в процедуре востанавления системы из бэкапа - пересылаем подтома из sda1 на этот диск sdb3, но помним, что снимки всё ещё остаются в readonly 

последовательность команд:

btrfs send /mnt/sda1/backup_7_11_21/root_bp | btrfs receive /mnt/sdb3
btrfs send /mnt/sda1/backup_7_11_21/home_bp | btrfs receive /mnt/sdb3

Как они выглядят в терминале:

Terminal:

    root@mx1:/home/demo/Desktop# mkdir /mnt/sdb3
    root@mx1:/home/demo/Desktop# mount /dev/sdb3 /mnt/sdb3  
    root@mx1:/home/demo/Desktop# btrfs send /mnt/sda1/backup_7_11_21/root_bp | btrfs receive /mnt/sdb3
    At subvol /mnt/sdb1/backup_7_11_21/root_bp
    At subvol root_bp
    root@mx1:/home/demo/Desktop# btrfs send /mnt/sda1/backup_7_11_21/home_bp | btrfs receive /mnt/sdb3
    At subvol /mnt/sdb1/backup_7_11_21/home_bp
    At subvol home_bp
    root@mx1:/home/demo/Desktop# ls /mnt/sdb3
    home_bp  root_bp
    root@mx1:/home/demo/Desktop#           
    

Так как мы работаем сейчас с btrfs, то самое время выполнить синхронизацию данных на диске с данными в памяти. При этом выполняется системный вызов sync, который вызывает запись всех буферизованных изменений метаданных файлов и данных в базовые файловые системы.

команды:

sync
btrfs filesystem sync /mnt/sdb3

Как это выглядит в терминале:

Terminal:

root@mx1:/home/demo/Desktop# sync
root@mx1:/home/demo/Desktop# 
root@mx1:/home/demo/Desktop# btrfs filesystem sync /mnt/sdb3
root@mx1:/home/demo/Desktop# 

Теперь востанавливаем раздел efi на sdb1 загрузочный раздел boot на sdb2 из образов, которые были сохранены предварительно в снимке root_bp. Воспользуемся той же самой утилитой dd, можно со статусом progress, чтобы видеть процесс копирования.

последовательность команд:

 dd if=/mnt/sdb3/root_bp/backup_boot/dd_sda1_efi_600mb.iso of=/dev/sdb1 status=progress
 dd if=/mnt/sdb3/root_bp/backup_boot/dd_sda2_boot_1024mb.iso of=/dev/sdb2 status=progress

Смотрим вывод теминала, в котором добавлено пару команд для проверки, что всё у нас на месте. А именно после операции создали точки монтирования новых разделов, посмотрели содержимое и отмонтировали.

последовательность команд:

mkdir /mnt/sdb1
mkdir /mnt/sdb2
mount /dev/sdb1 /mnt/sdb1
mount /dev/sdb2 /mnt/sdb2
ls /mnt/sdb1
ls /mnt/sdb2
umount /mnt/sdb1 /mnt/sdb2

Как они выглядят в терминале:

Terminal:

    root@mx1:/home/demo/Desktop# ls /mnt/sdb3/root_bp/backup_boot/
    dd_sda1_efi_600mb.iso  dd_sda2_boot_1024mb.iso
 
    root@mx1:/home/demo/Desktop#   dd if=/mnt/sdb3/root_bp/backup_boot/dd_sda1_efi_600mb.iso of=/dev/sdb1 status=progress
    623915520 bytes (624 MB, 595 MiB) copied, 12 s, 52.0 MB/s
    1228800+0 records in
    1228800+0 records out
    629145600 bytes (629 MB, 600 MiB) copied, 12.1629 s, 51.7 MB/s
 
    root@mx1:/home/demo/Desktop#  dd if=/mnt/sdb3/root_bp/backup_boot/dd_sda2_boot_1024mb.iso of=/dev/sdb2 status=progress
    1028129280 bytes (1.0 GB, 981 MiB) copied, 21 s, 49.0 MB/s
    2097152+0 records in
    2097152+0 records out
    1073741824 bytes (1.1 GB, 1.0 GiB) copied, 21.7255 s, 49.4 MB/s
    root@mx1:/home/demo/Desktop# 
 
    root@mx1:/home/demo/Desktop# mkdir /mnt/sdb1
    root@mx1:/home/demo/Desktop# mkdir /mnt/sdb2
    root@mx1:/home/demo/Desktop# mount /dev/sdb1 /mnt/sdb1  
    root@mx1:/home/demo/Desktop# mount /dev/sdb2 /mnt/sdb2  
 
    root@mx1:/home/demo/Desktop# ls /mnt/sdb1
    EFI  mach_kernel  System
 
    root@mx1:/home/demo/Desktop# ls /mnt/sdb2
    config-5.14.10-300.fc35.x86_64  initramfs-0-rescue-18dd197cc607412db54e3f15b51f36e0.img  symvers-5.14.10-300.fc35.x86_64.gz       vmlinuz-5.14.10-300.fc35.x86_64
    config-5.14.16-301.fc35.x86_64  initramfs-5.14.10-300.fc35.x86_64.img      symvers-5.14.16-301.fc35.x86_64.gz       vmlinuz-5.14.16-301.fc35.x86_64
    efi       initramfs-5.14.16-301.fc35.x86_64.img      System.map-5.14.10-300.fc35.x86_64
    extlinux      loader               System.map-5.14.16-301.fc35.x86_64
    grub2       lost+found             vmlinuz-0-rescue-18dd197cc607412db54e3f15b51f36e0
    root@mx1:/home/demo/Desktop# 
   
    root@mx1:/home/demo/Desktop# umount /mnt/sdb1 /mnt/sdb2
    root@mx1:/home/demo/Desktop# 
    

Переводим subvolume в режим rw, т.е. убираем флаг только чтение, это обязательно нужно сделать, сделаем это прямо сейчас. Посмотреть флаг состояние подтома get, чтобы установить set. Если ro=true значит режим readonly. Нам нужно сделать ro=false.

последовательность команд:

btrfs property set /mnt/sdb3/root_bp ro false
btrfs property set /mnt/sdb3/home_bp ro false

Как они выглядят в терминале:

Terminal:

    root@mx1:/home/demo/Desktop# btrfs property get /mnt/sdb3/root_bp
    ro=true
    root@mx1:/home/demo/Desktop# btrfs property get /mnt/sdb3/home_bp
    ro=true
    root@mx1:/home/demo/Desktop# btrfs property set /mnt/sdb3/root_bp ro false
    root@mx1:/home/demo/Desktop# btrfs property set /mnt/sdb3/home_bp ro false
    root@mx1:/home/demo/Desktop# btrfs property get /mnt/sdb3/root_bp
    ro=false
    root@mx1:/home/demo/Desktop# btrfs property get /mnt/sdb3/home_bp
    ro=false
    root@mx1:/home/demo/Desktop# 
    

Ещё раз посмотрим на fstab, в подтоме root_bp. Чтобы узнать нужные имена смонтированных подтомов, на которые мы изменим полученые снимки.

  1. Смотрим какие у нас сейчас указаны записи в конфигурационном файле cat /../fstab.
  2. Смотрим какие UUID сейчас у нас на новом диске командой lsblk -f. Убеждаемся, что UUID загрузочного раздела sdb1 и sdb2 уже восстановлены и теперь без изменений, ведь они скопировались полностью из образов, утилитой dd. Но если UUID основного раздела sdb3 у нас ещё отличается от исходного, то исправим это на следующем шаге
  3. Утилитой mv изменим префикс у снимков с _bp на исходный у нас 00.

последовательность команд:

cat /mnt/sdb3/root_bp/etc/fstab
lsblk -f
ls /mnt/sdb3
mv /mnt/sdb3/root_bp /mnt/sdb3/root00
mv /mnt/sdb3/home_bp /mnt/sdb3/home00
ls /mnt/sdb3

Как они выглядят в терминале:

Terminal:

     root@mx1:/home/demo/Desktop# cat /mnt/sdb3/root_bp/etc/fstab                                                                

    #
    # /etc/fstab
    # Created by anaconda on Sat Nov  6 06:53:48 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=48bebba0-a3c9-4408-8fcd-d2ea03201a35 /                       btrfs   subvol=root00   0 0
    UUID=4fa6cee5-6902-4bf5-bed6-dad03bc8c83e /boot                   ext4    defaults        1 2
    UUID=D58C-0FAF          /boot/efi               vfat    umask=0077,shortname=winnt 0 2
    UUID=48bebba0-a3c9-4408-8fcd-d2ea03201a35 /home                   btrfs   subvol=home00   0 0
    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 btrfs                             6474de7f-b5a6-4f08-addc-c2ee57e82971   16.1G    35% /mnt/sda1
    sdb                                                                                          
    ├─sdb1 vfat     FAT32                    D58C-0FAF                                           
    ├─sdb2 ext4     1.0                      4fa6cee5-6902-4bf5-bed6-dad03bc8c83e  907.4M     0% /media/demo/ead313f6-d00b-418c-be5c-81187c484400
    └─sdb3 btrfs                             efc75c33-6462-47d4-9315-65c502aa684b   29.3G    23% /mnt/sdb3
    sr0    iso9660  Joliet Extension MX-Live 2021-10-19-23-10-23-00                     0   100% /live/boot-dev
    root@mx1:/home/demo/Desktop# 
 
    root@mx1:/home/demo/Desktop# ls /mnt/sdb3                                                                                   
    home_bp  root_bp
    root@mx1:/home/demo/Desktop# 
 
    root@mx1:/home/demo/Desktop# mv /mnt/sdb3/root_bp /mnt/sdb3/root00                                                                                   
    root@mx1:/home/demo/Desktop# mv /mnt/sdb3/home_bp /mnt/sdb3/home00                                                                                   
    
  
    root@mx1:/home/demo/Desktop# ls /mnt/sdb3                                                                                   
    home00  root00
    root@mx1:/home/demo/Desktop# 
        

Обратите внимание на сделанную мною подстветку в терминале, идентичные записи у нас одного цвета. Так вот для наглядного понимания, в записях fstab и вывода lsblk -f. Имена subvolume мы только что восстановили к исходным, изменили с mv в конце этого шага, отмечены теперь зелёным...


 

Теперь заключительный этап, где мы меняем fstab под систему.

Повторный вывод предыдущего терминала, до изменения uuid, но с уже новыми именами subvolume:

Terminal:

     root@mx1:/home/demo/Desktop# mount /dev/sdb3 /mnt                                                                               

     root@mx1:/home/demo/Desktop# cat /mnt/sdb3/root00/etc/fstab                                                                

    #
    # /etc/fstab
    # Created by anaconda on Sat Nov  6 06:53:48 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=48bebba0-a3c9-4408-8fcd-d2ea03201a35 /                       btrfs   subvol=root00   0 0
    UUID=4fa6cee5-6902-4bf5-bed6-dad03bc8c83e /boot                   ext4    defaults        1 2
    UUID=D58C-0FAF          /boot/efi               vfat    umask=0077,shortname=winnt 0 2
    UUID=48bebba0-a3c9-4408-8fcd-d2ea03201a35 /home                   btrfs   subvol=home00   0 0
    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 btrfs                             6474de7f-b5a6-4f08-addc-c2ee57e82971   16.1G    35% /mnt/sda1
    sdb                                                                                          
    ├─sdb1 vfat     FAT32                    D58C-0FAF                                           
    ├─sdb2 ext4     1.0                      4fa6cee5-6902-4bf5-bed6-dad03bc8c83e  907.4M     0% /media/demo/ead313f6-d00b-418c-be5c-81187c484400
    └─sdb3 btrfs                             efc75c33-6462-47d4-9315-65c502aa684b   29.3G    23% /mnt/sdb3
    sr0    iso9660  Joliet Extension MX-Live 2021-10-19-23-10-23-00                     0   100% /live/boot-dev
    root@mx1:/home/demo/Desktop# 
 

Мы меняем uuid разделов указанных в fstab значит, те, что относятся (в выводе терминала выше) к зелёному нам нужно будет изменить на тот, что относится к синему фону Т.е. правим файл fstab на uuid текущего основного раздела.

  1. Смотрим какие у нас сейчас указаны записи в конфигурационном файле fstab.
  2. Смотрим какие UUID сейчас у нас на новом диске командой lsblk -f. Убеждаемся, что UUID загрузочного раздела sdb1 и sdb2 останутся без изменений, ведь они скопировались полностью из образов, утилитой dd. Но UUID основного раздела sdb3 у нас поменялся, отразим это изменение в /etc/fstab. 
  3. Новые имена подтомов, теперь с префиксом как изначальные 00 вместо _bp мы уже сделали.

Теперь посмотрим на новый fstab который получится на основе этих данных, после редактирования в редакторе nano или vim, с новыми UUID. Изменения подсвечены оранжевым фоном.

последовательность действий и команд:

UUID sdb3 копируем в буфер efc75c33-6462-47d4-9315-65c502aa684b
nano /mnt/sdb3/root00/etc/fstab
вставляем в первую и четвёртую строку UUID
ctrl+o (сохранить в nano)
ctrl+x (выйти)

как это выглядит в терминале:

Terminal:

          GNU nano 5.4                                                              /mnt/sdb3/root_bp/etc/fstab *                                                                      

        #
        # /etc/fstab
        # Created by anaconda on Sat Nov  6 06:53:48 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=efc75c33-6462-47d4-9315-65c502aa684b /                       btrfs   subvol=root00   0 0
        UUID=4fa6cee5-6902-4bf5-bed6-dad03bc8c83e /boot                   ext4    defaults        1 2
        UUID=D58C-0FAF                            /boot/efi               vfat    umask=0077,shortname=winnt 0 2
        UUID=efc75c33-6462-47d4-9315-65c502aa684b /home                   btrfs   subvol=home00   0 0

        

Теперь переконфигурируем загрузчик EFI, применив chroot. Отмонтируем всё смонтированное из подкаталогов в /mnt/. Эти точки нам дальше не пригодятся.

последовательность команд:

umount -R -l /mnt/*

Теперь монтируем, корень будующей системы в подтом root00

последовательность команд:

mount -o subvol=root00 -o compress=zstd:1 /dev/sdb3 /mnt

и после подключаем к нему, текущие системные каталоги, из live системы, следующими командами

последовательность команд:

mount --rbind /sys /mnt/sys
mount --rbind /proc /mnt/proc
mount --rbind /dev /mnt/dev
mount --rbind /run /mnt/run

как это выглядит в терминале:

Terminal:

    root@mx1:/home/demo/Desktop# umount -R -l /mnt/* 
    root@mx1:/home/demo/Desktop# mount -o subvol=root00 -o compress=zstd:1 /dev/sdb3 /mnt
    root@mx1:/home/demo/Desktop# mount --rbind /sys /mnt/sys 
    root@mx1:/home/demo/Desktop# mount --rbind /proc /mnt/proc
    root@mx1:/home/demo/Desktop# mount --rbind /dev /mnt/dev
    root@mx1:/home/demo/Desktop# mount --rbind /run /mnt/run
    root@mx1:/home/demo/Desktop# 

переключаемся на созданную файловую систему

последовательность команд:

chroot /mnt

Теперь монтируем разделы boot и subvolume home00 в соответствующие каталоги. Сначала монтируем раздел sdb2 и внутри него раздел sdb1

последовательность команд:

mount /dev/sdb2 /boot
mount /dev/sdb1 /boot/efi
mount -o subvol=home00 -o compress=zstd:1 /dev/sdb3 /home

как это выглядит в терминале:

Terminal:

    root@mx1:/home/demo/Desktop# chroot /mnt
    [root@mx1 /]# mount /dev/sdb2 /boot
    [root@mx1 /]# mount /dev/sdb1 /boot/efi
    [root@mx1 /]# mount -o subvol=home00 -o compress=zstd:1 /dev/sdb3 /home
    [root@mx1 /]# 

Если вы строго сохранили указанную последовательность действий, то всё должно получиться правильно.

И только теперь переконфигурируем  efi

последовательность команд:

grub2-mkconfig /boot/grub2/grub.cfg
grub2-mkconfig -o /boot/efi/EFI/fedora/grub.cfg

как это выглядит в терминале:

Terminal:

    
        [root@mx1 /]#  grub2-mkconfig /boot/grub2/grub.cfg
        Generating grub configuration file ...
        #
        # DO NOT EDIT THIS FILE
        #
        # It is automatically generated by grub2-mkconfig using templates
        # from /etc/grub.d and settings from /etc/default/grub
        #
        
        ### BEGIN /etc/grub.d/00_header ###
        set pager=1
        
        if [ -f ${config_directory}/grubenv ]; then
          load_env -f ${config_directory}/grubenv
        elif [ -s $prefix/grubenv ]; then
          load_env
        fi
        if [ "${next_entry}" ] ; then
           set default="${next_entry}"
           set next_entry=
           save_env next_entry
           set boot_once=true
        else
           set default="${saved_entry}"
        fi
        
        if [ x"${feature_menuentry_id}" = xy ]; then
          menuentry_id_option="--id"
        else
          menuentry_id_option=""
        fi
        
        export menuentry_id_option
        
        if [ "${prev_saved_entry}" ]; then
          set saved_entry="${prev_saved_entry}"
          save_env saved_entry
          set prev_saved_entry=
          save_env prev_saved_entry
          set boot_once=true
        fi
        
        function savedefault {
          if [ -z "${boot_once}" ]; then
            saved_entry="${chosen}"
            save_env saved_entry
          fi
        }
        
        function load_video {
          if [ x$feature_all_video_module = xy ]; then
            insmod all_video
          else
            insmod efi_gop
            insmod efi_uga
            insmod ieee1275_fb
            insmod vbe
            insmod vga
            insmod video_bochs
            insmod video_cirrus
          fi
        }
        
        terminal_output console
        if [ x$feature_timeout_style = xy ] ; then
          set timeout_style=menu
          set timeout=5
        # Fallback normal timeout code in case the timeout_style feature is
        # unavailable.
        else
          set timeout=5
        fi
        ### END /etc/grub.d/00_header ###
        
        ### BEGIN /etc/grub.d/01_users ###
        if [ -f ${prefix}/user.cfg ]; then
          source ${prefix}/user.cfg
          if [ -n "${GRUB2_PASSWORD}" ]; then
            set superusers="root"
            export superusers
            password_pbkdf2 root ${GRUB2_PASSWORD}
          fi
        fi
        ### END /etc/grub.d/01_users ###
        
        ### BEGIN /etc/grub.d/08_fallback_counting ###
        insmod increment
        # Check if boot_counter exists and boot_success=0 to activate this behaviour.
        if [ -n "${boot_counter}" -a "${boot_success}" = "0" ]; then
          # if countdown has ended, choose to boot rollback deployment,
          # i.e. default=1 on OSTree-based systems.
          if  [ "${boot_counter}" = "0" -o "${boot_counter}" = "-1" ]; then
            set default=1
            set boot_counter=-1
          # otherwise decrement boot_counter
          else
            decrement boot_counter
          fi
          save_env boot_counter
        fi
        ### END /etc/grub.d/08_fallback_counting ###
        
        ### BEGIN /etc/grub.d/10_linux ###
        insmod part_gpt
        insmod ext2
        set root='hd1,gpt2'
        if [ x$feature_platform_search_hint = xy ]; then
          search --no-floppy --fs-uuid --set=root --hint-bios=hd1,gpt2 --hint-efi=hd1,gpt2 --hint-baremetal=ahci1,gpt2  4fa6cee5-6902-4bf5-bed6-dad03bc8c83e
        else
          search --no-floppy --fs-uuid --set=root 4fa6cee5-6902-4bf5-bed6-dad03bc8c83e
        fi
        insmod part_gp     
        t
        insmod fat
        set boot='hd1,gpt1'
        if [ x$feature_platform_search_hint = xy ]; then
          search --no-floppy --fs-uuid --set=boot --hint-bios=hd1,gpt1 --hint-efi=hd1,gpt1 --hint-baremetal=ahci1,gpt1  D58C-0FAF
        else
          search --no-floppy --fs-uuid --set=boot D58C-0FAF
        fi
        
        # This section was generated by a script. Do not modify the generated file - all changes
        # will be lost the next time file is regenerated. Instead edit the BootLoaderSpec files.
        #
        # The blscfg command parses the BootLoaderSpec files stored in /boot/loader/entries and
        # populates the boot menu. Please refer to the Boot Loader Specification documentation
        # for the files format: https://systemd.io/BOOT_LOADER_SPECIFICATION/.
        
        # The kernelopts variable should be defined in the grubenv file. But to ensure that menu
        # entries populated from BootLoaderSpec files that use this variable work correctly even
        # without a grubenv file, define a fallback kernelopts variable if this has not been set.
        #
        # The kernelopts variable in the grubenv file can be modified using the grubby tool or by
        # executing the grub2-mkconfig tool. For the latter, the values of the GRUB_CMDLINE_LINUX
        # and GRUB_CMDLINE_LINUX_DEFAULT options from /etc/default/grub file are used to set both
        # the kernelopts variable in the grubenv file and the fallback kernelopts variable.
        if [ -z "${kernelopts}" ]; then
          set kernelopts="root=UUID=48bebba0-a3c9-4408-8fcd-d2ea03201a35 ro rootflags=subvol=root00 rhgb quiet "
        fi
        
        insmod blscfg
        blscfg
        ### END /etc/grub.d/10_linux ###
        
        ### BEGIN /etc/grub.d/10_reset_boot_success ###
        # Hiding the menu is ok if last boot was ok or if this is a first boot attempt to boot the entry
        if [ "${boot_success}" = "1" -o "${boot_indeterminate}" = "1" ]; then
          set menu_hide_ok=1
        else
          set menu_hide_ok=0 
        fi
        # Reset boot_indeterminate after a successful boot
        if [ "${boot_success}" = "1" ] ; then
          set boot_indeterminate=0
        # Avoid boot_indeterminate causing the menu to be hidden more than once
        elif [ "${boot_indeterminate}" = "1" ]; then
          set boot_indeterminate=2
        fi
        # Reset boot_success for current boot 
        set boot_success=0
        save_env boot_success boot_indeterminate
        ### END /etc/grub.d/10_reset_boot_success ###
        
        ### BEGIN /etc/grub.d/12_menu_auto_hide ###
        if [ x$feature_timeout_style = xy ] ; then
          if [ "${menu_show_once}" ]; then
            unset menu_show_once
            save_env menu_show_once
            set timeout_style=menu
            set timeout=60
          elif [ "${menu_auto_hide}" -a "${menu_hide_ok}" = "1" ]; then
            set orig_timeout_style=${timeout_style}
            set orig_timeout=${timeout}
            if [ "${fastboot}" = "1" ]; then
              # timeout_style=menu + timeout=0 avoids the countdown code keypress check
              set timeout_style=menu
              set timeout=0
            else
              set timeout_style=hidden
              set timeout=1
            fi
          fi
        fi
        ### END /etc/grub.d/12_menu_auto_hide ###
        
        ### BEGIN /etc/grub.d/14_menu_show_once ###
        if [ x$feature_timeout_style = xy ]; then
          if [ "${menu_show_once_timeout}" ]; then
            set timeout_style=menu
            set timeout="${menu_show_once_timeout}"
            unset menu_show_once_timeout
            save_env menu_show_once_timeout
          fi
        fi
        ### END /etc/grub.d/14_menu_show_once ###
        
        ### BEGIN /etc/grub.d/20_linux_xen ###
        
        ### END /etc/grub.d/20_linux_xen ###
        
        ### BEGIN /etc/grub.d/20_ppc_terminfo ###
        ### END /etc/grub.d/20_ppc_terminfo ###
        
        ### BEGIN /etc/grub.d/30_os-prober ###
        ### END /etc/grub.d/30_os-prober ###
        
        ### BEGIN /etc/grub.d/30_uefi-firmware ###
        Adding boot menu entry for UEFI Firmware Settings ...
        if [ "$grub_platform" = "efi" ]; then
            menuentry 'UEFI Firmware Settings' $menuentry_id_option 'uefi-firmware' {
                fwsetup
            }
        fi
        ### END /etc/grub.d/30_uefi-firmware ###
        
        ### BEGIN /etc/grub.d/35_fwupd ###
        ### END /etc/grub.d/35_fwupd ###
        
        ### BEGIN /etc/grub.d/40_custom ###
        # This file provides an easy way to add custom menu entries.  Simply type the
        # menu entries you want to add after this comment.  Be careful not to change
        # the 'exec tail' line above.
        ### END /etc/grub.d/40_custom ###
        
        ### BEGIN /etc/grub.d/41_custom ###
        if [ -f  ${config_directory}/custom.cfg ]; then
          source ${config_directory}/custom.cfg
        elif [ -z "${config_directory}" -a -f  $prefix/custom.cfg ]; then
          source $prefix/custom.cfg
        fi
        ### END /etc/grub.d/41_custom ###
        done
        [root@mx1 /]# 
        [root@mx1 /]# grub2-mkconfig -o /boot/efi/EFI/fedora/grub.cfg
        Generating grub configuration file ...
        Adding boot menu entry for UEFI Firmware Settings ...
        done
        [root@mx1 /]# 

выходим из chroot

последовательность команд:

exit

размонтировать всё и перезагрузиться

последовательность команд:

umount -R -l /mnt
reboot

как это выглядит в терминале:

Terminal:

    [root@mx1 /]# exit
    exit
    root@mx1:/home/demo/Desktop# umount -R -l /mnt
    root@mx1:/home/demo/Desktop# reboot
    root@mx1:/home/demo/Desktop# 
    

Вытаскиваем загрузочный образ Live DVD и загружаемся с нового диска, в результате получаем полностью востановленную систему на момент сделанного backup.

fedora восстановленная, авторизация в системе

Копирование материалов разрешается только с указанием автора Roman Sakhno и индексируемой прямой ссылкой на сайт (http://itdid.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/sahroman.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/sahroman.

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

  1. Кнопка:

    Она выглядит вот так: Как настроить свой компьютер

  2. Текстовая ссылка:

    Она выглядит вот так: Как настроить свой компьютер

  3. BB-код ссылки для форумов (например, можете поставить её в подписи):

Комментарии (0):

Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.

крипто-донат, на развитие сайта itdid.ru:

В новом окне с терминалом itdid.ru, введите любую сумму: