LINUX.ORG.RU
ФорумAdmin

Загрузка с импортированного сабволюма btrfs

 , , ,


0

3

Всем привет!

Заинтересовался btrfs.

Сейчас пробую снять через механизм снапшотов бекап корня с одной тачки и восстановиться из него на другой. Таким образом, по идее, я должен получить «дубль» исходной машины.

На первой машине:

root@first ~ # btrfs sub list /
ID 256 gen 103563 top level 5 path @
ID 257 gen 103560 top level 5 path @home
ID 258 gen 98517 top level 5 path @opt
ID 259 gen 103560 top level 5 path @tmp
ID 260 gen 103563 top level 5 path @libs
ID 283 gen 86834 top level 256 path backup

Сабволюм backup получен как readonly-снапшот корня:

btrfs subvolume snapshot -r / /backup

Далее я отправил сабволюм-снапшот backup в файл:

btrfs send /backup -f /first_btrfs_backup

Его я перенес на свежеустановленную вторую машину second и импортировал:

btrfs receive -v -f first_btrfs_backup /

На second теперь появился сабволюм backup:

root@second ~ # btrfs subvolume list /
ID 256 gen 10561 top level 5 path @
ID 258 gen 10416 top level 5 path @home
ID 259 gen 10565 top level 5 path @tmp
ID 260 gen 10567 top level 5 path @logs
ID 261 gen 10539 top level 5 path @cache
ID 292 gen 10559 top level 256 path backup

В директории /backup я вижу корень с первой машины(за исключением вложенных сабволюмов).

Как мне теперь подсунуть вместо корня @ свой сабволюм backup, чтобы получить «дубль»?

Информация везде разнится. Кто-то пишет про btrfs subvolume set-defaut, кто-то про правку /etc/fstab, кто-то, что нужно поправить параметры загрузки ядра на что-то типа такого rootflags=subvol=backup.

Первые два варианта вообще не возымели какого-то эффекта. После попытки поправить параметры загрузки ядра, система не загрузилась и пришлось чрутиться, чтобы вернуть прежние параметры)

И как понимаю, мне сначала нужно перевести сабвлолюм backup из read-only в rw?

На всякий случай мой текущий fstab, с которым по-прежнему грузится @:

proc /proc proc defaults 0 0
# /dev/md/0 belongs to btrfs volume 'btrfs.1'
# /dev/md/0
UUID=a9a66aed-6649-4d9d-9227-7d89f7729daf / btrfs defaults,subvol=backup 0 0
# /dev/md/0
UUID=a9a66aed-6649-4d9d-9227-7d89f7729daf /home btrfs defaults,subvol=@home 0 0
# /dev/md/0
UUID=a9a66aed-6649-4d9d-9227-7d89f7729daf /tmp btrfs defaults,subvol=@tmp 0 0
# /dev/md/0
UUID=a9a66aed-6649-4d9d-9227-7d89f7729daf /var/log btrfs defaults,subvol=@logs 0 0
# /dev/md/0
UUID=a9a66aed-6649-4d9d-9227-7d89f7729daf /var/cache btrfs defaults,subvol=@cache 0 0
★★

Последнее исправление: permafrost (всего исправлений: 1)

Информация везде разнится. Кто-то пишет про btrfs subvolume set-defaut, кто-то про правку /etc/fstab, кто-то, что нужно поправить параметры загрузки ядра на что-то типа такого rootflags=subvol=backup.

Это два способа решения одной задачи в зависимости от того, что нужно дальше делать с бэкапом на основном разделе. Нужно либо перенести бэкап в корень раздела, либо прописать правильный путь к некорневому subvolume в /etc/fstab. В обоих случаях для загрузки нужно указать правильный путь к данным через соответствующий параметр используемого initramfs, например rootflags=…

Первые два варианта вообще не возымели какого-то эффекта. После попытки поправить параметры загрузки ядра, система не загрузилась и пришлось чрутиться, чтобы вернуть прежние параметры)

И в чём заключалась ошибка?

И как понимаю, мне сначала нужно перевести сабвлолюм backup из read-only в rw?

Да, есть команда кажется в параметрах btrfs subvolume.

