Como renomear um subvolume BTRFS?

24

Eu tenho um sistema de arquivos BTRFS com um conjunto de subvolumes. Por enquanto, tudo bem. Eu preciso alterar o nome de um subvolume, infelizmente o btrfsprograma não me permite renomear um subvolume. Pesquisando com o Google produziu alguns resultados, um disse que posso apenas mv, o outro disse que posso apenas snapshotpara um novo nome e excluir o subvolume antigo. Antes de travar minha partição e ter que recarregá-la do backup (é bastante grande), minha pergunta é:

  • Qual é atualmente a melhor maneira de renomear um subvolume?
  • Está tudo bem em apenas mvisso, ou invalidará algumas estruturas internas?
  • Fazer um novo instantâneo e remover o subvolume antigo é o caminho a seguir, ou isso tem algumas desvantagens?

Sei que tudo ainda é experimental, mas, para meus propósitos, tem funcionado muito bem (até agora e tenho backups incrementais a cada dia).

hochl
fonte
1
feliz em saber que o btrfs está funcionando bem para você. Está funcionando bem para mim também até agora. Sem problemas.
MountainX para Monica Cellio

Respostas:

16

Apenas mvisso. Essa é a maneira recomendada na documentação da comunidade Ubuntu .

E para esclarecer melhor por que essa é a maneira correta de fazê-lo, aqui está uma citação do guia sysadmin btrfs:

Instantâneos

Um instantâneo é simplesmente um subvolume que compartilha seus dados (e metadados) com outros subvolumes, usando os recursos COW do btrfs. Depois que um instantâneo [gravável] é feito, não há diferença no status entre o subvolume original e o novo subvolume de instantâneo. Para reverter para um instantâneo, desmonte o subvolume original modificado e monte o instantâneo em seu lugar. Nesse ponto, o subvolume original pode ser excluído, se desejado. Como uma captura instantânea é um subvolume, as capturas instantâneas de capturas instantâneas também são possíveis.

MountainX para Monica Cellio
fonte
8

há algumas coisas importantes a serem observadas. As nomeações:

btrfs Subvolume - insidesistema de arquivos independente para contêiner de dados . É representado como diretório do FS existente. Se você criar um novo subvolume, ele estará vazio, pronto para usar o bloco de dados lógicos dentro do sistema de arquivos. Muito conveniente de usar onde os dados devem ser logicamente separados, por exemplo, VMs diferentes ou clientes diferentes em subvolumes diferentes. Isso permite a very fastremoção de todos os blocos de dados lógicos com apenas o comando delete subvolume.

Snapshot btrfs - uma cópia do existingsubvolume com todos os seus dados no momento em que o snapshot foi concluído. Pode ser usado como backup operacional para reverter configurações ou alterações, por exemplo, fazer uma captura instantânea do subvolume, fazer alterações (VM ou dados), testar se está tudo bem, após algum período de carência, remover a captura instantânea. Importante observar: os snapshots podem ser apenas de leitura ( -rswitch) e, portanto, podem ser usados ​​como blocos de incremento de alterações no FS e possivelmente transferidos para absolutamente outro BTRFS!

Limitações atuais do BTRFS (30-12-2016):

Copiar ou mover dados entre subvolumes, por exemplo, mv dir1/dataset1 dir_subvolume1/produz todo o io real para copiar dados para outro subvolume e, em caso de movimentação, remover do original. E cópia muito eficiente de toneladas de dados apenas fazendo referências e, portanto, usando o recurso COW do BTRFS:

cp -a --reflink=always dir1/dataset1 dir_subvolume1/

e se necessário:

rm -rf dir1/dataset1

Somente leitura O instantâneo do subvolume pode ser renomeado (movido com mv) no nível de diretório existente, mas não pode ser renomeado / movido para um nível de subdiretório diferente. por exemplo, mv /btrfs/subvol_snap1 /btrfs/.snaphotsnão é possível, não produz muito explicou erro: mv: cannot move 'subvol_snap1' to '.snapshots/subvol_snap1': Read-only file system. Para poder mover um instantâneo, é necessário criar um novo instantâneo somente leitura do instantâneo existente somente leitura para o novo local preferido e, em seguida, remover o antigo:

btrfs sub snap -r /btrfs/subvol_snap1 /btrfs/.snaphots/subvol_snap1
btrfs sub del /btrfs/subvol_snap1

Apenas para uma vida mais fácil:

btrfs sub list /btrfs

Espero que isso economize muito tempo para todos os novos fãs de btrfs :)

Arunas Bartisius
fonte
4

Se você quisesse renomear o volume raiz para um subvolume aninhado, seria necessário capturá-lo instantaneamente e, em seguida, faça um find $ROOT_VOL -xdev -deletepara remover o conteúdo anterior do volume raiz. A manipulação reversa (renomear um subvolume para o volume raiz) não parece possível.

Tobu
fonte