Como substituir o subvolume raiz do btrfs pelo instantâneo recebido?

1

Eu quero converter meus sistemas de arquivos btrfs (não particionados) de disco inteiro existentes em bcache.
Para fazer isso, preciso mover os dados e reformatar as unidades.
Eu tenho espaço suficiente em disco para fazer isso em poucos passos.

Como estou usando o btrfs, achei que btrfs send e btrfs receive facilitariam isso.

Eu criei um snapshot readonly do fs que eu quero converter primeiro e comecei a enviá-lo para um subvolume em outro fs.

O que eu não sei é como eu iria restaurar esse subvolume duplicado no disco original assim que minhas conversões de superblocos acontecessem.

A página btrfs receive indica que ela só pode criar novos subvolumes e também os torna somente leitura quando o processo é concluído.

Então, como substituo um novo subvolume de raiz gravável de um instantâneo recebido?

    
por Cobra_Fast 12.05.2018 / 21:06

1 resposta

1

So how do I replace a fresh writable root subvolume from a received snapshot?

Você não pode.

No seu caso, o subvolume de nível superior (raiz) (que é o ID 5) é o / do seu sistema de arquivos Linux; Nada pode existir adjacente a ele. Como você descobriu, btrfs-receive cria um subvolume somente leitura, então o que você precisa fazer é criar um subvolume de snapshot de leitura-gravação a partir do somente leitura, e para isso você precisa ser capaz de criar um subvolume fora de / ; Portanto, você não pode substituir o subvolume de nível superior.

Observe que você disse:

I have created a readonly snapshot of the fs I want to convert first and started sending it into a subvolume in another fs.

O que você fez, porém, é criar um instantâneo somente leitura de um subvolume , não do sistema de arquivos BTRFS como um todo. Eu não vejo como você seria capaz de criar um instantâneo do nível superior. Estranho.

Sua melhor aposta é usar uma ferramenta como partclone para fazer backup de todo o sistema de arquivos e restaurá-lo. Caso contrário, você teria que alterar o layout do subvolume flat , que é o que você tem, para aninhado . Com um layout aninhado, você teria algo assim:

/ (top-level)
|
|__ /rootfs (subvolume)
|   |
|   _/home
|
|__ /rootfs-backup (read-only subvolume, which you can delete later)
|   |
|   _/home

Um layout aninhado oferece a capacidade de criar instantâneos de qualquer subvolume no sistema de arquivos (exceto o nível superior, que você não precisaria fazer de qualquer maneira). Então você simplesmente montaria o rootfs subvolume em / , em vez de todo o sistema de arquivos. Por exemplo: mount -t btrfs /dev/sda1 -o defaults,subvol=/rootfs

    
por 12.05.2018 / 22:24