Posso criar um software RAID 1 com um dispositivo

18

Eu tenho um único disco que eu quero criar um espelho de; vamos chamar esse disco sda . Acabei de comprar outro disco de tamanho idêntico, que podemos chamar de sdb . sda e sdb têm uma partição chamada sda1 e sdb1 , respectivamente.

Ao criar um ataque, não quero limpar meu sda clean e começar de novo, só quero que ele comece a espelhar com sdb . Minha linha de pensamento era fazer:

mdadm --create --verbose /dev/md0 --level=mirror --raid-devices=1 /dev/sda1

... para criar o array sem sdb disk, então execute algo como (eu estou pensando o seguinte comando em voz alta, porque eu não sei como conseguir este passo)

mdadm /dev/md0 --add /dev/sdb1

Nota sdb1 é assumido como formatado de forma semelhante a sda1

Isso é possível?

    
por whoami 06.02.2013 / 11:57

3 respostas

23

A resposta simples para a pergunta no título é "Sim". Mas o que você realmente quer fazer é o próximo passo, que é obter os dados existentes espelhados.

É possível converter o disco existente, mas é arriscado, como mencionado, devido à localização dos metadados. É muito melhor criar um espelho vazio (quebrado) com o novo disco e copiar os dados existentes nele. Então, se não funcionar, basta inicializar o original não espelhado.

Primeiro, inicialize /dev/sdb1 como o novo /dev/md0 com uma unidade ausente e inicialize o sistema de arquivos (estou assumindo ext3, mas a escolha é sua)

mdadm --create --verbose /dev/md0 --level=mirror --raid-devices=2 /dev/sdb1 missing
mkfs -text3 /dev/md0

Agora, /dev/sda1 é provavelmente o seu sistema de arquivos raiz ( / ) então, para segurança, você deve fazer o próximo passo a partir de um live CD, disco de recuperação ou outro sistema inicializável que possa acessar /dev/sda1 e /dev/md0 embora eu tenha conseguido fazer isso largando o modo de usuário único.

Copie todo o conteúdo do sistema de arquivos em /dev/sda1 to /dev/md0 . Por exemplo:

mount /dev/sda1 /mnt/a       # only do this if /dev/sda1 isn't mounted as root
mount /dev/md0 /mnt/b
cd /mnt/a                    # or "cd /" if it's the root filesystem
cp -dpRxv . /mnt/b

Edite /etc/fstab ou garanta que na próxima inicialização, /dev/md0 seja montado em vez de /dev/sda1 . Seu sistema provavelmente está configurado para inicializar a partir de /dev/sda1 e os parâmetros de inicialização provavelmente especificam isso como o dispositivo raiz, portanto, ao reinicializar, você deve alterar isso manualmente para que a raiz seja /dev/md0 (assumindo /dev/sda1 como raiz). Após a reinicialização, verifique se /dev/md0 está montado ( df ) e se está sendo executado como um espelho degradado ( cat /proc/mdstat ). Adicione /dev/sda1 ao array:

mdadm /dev/md0 --add /dev/sda1

Como a reconstrução substituirá /dev/sda1 , a versão de metadados que você usa é irrelevante. Como sempre, ao fazer grandes alterações, faça um backup completo (se possível) ou pelo menos garanta que nada que não possa ser recriado seja seguro.

Você precisará gerar novamente a configuração de inicialização para usar /dev/md0 como root (se /dev/sda1 for root) e provavelmente precisar gerar mdadm.conf para garantir que /dev/md0 seja sempre iniciado.

    
por 06.02.2013 / 13:30
4

Claro, você pode criá-lo especificando que o segundo disco é atualmente missing :

mdadm --create --verbose /dev/md0 --level=mirror --raid-devices=2 missing /dev/sda1
    
por 06.02.2013 / 12:04
3

Você pode fazer isso. Você precisa ser um pouco cuidadoso, mas isso não é perigoso - se você for muito cuidadoso para não digitar nada e não deixar nenhum problema na configuração.

Eu recomendo strongmente não fazer nenhuma das manipulações em um sistema ao vivo. É possível em alguns casos, mas requer cuidado extra. Inicialize a partir de um liveCD / liveUSB, como Parted ou SystemRescueCD .

Primeiro, você precisa reduzir um pouco o volume para criar espaço para os metadados do mdraid (o superbloco). Existem vários formatos de metadados , você deve usar um que coloque os metadados no final do disco. (Em algumas configurações, você pode ter espaço suficiente para colocar o superbloco no começo, mas isso é mais complicado e propenso a riscos, então eu entro nisso.)

Você deve garantir que os últimos 128kB do dispositivo de bloco não sejam usados para liberar espaço para o superbloco. Então você precisará reduzir o sistema de arquivos em /dev/sda1 . Se este for um sistema de arquivos ext2 / ext3 / ext4, obtenha o tamanho atual do sistema de arquivos com tune2fs /dev/sda1 e, em seguida, execute resize2fs /dev/sda1 NNN em que NNN é esse tamanho menos 128kB. Você pode fazer isso com Parted . Se você precisar encolher um sistema de arquivos extN, você precisará desmontá-lo primeiro; um sistema de arquivos btrfs pode ser reduzido ao vivo.

Depois de garantir que os últimos 128kB do dispositivo de bloco estão livres, chame mdadm --create para criar um volume RAID-1. Isso não toca em nenhuma parte do volume além do superbloco. Inicialmente, o volume terá um único componente: todos os outros estão configurados como com falha. Você deve passar --level=1 (ou equivalentemente -n 1 ) (essa abordagem funciona somente para RAID-1) e --metadata=0.9 ou --metadata=1.0 (o formato padrão de superbloco 1.2 coloca o superbloco perto do início do dispositivo, o que pode sobrescrever dados). O argumento para --raid-devices ( -n ) é o número de componentes (incluídos os omissos) no volume RAID.

mdadm --create /dev/md0 --level=1 --raid-devices=2 --metadata=1.0 /dev/sda1 missing

Agora você pode ativar o array e adicionar outros componentes.

mdadm --add /dev/md0 /dev/sdb1

Uma nota sobre bootloaders: o Grub2 entende o Linux RAID-1 e pode inicializar a partir dele. Os gerenciadores de inicialização, como o Grub1, que não entendem o RAID, são lidos de maneira transparente a partir de volumes espelhados, mas o sistema não inicializa se a unidade da qual o gerenciador de partida está lendo falhar. Se o volume RAID estiver em uma partição, certifique-se de instalar o setor de inicialização do Grub nas duas unidades.

¹ Certifique-se de ter backups. "Não é perigoso" significa "você provavelmente não precisará deles", e não "joga seus dados".

Repostado e ligeiramente adaptado de Como configurar o espelhamento de disco (RAID-1)

    
por 07.02.2013 / 02:46

Tags