É seguro obter a imagem da unidade atual em funcionamento?

12

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

  • Posso fazer isso usando ddo sistema operacional que reside no próprio disco rígido ou preciso inicializar a partir 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 ddestiver em execução?

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

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

Marco Sulla
fonte
É importante em qual sistema de arquivos você está usando, em que está interessado? Alguns possuem recursos específicos para esta tarefa.
Vality 07/07

Respostas:

11

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

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

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

  • Congelar sistema de arquivos por comando específico do sistema de arquivos (acredito que xfs_freezeseja um e não conheço outro - mas essa opção existe pelo menos em teoria)
  • Crie um instantâneo do lvm e copie 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. Observe que alguns sistemas de arquivos como o XFS precisam ser congelados primeiro.
  • Use o rsync conforme sugerido por outras pessoas. Agora a cópia está 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 os arquivos (bastante improvável, mas pode-se imaginar arquivos ausentes enquanto o mv é executado em segundo plano, por exemplo)
  • Use o sistema de arquivos com snapshots, como btrfs , tux3 , zfs , nilfs ... Então evite os dois problemas - você pode simplesmente criar um snapshot e copiá-lo pelo rsync com atomicidade total. Observe, no entanto, que esse sistema de arquivos geralmente costuma ser experimental.

Como última observação - ddpode não ser a melhor maneira de fazer backup. Ele copia um disco completo, que geralmente é um desperdício quando você copia o 'lixo' também. Se você precisar ter imagens de disco, algo como partimage pode ser melhor. Se você não tem 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 no tamanho dos backups.

Maciej Piechotka
fonte
1
+1 Esta é a única resposta que realmente tenta responder a essa pergunta, excelente para realmente ler o que a operação está pedindo e não reclamar sobre como o dd é ruim.
Vality 07/07
+1 para uma boa resposta. Mas eu discordo do discurso retórico. Dd não é ruim. É apenas inapropriado para isso e explicar por que é esse o caso é uma coisa boa.
Hennes 07/07
O ponto 4 do marcador possui as mesmas limitações do número 2, certo? Um aplicativo pode estar no meio da emissão de gravações e o instantâneo não sabe nada sobre a transação no nível do aplicativo.
Ben Voigt
Obrigado, responde a pergunta. A resposta dos goldilocks também é boa, mas estou interessado em fazer backup não apenas do meu disco rígido, mas também de outros dispositivos de armazenamento, e talvez eu tenha que escrevê-lo antes.
Marco Sulla 07/07
O @BenVoigt - até certo ponto - elimina uma camada (sistema de arquivos) e o AFAIK é a mais 'frágil'. Mesmo assim, em alguns casos, é possível encontrar arquivos semi-escritos, mas se o aplicativo não os tratar, os arquivos também poderão ser corrompidos em muitas outras circunstâncias (OOM, falha, etc.).
Maciej Piechotka
7

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

  • Vai perder muito tempo copiando seções vazias da partição.

  • Pode levar a inconsistências se o sistema de arquivos estiver montado no momento, em parte porque é uma entidade no nível do SO e pode estar fora de sincronia com o dispositivo de bloco subjacente. Ligar syncinicialmente não ajudará muito com isso, pois o processo não é instantâneo.

Use cp -aou em rsyncvez disso. Você precisará criar a partição de destino, é claro, para que não seja tão fácil, mas é muito mais seguro e flexível. Se você precisar criar uma imagem do sistema de arquivos , veja abaixo.

Se você pretende copiar o sistema de arquivos raiz, absolutamente não o utilize dd. Você deve usar algo como rsync -ax(ou cp -axem diretórios individuais de nível superior), porque há várias 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 realmente 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 executar um sistema com ele, isso representará apenas espaço desperdiçado, pois a interface real será montada no topo. Outros contêm informações temporárias em uso pela execução de processos e esses são mais um problema, pois o sistema não poderá resolver o lixo se você o copiar.

Se você deseja 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 countse você quiser outro tamanho. Crie, por exemplo, um extsistema de arquivos no arquivo :

mke2fs whatever.img

Ele avisará que este não é um dispositivo de bloco real. Continuar. Agora monte o arquivo de imagem:

mount whatever.img /mnt/img

/mnt/imgdeve existir, mas poderia qualquer coisa. Agora você pode rsync(ou cp -a) entrar /mnt/img. O conteúdo permanecerá dentro whatever.imgquando você o desmontar.

Contudo...

Só para esclarecer, use o método de imagem do sistema de arquivos descrito acima apenas se você precisar absolutamente de um arquivo de imagem por qualquer motivo. Se 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 nessa unidade, monte-a e copie nela. Você pode 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 implantar isso em uma partição existente (vazia ou não), colocando-a no nível superior e usando:

tar -xzf myarchive.tar.gz

Cuidado que substituirá os arquivos existentes se seus caminhos corresponderem a algo no arquivo morto. Caso contrário, deixará a hierarquia de diretórios existente a mesma.

