Tento migrar um sistema de arquivos raiz do ext4 para outro tipo de partição (zfs) e comecei com um simples
rsync -a --exclude=/boot --exclude=/mnt --exclude=/media --exclude=/tmp
--exclude=[all zfs pools with default mountpoint]
/ /target/directory/mountpoint/
então a transferência travou em arquivos diferentes /proc
, após a adição --exclude=/proc
rsync
travou em um arquivo em /sys/devices
, o que me levou a desistir de tentativa e erro. Depois de ler man proc
e sobre /sys
(Wikipédia) Sei que é preciso mais pesquisa do que uma solução simples para encontrá-la. Espero que alguém possa ajudar. O sistema raiz é o Ubuntu 14.04 amd64 (o sistema live também, mas fique à vontade para fazer sugestões se isso for um problema limitante).
É claro que é fácil inicializar em um sistema ativo e copiar os dados lá, mas esta é uma solução alternativa apenas para a questão.
Responder1
Vou começar com um aviso de isenção de responsabilidade, pois não tenho um sistema que possa usar para testar se a inicialização realmente funcionará. Esta resposta é baseada no meu entendimento e você só deve tentar isso em um sistema de desenvolvimento até confirmar que funciona.
Como todos os sistemas de arquivos virtuais são sistemas de arquivos virtuais, acho que o sistema operacional deve criar seu conteúdo na inicialização /dev
. Se isso for verdade, você deverá ser capaz de fazer:/sys
/proc
rsync -ax / /target/directory/mountpoint
O -x diz ao rsync para não cruzar os limites do sistema de arquivos, portanto, ele ignorará os sistemas de arquivos virtuais e não será necessário especificar os pools zfs. Ainda criará os pontos de montagem, mas eles estarão vazios.
Se o seu /tmp não for sua própria partição e você não quiser copiar esses arquivos, ainda será necessário copiá --exclude
-lo manualmente.
Responder2
Verifique se você está executando o LVM. Nesse caso, você pode fazer instantâneos do sistema de arquivos usando LVM e depois copiar a partir daí.
Eles foram inventados porque os backups precisam ser criados a partir de um sistema de arquivos inativo ou o backup não é muito útil. Os instantâneos resolverão tanto o problema entre dispositivos quanto o problema de arquivo transitório.
Observe que se você tiver arquivos grandes, como bancos de dados, que estão ativos, o rsync e outros backups provavelmente produzirão versões inconsistentes, pois partes do arquivo serão copiadas antes de uma alteração no banco de dados e outras copiadas depois. Os instantâneos também são uma tentativa de resolver esse problema.
Nota: o btrfs possui uma forma superior de captura instantânea do sistema de arquivos, mas se você já estiver executando o ext4, desta vez será tarde demais para isso.
Responder3
Adjunto: Se puder (você pode se estiver no console local, não pode se estiver conectado via ssh ou precisar manter o sistema totalmente funcionando), mude para o nível de execução 1 ("modo de usuário único", o comando é "init 1") antes de fazer tal coisa. Isso interromperá todos os processos não essenciais que possam alterar as coisas no sistema de arquivos enquanto você o copia.
Lembre-se de ajustar seu fstab, especialmente se UUIDs forem usados.
Considere usar "chroot /where/the/new/root/is/mounted /bin/bash" para testar seu sistema de arquivos recém-replicado e, possivelmente, para reinstalar seu carregador de boot. Talvez seja necessário montar manualmente /proc e /sys no chroot.
Se estiver reinstalando um gerenciador de inicialização a partir do chroot, certifique-se de que /etc/mtab (no sistema com chroot) não contenha lixo que confunda o instalador do carregador. Se for grub 1.x , talvez seja necessário excluir o (novo) arquivo /boot/device.map.
Se você quiser jogar pelo seguro com /dev, você pode preenchê-lo (no novo sistema de arquivos) com "MAKEDEV genérico" - isso criará um conjunto de arquivos de dispositivo "abaixo" do ponto de montagem do udev que evitará que seu sistema trave fortemente na inicialização, caso o udev não esteja funcionando.