É seguro tirar a imagem da unidade da unidade de trabalho atual?

13

Eu tenho que fazer backup do meu disco rígido. Eu quero usar dd e colocar a imagem em um disco rígido externo.

  • Posso fazer isso usando dd do sistema operacional que reside no disco rígido ou preciso inicializar de outro dispositivo, por exemplo, um LiveCD?
  • É seguro, em geral, tirar a imagem de um dispositivo, se o dispositivo estiver montado e funcionando?
  • E se o dispositivo estiver montado, mas tenho certeza de que não há outra operação de E / S, enquanto dd está em execução?

Tenho certeza de que rsync é a melhor ferramenta para backups, especialmente os incrementais.

Mas estou interessado em dd , porque quero fazer o backup de outros dispositivos de armazenamento e também copia os dados armazenados em um espaço não particionado. Por exemplo, meu leitor de livros eletrônicos usa um espaço não particionado para armazenar o uboot, o kernel e outros dados.

    
por Marco Sulla 06.07.2014 / 15:36

5 respostas

12

Em geral, não é seguro. O FS assume que as operações são escritas em determinada ordem para que possa gravar novos dados do arquivo e, em seguida, fazer um ponteiro para ele a partir de outros dados, os detalhes exatos dependem do sistema de arquivos. Imagine se acontecer o seguinte:

  1. dd lê a localização X que contém lixo ou alguns dados
  2. Sistema de arquivos grava no local X
  3. Sistema de arquivos grava na localização X + 1 ponteiro para o local X
  4. dd lê da localização X + 1 link para a localização X

Do ponto de vista do backup, você obtém dados de lixo. No entanto, existem várias maneiras de contornar isso:

  • Congelar o sistema de arquivos pelo comando específico do sistema de arquivos (acredito que xfs_freeze seja um e eu não conheço nenhum outro - mas essa opção existe pelo menos em teoria)
  • Crie um instantâneo lvm e copie a partir dele. A cópia será como se você reinicializasse o computador (menos a reordenação do disco rígido), por isso será um sistema de arquivos sujo, mas a cópia será atômica. Note que alguns sistemas de arquivos como o XFS precisam ser congelados primeiro.
  • Use o rsync conforme sugerido por outras pessoas. Agora a cópia é segura e você não precisa de LVM, mas a cópia não é atômica. Portanto, embora evite o problema acima no nível do sistema de arquivos, ele ainda pode ter problemas com arquivos (bastante improvável, mas pode-se imaginar a falta de arquivos, enquanto o mv é executado em segundo plano, por exemplo)
  • Use o sistema de arquivos com snapshots, como btrfs , tux3 , zfs , nilfs ... Então você evita ambos os problemas - você pode apenas criar um snapshot e copiá-lo pelo rsync com total atomicidade. Note, no entanto, que esse sistema de arquivos costuma ser experimental.

Como última nota - dd pode não ser a melhor forma de backup. Ele copia um disco inteiro que costuma ser um desperdício, pois você também copia o 'lixo'. Se você precisa ter um disco de imagens algo como partimage pode ser melhor. Se você não tiver uma opção melhor, use rsync, tar no modo diferencial / incremental etc. ou um sistema de backup completo, como bacula , tarsnap ou um dos muitos outros. A desduplicação de dados pode fazer maravilhas pelos tamanhos dos backups.

    
por 06.07.2014 / 23:26
8

Depende de para que serve exatamente a partição e qual é o propósito da cópia. No entanto, direi que, em geral, dd é uma ferramenta inadequada para fazer backup de sistemas de arquivos . Não é para isso que foi planejado.

  • Perderá muito tempo copiando seções vazias da partição.

  • Isso pode levar a inconsistências se o sistema de arquivos estiver atualmente montado, em parte porque é uma entidade no nível do sistema operacional e pode estar fora de sincronia com o dispositivo de bloco subjacente. Chamar sync inicialmente não ajudará muito nisso, já que o processo não é instantâneo.

Use cp -a ou rsync . Você então precisa criar a partição de destino, é claro, então não é tão simples, mas é muito mais seguro e flexível. Se você precisar criar um sistema de arquivos imagem , veja abaixo.

Se você pretende copiar o sistema de arquivos raiz, não use absolutamente dd . Você deve usar algo como rsync -ax (ou cp -ax em diretórios de nível superior individuais), porque há um monte de coisas que NÃO devem estar na cópia . No Linux, isso inclui:

/dev
/lost+found
/mnt
/proc
/run
/sys
/tmp

Algumas delas são na verdade interfaces de kernel e não diretórios reais no disco. Se você copiá-los, estará copiando um monte de informações que não serão aplicadas na cópia; Se você tentar e executar um sistema com ele, será apenas um espaço desperdiçado, já que a interface real será montada na parte superior. Outros contêm informações temporárias em uso por processos em execução e esses são mais um problema, já que o sistema não poderá resolver o lixo se você copiar isso.

Se você quiser criar um arquivo de imagem do sistema de arquivos raiz (ou qualquer sistema de arquivos), crie um arquivo de imagem vazio - este é um uso apropriado para dd :

dd if=/dev/zero of=whatever.img bs=1024 count=1000000

Essa é uma imagem de 1024 MB (1000000 * 1024). Ajuste count se você quiser outro tamanho. Crie, por exemplo, um ext filesystem no arquivo :

