- Sim.
- Não.
Pelo menos não no momento.
Apenas algumas perguntas sobre o Btrfs:
mk_btrfs_subfolder /home
(ou seja qual for o comando), em vez de ter que criar um novo subvolume vazio e copiar tudo de volta? Os comandos para fazer o acima seria bom, mas não necessário, apenas sim / não vai ficar bem e eu posso Google como.
Sim, você precisa montá-lo e, se quiser converter um diretório em um subvolume, o que você pode fazer é criar um instantâneo usando
btrfs su sn <name of subvolume containing folder> @new_subvol
Então você poderia entrar no subvolume e excluir tudo o que não fosse @ new_subvol / home e mover tudo em casa para a raiz do novo subvolume com algo como
mv @new_subvol/home/* @new_subvol
Em seguida, você pode excluir o diretório original e colocar o instantâneo recém-criado em seu lugar.
Can I easily convert an existing directory into a subvolume? (i.e. if I want to make "/home" a separate subvolume can I just go mk_btrfs_subfolder /home (or whatever the command is), instead of having to make a new empty subvolume and copying everything over?
Para subvolumes grandes, a maneira menos ruim de fazer isso é criando o subvolume como um instantâneo e, em seguida, limpando as coisas. Isso evita, na verdade, copiar quaisquer dados de arquivo, embora isso signifique um monte de atualizações de metadados que seriam desnecessárias se isso fosse suportado nativamente.
Andrew menciona isso em sua resposta, mas não dá um exemplo completo, então aqui está um. Eu tomo uma abordagem um pouco diferente dele movendo primeiro os diretórios antigos para que eu possa criar os subvolumes em seus locais finais.
cd /build/
mkdir xxxx
mv *-rpi-staging xxxx
btrfs subvolume snapshot /build /build/wheezy-armhf-rpi-staging
btrfs subvolume snapshot /build /build/jessie-armhf-rpi-staging
btrfs subvolume snapshot /build /build/stretch-armhf-rpi-staging
btrfs subvolume snapshot /build /build/buster-armhf-rpi-staging
cd /build/wheezy-armhf-rpi-staging/
find -maxdepth 1 ! -name xxxx ! -name . -exec rm -rf {} +
(shopt -s dotglob; mv -- xxxx/wheezy-armhf-rpi-staging/* . )
rm -rf xxxx
cd /build/jessie-armhf-rpi-staging/
find -maxdepth 1 ! -name xxxx ! -name . -exec rm -rf {} +
(shopt -s dotglob; mv -- xxxx/jessie-armhf-rpi-staging/* . )
rm -rf xxxx
cd /build/stretch-armhf-rpi-staging/
find -maxdepth 1 ! -name xxxx ! -name . -exec rm -rf {} +
(shopt -s dotglob; mv -- xxxx/stretch-armhf-rpi-staging/* . )
rm -rf xxxx
cd /build/buster-armhf-rpi-staging/
find -maxdepth 1 ! -name xxxx ! -name . -exec rm -rf {} +
(shopt -s dotglob; mv -- xxxx/buster-armhf-rpi-staging/* . )
rm -rf xxxx
Notas sobre este exemplo trabalhado.
Can I easily convert an existing directory into a subvolume? (i.e. if I want to make "/home" a separate subvolume can I just go mk_btrfs_subfolder /home (or whatever the command is), instead of having to make a new empty subvolume and copying everything over?
Eu tive uma versão específica deste problema: Eu tenho um par de subvolumes btrfs de nível superior no meu sistema de arquivos que são capturados por um utilitário chamado snapper em uma programação específica. Infelizmente, isso pode criar bastante inchaço quando se trata de diretórios que mudam constantemente, dos quais eu tinha muitos que eu queria excluir.
Na configuração inicial, excluir caminhos específicos de instantâneos é fácil: basta criar um novo subvolume btrfs no caminho em questão. Infelizmente, é um pouco mais complicado quando você tem um sistema em execução.
Eu achei que isso não seria muito difícil de escrever, então comecei um pequeno script bash. E, claro, esse pequeno script cresceu rapidamente para quase 100 linhas, quando comecei a lidar com diferentes tipos de entrada, bloqueios de arquivos, permissões, etc.
Se você tiver um problema semelhante (sistema de arquivos btrfs gerenciado pelo snapper que gostaria de remover), convido-o a usar (por sua conta e risco): link
Tags btrfs