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