mke2fs whatever.img

Ele irá avisá-lo que este não é um dispositivo de bloqueio real. Prosseguir. Agora monte o arquivo de imagem:

mount whatever.img /mnt/img

/mnt/img deve existir, mas pode ser qualquer coisa. Você pode agora rsync (ou cp -a ) em /mnt/img . O conteúdo permanecerá dentro de whatever.img quando você desmontá-lo.

No entanto ...

Só para ficar claro, use apenas o método de imagem do sistema de arquivos que você acabou de descrever se você realmente precisa de um arquivo de imagem por qualquer motivo. Se o seu objetivo é copiar a partição para outro disco rígido, você não precisa de uma imagem : crie uma nova partição com um sistema de arquivos vazio na unidade, monte-a e copie para lá. Você poderia simplesmente colocar o conteúdo do sistema de arquivos em um diretório vazio e arquivá-lo:

tar -czf myarchive.tar.gz [the directory path]

Você pode então implantar isso em uma partição existente (vazia ou não) colocando-a no nível superior e usando:

tar -xzf myarchive.tar.gz

Tenha em atenção que irá substituir os ficheiros existentes se os seus caminhos corresponderem a algo no arquivo. Caso contrário, deixará a hierarquia de diretórios existente da mesma forma.

    
por 06.07.2014 / 15:56
2

Depende do que você quer dizer com "sistema de trabalho atual". Se você simplesmente quiser evitar o uso de um disco de inicialização e não se importar com a interrupção dos serviços em execução no computador, é possível:

  1. Encerre todos os programas não essenciais (basicamente, tudo, exceto o shell de root em que você está trabalhando - não tente isso de um terminal X, use um shell de console real). O modo de usuário único pode ajudar nisso.
  2. Se você tiver discos montados que não sejam a raiz do sistema, desmonte-os. Não desmonte sistemas de arquivos virtuais como / proc, / sys ou / dev.
  3. Liberar dados em cache no disco restante: sync
  4. Remontar o sistema de arquivos raiz somente leitura: mount -o ro / .
  5. Monte seu disco rígido externo (você provavelmente receberá um aviso sobre não conseguir gravar em /etc/mtab ; ignore-o).
  6. Faça seu backup.
  7. Desmonte seu disco rígido externo.
  8. Reinicie. Você fez uma bagunça em seu sistema chegar aqui, e reiniciar é a maneira mais rápida de voltar ao normal.

Eu uso esse método para criar um arquivo de um computador do qual acabei de atualizar e não espero usar muito mais. Não é um método muito bom para um sistema em uso ativo: é lento (levando horas ou dias), os backups são enormes (então você não pode manter mais do que alguns), e é incrivelmente disruptivo usar o sistema que está sendo copiado acima. Para backups do dia-a-dia, eu recomendo algo que funcione no nível do sistema de arquivos, como rsnapshot .

    
por 06.07.2014 / 22:34
1

O rsync é a ferramenta de escolha para fazer backup de um sistema de arquivos e pode fazer um backup inicializável do sistema operacional em execução.

Algumas ressalvas:

  • você deve adicionar as opções de sopa de alfabeto adequadas
  • os caminhos são bastante críticos
  • uma lista de exclusão é necessária e será diferente para cada sistema operacional e, possivelmente, para cada configuração

Algumas vantagens do rsync sobre outros métodos, como o tar:

  • você pode parar e iniciar o backup a qualquer momento
  • muitas opções para lidar com arquivos substituídos, como excluir por demanda, excluir antes, mover .....
  • Os backups
  • retomados (ou repetidos) são muito mais rápidos do que outros métodos, à medida que os arquivos copiados anteriormente são ignorados. (Aumento de velocidade de 20x é comum)
  • a opção -link-dest pode criar backups com versão enquanto apenas copia novos arquivos

Os backups de imagem têm o seu lugar, mas eles copiam a unidade exatamente como estão, incluindo quaisquer problemas que você possa ter. Um backup de arquivo cria um novo diretório e tem o efeito colateral de linearizar (desfragmentar) sua unidade no processo. Se você quiser fazer 10 cópias idênticas do seu sistema operacional atual, eu usaria o rsync para o mestre de cópias e depois o dd (ou similar) para o resto.

    
por 06.07.2014 / 17:01
1

Use Clonezilla , seriamente. É o melhor utilitário de software livre baseado em Linux do Norton Ghost. Ele executará a clonagem de partição e de disco inteiro, disco-para-disco ou disco-para-sistema de arquivos (salvo como um arquivo). Ele suporta a maioria dos sistemas de arquivos Linux, NTFS, FAT32 e outros. Pode salvar em um disco interno, em uma unidade externa ou até mesmo na rede em compartilhamentos SMB ou NFS.

É muito fácil de utilizar e poupa muito tempo.

Editar: para responder a pergunta, não, você não pode dd da maioria dos sistemas de arquivos enquanto eles estão montados porque você corre o risco de acabar com uma cópia inconsistente do seu sistema de arquivos, pois ler um dispositivo de bloco não é atômico. Por exemplo, se você estiver copiando 100 blocos, o sistema pode ter atualizado o primeiro bloco e o último bloco enquanto você estava apenas na metade, o que significa que sua cópia incluirá o último bloco modificado, mas não o primeiro.

    
por 07.07.2014 / 13:43