Cachinhos Dourados
fonte
A gravação com +1 em um arquivo de imagem vazio é muito boa, mas que vantagens isso tem sobre salvar em um arquivo .tar ou .tgz?
Creek
@ Creek Não possui vantagens, exceto que a imagem é montável. Eu adicionei que, caso o objetivo do OP aqui seja produzir uma imagem que possa ser usada em bruto. Caso contrário, é melhor usar um arquivo, pois ele não é de tamanho fixo. Vou acrescentar uma ressalva mais clara sobre isso.
Goldilocks
Entendi, acho que não. Ainda é um método interessante para armazenar arquivos.
Creek
2
@mpy Tanto o GNU coreutils cpquanto o rsync têm a opção -xde evitar recursão em outros sistemas de arquivos. A resposta de Maciej explica melhor por que ddé absolutamente inapropriado aqui (é quase garantido que você produza uma cópia inutilizável, a menos que você tome as precauções listadas por Mark , devido às gravações que ocorrerão durante a cópia).
Gilles 'SO- stop be evil'
2
ddnão copiará coisas que não são diretórios reais no disco, por isso não sei de onde vem o seu primeiro ponto. Por exemplo, dispositivos montados /mnt, nós dentro /proc, etc. não fazem parte dos dados que são ddcapturados, pois não estão no disco. Para sistemas de arquivos não montados, ddé perfeitamente válido; você acaba com uma duplicata exata. A única razão pela qual é inadequado para sistemas de arquivos montados é que os dados no sistema podem mudar / ser parcialmente gravados durante o longo período de tempo necessário ddpara operar.
Jason C
1

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

Algumas advertências:

  • você deve adicionar as opções apropriadas de sopa de letrinhas
  • caminhos são bastante críticos
  • é necessária uma lista de exclusão 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 sob demanda, excluir antes, mover ...
  • os backups retomados (ou repetidos) são muito mais rápidos do que outros métodos, pois 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 seu lugar, mas copiam a unidade exatamente como estão, incluindo quaisquer problemas que você possa ter. Um backup de arquivo cria um diretório novo 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.

Paulo
fonte
1

Depende do que você quer dizer com "sistema de trabalho atual". Se você simplesmente deseja evitar o uso de um disco de inicialização e não se preocupa 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 raiz em que você está trabalhando - não tente isso em 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 só de leitura: mount -o ro /.
  5. Monte seu disco rígido externo (você provavelmente receberá um aviso sobre a impossibilidade de gravar /etc/mtab; ignore).
  6. Faça seu backup.
  7. Desmonte o disco rígido externo.
  8. Reinicie. Você fez uma bagunça no seu sistema chegando aqui, e a reinicialização é a maneira mais rápida de colocá-lo de volta 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 (demorando horas ou dias), os backups são enormes (portanto, você não pode manter mais do que alguns) e é incrivelmente perturbador o uso do sistema que está sendo suportado acima. Para backups diários, recomendo algo que funcione no nível do sistema de arquivos, como rsnapshot.

Marca
fonte
Observe que a etapa 4 pode ser perigosa em alguns sistemas de arquivos, pois eles escrevem mesmo no modo somente leitura. Também em sistemas mais modernos (Linux, algo que eu acredito), você pode simplesmente conectar-se /etc/mtaba /proc/self/mount- que funcionará mesmo quando você tiver coisas como chroots ou namespaces fs.
Maciej Piechotka
1
@MaciejPiechotka Não conheço nenhum sistema de arquivos que grave enquanto montado no modo somente leitura e acho isso muito estranho. Alguns sistemas de arquivos gravam na montagem no modo somente leitura se o sistema de arquivos não foi desmontado anteriormente de maneira limpa, portanto a etapa mount -o remount,ro /pode ser gravada. Mas, quando esse comando retornar, em que situação ocorreriam gravações subsequentes?
Gilles 'SO- stop be evil'
Os "programas não essenciais" a serem desligados terão que incluir criticamente o subsistema de registro em log, que eu não consideraria não essencial.
Gilles 'SO- stop be evil'
@Gilles, para fins de criação de uma imagem de disco do disco de inicialização, qualquer programa não diretamente envolvido na criação da imagem não é essencial.
Mark
Vale a pena mencionar o modo de usuário único que pode ajudar aqui.
Validade 07/07
1

Use Clonezilla , a sério. É o melhor utilitário do tipo Norton Ghost, de código aberto, baseado em Linux. Ele fará a clonagem de partição e de disco completo, sistema de disco para disco ou disco para arquivo (salvar como um arquivo). Ele suporta a maioria dos sistemas de arquivos Linux, NTFS, FAT32 e muito mais. Ele pode salvar em um disco interno, uma unidade externa ou mesmo através da rede em compartilhamentos SMB ou NFS.

É muito fácil de usar e economiza muito tempo.

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

sleblanc
fonte
+1: não responde à pergunta, mas parece ser uma boa sugestão para o backup do disco rígido.
Marco Sulla 07/07