LINUX.ORG.RU

Создать btrfs subvolume уже на рабочей системе

 ,


1

1

Приветствую, интересует вопрос по созданию subvolume на готовом linux, если это конечно возможно. Мне нужно для снимков в timeshift (@ @home @log) Переискал интернет, самостоятельно найти не могу. Везде инструкции предназначенные для создания сабволов при установки системы. Так уж случилось, что имею только один раздел на диске с корневым каталогом.

sdb           8:16   0 223,6G  0 disk 
├─sdb1        8:17   0   100M  0 part /boot/efi
├─sdb2        8:18   0    16M  0 part 
├─sdb3        8:19   0   123G  0 part 
└─sdb4        8:20   0 100,5G  0 part /

sdb3 - винда. sdb1 - esp, где лежит refind. Grub для linux нет. Первоначально постарался подготовить refind для определения btrfs и его сабволов(уж не знаю как сработает). Рассчитывал, что потом установлю сабволы.

Может найдётся эксперт, и объяснит новичку? Сижу на arch. Сам я в linux сфере около двух месяцев.

UPD

РЕШЕНИЕ:

В общем у меня всё получилось, вопрос закрыт. Специально для этого проводил эксперимент на arch linux в виртуальной машине. Выкладываю сюда мои действия. Может кому-нибудь пригодится. Также расскажу как настроить refind в зависимости от местонахождения boot.

К примеру имею каталог btrfs без сабволов:

/dev/sda3    /           btrfs    
/dev/sda2    /boot       ext4   
/dev/sda1    /boot/efi   vfat    


В процессе произвёл классическую установку refind(только для UEFI):
pacman -S refind gdisk
refind-install
У меня лично refind сразу же подхватывает EFI раздел.

Теперь переходим непосредственно к созданию разделов subvolum

Гружусь с livecd флешки.

Монтирую нужный том btrfs:

mount /dev/sda3 /mnt
lsblk               #Проверяю каждый раз, чтобы не ошибиться
cd /mnt

Создаю волюмы:

btrfs su cr @  #Корневой раздел
btrfs su cr @var
btrfs su cr @home
btrfs su cr @snapshots

и теперь грубо перемещаю всё в @, естественно кроме var, home, snapshots, так как для них созданы свои разделы. Предварительно просматриваю всё содержимое корня командой ls, что бы потом перечислить их:

mv {boot,bin,dev,etc,lib,lib64,root,mnt,opt,proc,run,sbin,srv,sys,tmp,usr} @

Копируем всё содержимое папок var, home и .snapshots в @var, @home и @snapshots:

cp var/. @var
cp home/. @home 
cp .snapshots/. @snapshots
в моем случае в папках home и snapshots ничего нет, так что я этого не делаю

Проверяем:
ls
у меня выходит так:

home var @ @home @snapshots @var

проверяем отдельно:

ls /mnt/@
ls /mnt/@var
ls /mnt/@home
ls /mnt/@snapshots

в принципе после проверки я лично удалил папки home snapshots var
и получается теперь так:

@ @home @snapshots @var

заранее можно создать пустые папки в каталоге:
mkdir /mnt/@/{var,home,.snapshots}

да-да я нашёл для себя нелёгкий путь, если что можете поправить меня

Выхожу из mnt и отсоединяю

cd ..
umount /mnt
lsblk  #проверочка

По новой монтирую, но с учётом сабволов:

mount -o subvol=@ /dev/sda3 /mnt
mount -o subvol=@var /dev/sda3 /mnt/var
mount -o subvol=@home /dev/sda3 /mnt/home
mount -o subvol=@snapshots /dev/sda3 /mnt/.snapshots
mount /dev/sda2 /mnt/boot
mount /dev/sda1 /mnt/boot/efi

lsblk

name       SIZE        MOUNTPOINTS
sda1       300M        /mnt/boot/efi
sda2       500M        /mnt /boot
sda3       59.2G       /mnt/.snapshots
                       /mnt/home
                       /mnt/var
                       /mnt/


Пытаюсь причрутиться:

arch-chroot /mnt
И О БОГИ! Всё получилось

дальше снова выхожу из чрута, копирую fstab на всякий случай, и создаю новый:

exit
cp /mnt/etc/fstab /mnt    #пожалуй оставлю его в корне, вроде не мешает
genfstab -U /mnt > /mnt/etc/fstab
cat /mnt/etc/fstab  #Проверяю

Если на этом этапе у вас всё получилось, и создался новый fstab, где соответствуют ваши каталоги и сабволы, то мы продолжаем. Дальше буду настраивать связь с refind.

Сразу рассказываю, есть различия в настройках refind, в зависимости где будет находится boot.

Узнаю UUID раздела с btrfs:

blkid /dev/sda3
Фотографирую UUID или PARTUUID на камеру

Закидываю в папку нужный драйвер:

cp /mnt/usr/share/refind/drivers_x64/btrfs_x64.efi /mnt/boot/efi/EFI/refind/drivers_x64/btrfs_x64.efi

Если boot на отдельном разделе:

nano /mnt/boot/refind_linux.conf

По этому пути у меня находится конфиг

Вношу строчку:

