Como mover o Linux para outra partição?

9

Eu preciso fazer uma cópia de um sistema linux funcional, que (estando contido em /, e o novo local é preparado em / mnt / sdb5) parece conter uma quantidade considerável de hard-links e arquivos especiais em / dev; cpio lidaria com esse trabalho sem aplicar mágica adicional?

Salvaguardas atualmente conhecidas:

  • não irá remover / modificar o sistema em execução até o momento em que a cópia for considerada inicializável e funcionar com root=/dev/sdb5 ; antes de remover, faça um backup completo da partição.
  • usará o cpio para arquivar cada diretório raiz separadamente; assim, ele será descompactado do ambiente do LiveCD para que a partição do doador não seja prejudicada

Mas ainda assim, não perderá tempo apenas porque o cpio perdeu algum flag e aleijou as permissões / tipo de nó / soft ou hardlink.

Qual ferramenta usar / quais rochas submersas devem ser evitadas?

    
por kagali-san 30.08.2011 / 20:10

4 respostas

10

Para responder à pergunta atual sobre cpio : esses são os sinalizadores que eu usaria para cpio :

find / -xdev -depth \! -path ./lost+found -print0 | cpio --pass-through --null --dot --make-directories --unconditional --preserve-modification-time --sparse /mnt/sdb5

É claro que, como você não está copiando pela rede, basta usar cp :

cp --archive --sparse=always --verbose --one-file-system --target-directory=/mnt/sdb5 /

E se você quiser fazer a cópia várias vezes, rsync é a melhor opção para retomar seus recursos. (Ele também, como cp , manipula ACLs e atributos estendidos e pode, opcionalmente, trabalhar pela rede como cpio . Portanto, é a opção mais útil, exceto para fazer a primeira cópia localmente, o que prefiro fazer usando cp .)

rsync --archive --inplace --hard-links --acls --xattrs --devices --specials --one-file-system --8-bit-output --human-readable --progress / /mnt/sdb5

Não se esqueça de copiar /boot e /dev !

/boot é fácil, basta copiá-lo. Mas /dev é muito mais complicado hoje em dia, já que está oculto por udev . Eu recomendo o seguinte procedimento:

  1. mkdir /tmp/dev
  2. mount --move /dev /tmp/dev
  3. Copie /dev para /mnt/sdb5 usando um dos comandos acima
  4. mount --move /tmp/dev /dev
  5. rmdir /tmp/dev
por 31.08.2011 / 08:33
5

Como o @Klox mencionou, ao copiar partições do mesmo tamanho, concordo em usar dd .

Mas quando você quiser copiar um disco para uma partição diferente com tamanho diferente, prefiro usar rsync . Monte a nova partição (digamos / mnt / new) e:

# rsync -a --exclude=/proc --exclude=/dev --exclude=/sys / /mnt/new

Não há mágica adicional para links simbólicos e não há necessidade de live cd (um único usuário / init 1 fará muito bem).

    
por 31.08.2011 / 03:23
3

A variante mais ideal de dd é usar partimage , ele copiará apenas a seção usada do particionamento fazendo cópia de grandes partições não utilizadas mais conveniente.

Observe a importante advertência:

Partimage does NOT support Ext4 which is the default on new Ubuntu installations.

Uma cópia conveniente está incluída na distribuição CD de resgate do sistema .

    
por 31.08.2011 / 09:22
2

Ao mover instalações do Linux entre discos rígidos, sempre inicializo de um Live CD e uso dd para copiar a partição inteira. Eu reconheço que isso não lida com mudanças no tamanho do disco (inevitavelmente o novo disco é maior, o que simplifica as coisas), mas eu gosto da técnica exatamente pelas razões que você está preocupado em usar cpio : algo pode dar errado. Usando a técnica dd , é tudo ou nada: o novo disco é inicializado e tudo é o mesmo, ou o disco não inicializa. Não há risco de problemas ocultos aparecendo mais tarde.

Agora, é claro, há o problema de a partição não preencher o novo disco, mas eu prefiro apenas criar uma nova partição para preencher o espaço extra e contar com links simbólicos para mover os diretórios. (Tenho certeza que há ferramentas para redimensionar partições também, mas eu não as usei.)

    
por 31.08.2011 / 00:48