Como invadir a partição raiz existente?

7

Gostaria de espelhar minha partição raiz (e única) existente em um SSD para outro disco. Deve ser uma espécie de RAID-1, apenas assimétrica * . Eu sei que há a opção mdadm --write-behind , que deve fazer isso.

Mas não tenho ideia se é possível preservar o contexto da partição existente. Eu imagino como

  • crie a partição "escrava"
  • configura o RAID informando que a partição secundária não foi inicializada
  • deixe inicializá-lo clonando a partição principal

mas provavelmente sou muito otimista, não sou?

* Todas as leituras devem acessar o primeiro disco e as gravações devem ser consideradas concluídas quando o primeiro disco é gravado.

    
por maaartinus 10.03.2011 / 11:38

2 respostas

7

Você pode criar uma matriz mdraid RAID-1 começando com uma partição existente. Primeiro, você precisa criar espaço para o superbloco mdadm, o que significa que você precisa reduzir um pouco seu sistema de arquivos.

No momento, o formato normal de superblocos é 0.9 . Sua localização é entre 128kB e 60kB do final da partição, é 4kB longa e inicia em um endereço que é um multible de 64kB. Então reduza seu sistema de arquivos em 128kB, ou mais precisamente para ((device_size mod 64kB) - 1) * 64kB.

Se você quiser mais de 2TB por faixa, é necessário o 1.0 formato de superbloco , que não é compatível com todas as distribuições até o momento. O superbloco 1.0 está no final do dispositivo, o que eu acho que significa que você só precisa reduzir seu sistema de arquivos em 8kB.

Agora que você diminuiu o sistema de arquivos, é possível criar a matriz. Primeiro, crie um array degradado apenas com os dados existentes. Certifique-se de que o sistema de arquivos não esteja montado neste momento. Para seu caso de uso, o bitmap de intenção de gravação deve estar em uma partição separada. Use -e 1.0 para usar o novo formato de superbloco da versão 1.

mdadm --create /dev/md0 -e 0.9 -l 1 -n 2 \
      --write-behind=256 --bitmap=/path/to/bitmap /dev/sda1 missing

Agora você pode montar o sistema de arquivos em /dev/md0 . Adicione o segundo disco ao seu gosto. Os dados serão copiados para a nova unidade em segundo plano.

mdadm --add /dev/md0 --write-mostly /dev/sdb1

Eu criei uma matriz espelhada como essa, mas sem o modo write-behind. Eu não acho que o modo write-behind invalidaria o procedimento.

    
por 10.03.2011 / 20:32
2

Eu tenho uma ideia. Eu testei isso com pequenos sistemas de arquivos em dispositivos de loop, eu recomendo que você faça o mesmo antes de tentar você mesmo. Nesta resposta / dev / sda é seu disco com os dados importantes e / dev / sdb é o novo disco vazio.

export DATA_DISK='/dev/sda'
export EMPTY_DISK='/dev/sdb'
  1. Crie uma matriz RAID1 degradada a partir do disco vazio . Isso é importante!

    mdadm --create /dev/md0 --level=1 --raid-devices=2 "${EMPTY_DISK}" missing
    
  2. Em seguida, reduza o sistema de arquivos no disco que você deseja espelhar. (Espero que seja suportado.) Isso é necessário porque os arrays RAID têm um cabeçalho e o sistema de arquivos completo não cabe no array.

  3. Copie os dados para o novo array degradado .

    dd if="${DATA_DISK}" of=/dev/md0 bs=4k
    
  4. Adicione o disco original ao array.

    mdadm --manage /dev/md0 --add "${DATA_DISK}"
    
  5. Você pode assistir ao progresso da sincronização.

    watch 'cat /proc/mdstat'
    
por 10.03.2011 / 18:51