“Boot subvol root” “root=”PARTUUID=******** rw rootflags=subvol=@”
вместо ******** ввел свой код
@ - это мой корень

По поводу UUID или PARTUUID для системы не принципиально. Естественно если вы впишите root=PARTUUID, а введёте код UUID, то ничего не найдёт.

Остальные строчки можно закомментить, чтобы не мешали

Если boot в разделе subvolume:

nano /mnt/boot/refind_linux.conf
“Boot subvol root boot” “root=”PARTUUID=******** rw rootflags=subvol=@ initrd=@\boot\initranfs-linux.img”

По идее refind легко находит ядра, даже без дополнительной команды в конфиге, но пускай будет

Ответ на: комментарий от NyXzOr

NyXzOr

/dev/sdb4 on / type btrfs (rw,noatime,max_inline=256,compress=zstd:1,ssd,discard=async,space_cache=v2,subvolid=5,subvol=/)

sizmen ()

Может найдётся эксперт, и объяснит новичку?

Лучшим решением является купить новый носитель информации, и делать всё на нём. Носителей информации много не бывает, стоят они недорого, а действие по покупке сэкономит много времени, за которое можно заработать денег больше, чем ты потратишь на иные мучения.

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

Shushundr, в том то и дело, что у меня есть старенький ssd на 60G, на нём уже стоит arch с lts ядром на ext4, он в целом для резервных нужд, по типу - восстановление основной системы, которая стоит рядом с виндой. Я уже как два месяца веду путь плотного познания линукса. Поэтому некие препятствия мне только в плюс. И насилие дисков оправдано. Тем более со временем всё меньше и меньше занимаюсь эксплуатацией железа, сейчас в принципе осел на Арче, и всё устраивает. Ещё хотелось бы снимки освоить, чтобы уметь восстанавливать систему разными путями.

sizmen ()

Эксперты поправьте, если не так.

Сделать снапшот в /@. Поправить refind, чтобы грузилось с /@. Сделать сабволюмы /@home и /@log. Всё смонтировать. Перетащить в сабволюмы файлы из /@/home и /@/var/log (или куда там должен будет монтироваться @log). Поправить новый fstab, который в /@, указав монтирование /@, /@home,/@log. После успеха настройки и перезагрузки смонтировать и почистить старый корень /.

Как это потом засунуть в timeshift не подскажу. Читай вики.

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

интересует вопрос по созданию subvolume на готовом linux

1. Загрузись с livedvd какой по вкусу.

2. Создай субтома по вкусу.

3. Перемести туда файлы.

4. Поправь fstab с учетом новых субтомов.

Кажется таких действий должно хватить.

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

NyXzOr, А, тесть получается грубое копирование в новые сабволы, попробую протестить на виртуальной машине:>

sizmen ()
Ответ на: комментарий от NyXzOr

Как это потом засунуть в timeshift не подскажу. Читай вики.

Проверить наличие старых снапшотов

sudo timeshift --list --snapshot-device /dev/ХХХХ
При их наличии
sudo timeshift --delete --snapshot 'ХХХХ-ХХ-ХХ_ХХ-ХХ-ХХ'

Timeshift сам все найдет. Максимум можно передернуть btrfs-rsync режим.

hargard ()

В общем снова привет) хотел всё это проделать, но так и не получилось, запорол на самом невероятном, удалил случайно рут( В теории всё это можно проделать, но видимо пока скилл не вырос, так что лучше сразу всё по уму делать. Спасибо всем, кто откликнулся.

sizmen ()
Ответ на: комментарий от NyXzOr

NyXzOr, сложно это признавать, но я чет поверил в свои силы на миг, посчитал, что так или иначе смогу вернуть все файлы на места. В принципе все файлы установил в субволы, но у меня система не вошла в chroot, уже не скажу какая там ошибка была, монтировал по правилам. На другой системе с сабволами всё нормально чрутилось, и тут уж я решил продолжить экспансию, задумал рут вынести в отдельный сабвол, и самый прикол, что я перепутал команду удаления и перемещения, так ещё и ключ -r накинул:) В целом и в общем думаю: а нужны ли мне снимки, и даже если сделаю, то ещё нужно с refind что-то решить, ведь его система не впустила из-за отсутствия рута. Хотя вот прям сейчас пришла мысль почему не впустила, и скорее всего из-за того что я указал /dev/sdb вместо UUID, раньше это ещё выходило, потому что сабволов не было. И как можно заметить, boot при этом на отдельный парт не вынес, 1 к 1 всё сходится(но это ещё не точно). А то насмотрелся разных блогеров, у всех разные конфигурации сборок, а я решил франкештейна собрать из их гайдов. буду дальше изучать:)

sizmen ()

Я в принципе смог перенести и fstab сгенерировать, вот только пока не знаю что с refind делать. Вот не даёт никак зайти в систему. Смотрел на wiki arch тему по refind, там есть эта тема, но больно не понятно. Может кто нибудь объяснить?

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

mount -t btrfs -o subvolid=0 /dev/sd** '/mnt' Вместо sd** впиши свой диск.

А потом просто делаешь снапшот корня.

btrfs subvolume snapshot / '/mnt/@'

Собственно все.

Vochatrak-az-ezm ()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.