mxfm ★★
()
Ответ на: комментарий от mxfm

И в чём заключалась ошибка?

Делал это на облачном сервере. Так что не мог посмотреть на что там grub ругается.

Нужно либо перенести бэкап в корень раздела

Можешь этот момент прояснить, пжл. Не очень понял о чем ты

permafrost ★★
() автор топика

Вопрос. Если я меняю rootflags=subvol=backup, то как будут подхватываться vmlinuz и initramfs? Отдельного раздела или сабволюма для boot нет. Нужно ли в linux и initrd менять так же пути, как ниже?

menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-a9a66aed-6649-4d9d-9227-7d89f7729daf' {
        recordfail
        gfxmode $linux_gfx_mode
        insmod gzio
        if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
        insmod part_gpt
        insmod part_gpt
        insmod diskfilter
        insmod mdraid1x
        insmod btrfs
        set root='mduuid/7d70bc0eed8fd43125ccc2dea5ed1e08'
        if [ x$feature_platform_search_hint = xy ]; then
          search --no-floppy --fs-uuid --set=root --hint='mduuid/7d70bc0eed8fd43125ccc2dea5ed1e08'  a9a66aed-6649-4d9d-9227-7d89f7729daf
        else
          search --no-floppy --fs-uuid --set=root a9a66aed-6649-4d9d-9227-7d89f7729daf
        fi
        linux   /backup/boot/vmlinuz-5.4.0-77-generic root=UUID=a9a66aed-6649-4d9d-9227-7d89f7729daf ro rootflags=subvol=backup  nomodeset consoleblank=0
        initrd  /backup/boot/initrd.img-5.4.0-77-generic
}
permafrost ★★
() автор топика
Последнее исправление: permafrost (всего исправлений: 1)
Ответ на: комментарий от permafrost

Если vmlinuz и initramfs находятся на subvolume бэкап, то путь к этим файлам в grub.cfg должен указывать на этот subvolume.

Нужно ли в linux и initrd менять так же пути, как ниже?

По идее да, так и нужно.

mxfm ★★
()
Ответ на: комментарий от mxfm

Что-то я мозг сломал.

Поправил пути к vmlinuz и initramfs как выше. Перегразружаюсь, сервер больше не пингуется. Ну ок. Через rescue чрутюсь. Смотрю /etc/hostname и вижу там first, и файлы в корне теперь от первой машины. Офигенно, думаю, подхватился снапшот. Смотрю теперь /boot/grub/grub.cfg. Там вместо /backup/boot/vmlinuz-5.4.0-77-generic стоит @/boot/vmlinuz-5.4.0-77-generic. Сначала удивился, потом понял, что это логично. Ведь это /boot/grub/grub.cfg с первой машины. Но тогда вопрос, как тогда вообще грузится(то есть не грузится) машина с снапшота с таким grub.cfg?

На машине через чрут теперь такая ситуация теперь:

root@rescue:/# btrfs sub list /
ID 256 gen 10776 top level 5 path @
ID 258 gen 10631 top level 5 path @home
ID 259 gen 10775 top level 5 path @tmp
ID 260 gen 10777 top level 5 path @logs
ID 261 gen 10765 top level 5 path @cache
ID 292 gen 10789 top level 256 path @/backup

root@rescue:/# btrfs sub get-default /
ID 292 gen 10791 top level 256 path @/backup

И еще вопрос. Как мне теперь получить доступ к старому корню, то есть к сабволюму @

Что-то вообще нифига непонятно(((

permafrost ★★
() автор топика
Последнее исправление: permafrost (всего исправлений: 1)
Ответ на: комментарий от permafrost

Но тогда вопрос, как тогда вообще грузится(то есть не грузится) машина с снапшота с таким grub.cfg?

В grub.cfg должен быть указан путь к subvolume, чтобы с него загрузиться, например /backup/boot/vmlinuz-5.4.0-77-generic.

И еще вопрос. Как мне теперь получить доступ к старому корню, то есть к сабволюму @

mkdir /btrfs_root

mount /dev/xxx /btrfs_root

В указанной директории будут видны все subvolume, то есть например home будет виден как /home и как /btrfs_root/home.

mxfm ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.