Posso criar um software RAID 1 com um dispositivo

20

Eu tenho um único disco do qual desejo criar um espelho; vamos chamar esse disco sda. Acabei de comprar outro disco de tamanho idêntico, que podemos chamar sdb. sdae sdbtenha uma partição chamada sda1e sdb1respectivamente.

Ao criar uma invasão, não quero limpar minha sdalimpeza e começar de novo, só quero que ela comece a espelhar sdb. Minha linha de pensamento era fazer:

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

... para criar a matriz sem sdbdisco, execute algo como (estou pensando o seguinte comando em voz alta, porque não tenho certeza de como realizar esta etapa)

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

A nota sdb1é assumida como sendo formatada de maneira semelhante asda1

Isso é possível?

Quem sou eu
fonte
Sim você pode. Não é tão simples quanto --add, e você precisa ter cuidado, mas não é muito complicado. Consulte Como configurar o espelhamento de disco no Ubuntu? (Não posso propor essa pergunta como duplicada por causa das novas regras.)
Gilles 'para de ser mau'

Respostas:

28

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

É 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 reiniciar o original não espelhado.

Primeiro, inicialize /dev/sdb1como o novo /dev/md0com 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/sda1provavelmente é o seu sistema de arquivos raiz ( /), por segurança, você deve executar a próxima etapa em um CD ao vivo, disco de recuperação ou outro sistema inicializável que possa acessar os dois /dev/sda1e, /dev/md0embora eu tenha feito isso com êxito, passe para o modo de usuário único.

Copie todo o conteúdo do sistema de arquivos /dev/sda1para /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/fstabou garanta que, na próxima inicialização, /dev/md0esteja montado em vez de /dev/sda1. Seu sistema provavelmente está configurado para inicializar /dev/sda1e os parâmetros de inicialização provavelmente o especificam como o dispositivo raiz; portanto, ao reiniciar, você deve alterá-lo manualmente para que a raiz seja /dev/md0(assumindo que /dev/sda1seja raiz). Após a reinicialização, verifique /dev/md0se agora está montado ( df) e se está sendo executado como um espelho degradado ( cat /proc/mdstat). Adicione /dev/sda1à matriz:

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

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

Você precisará regenerar sua configuração de inicialização para usar /dev/md0como root (se /dev/sda1foi root) e provavelmente precisará regenerar mdadm.confpara garantir que /dev/md0sempre seja iniciado.

StarNamer
fonte
Perfeito exatamente o que eu preciso: D
whoami
2
Não use cppara copiar sistemas de arquivos, você perderá algumas coisas, como links físicos, atributos estendidos ... Use tarou rsynccom as opções apropriadas. Ao inicializar um Live CD, lembre-se de que o mapeamento do usuário uid é diferente (consulte as opções --numeric-owner do tar / rsync). Consulte também clone2fs para clonar sistemas de arquivos extx.
Stéphane Chazelas
1
As opções para cplidar com a preservação de links (-d), modo, propriedade e registros de data e hora (-p), fazê-lo recursivamente (-R) e permanecer em um sistema de arquivos (-x), mas acho que você pode estar certo sobre links físicos e estendidos atributos.
21413 StarNamer
rsync -aH --delete /mnt/olddisk/ /mnt/newarray/é uma boa opção Adicione -vih --progressse você quiser realmente ver o que está fazendo.
rudolfbyker 18/07
4

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

mdadm --create --verbose /dev/md0 --level=mirror --raid-devices=2 missing /dev/sda1
eppesuig
fonte
Obrigado, estou provavelmente com TOC aqui, mas há uma razão pela qual você adicionou a falta antes do / dev / sda1, a ordem é importante?
whoami
Eu acho que a ordem não importa.
eppesuig 6/02/2013
3
Cuidado com isso! com --metadata = 1.2 (o novo padrão), os metadados RAID (1 MB) serão inseridos no início (substituindo o conteúdo lá). E o início da matriz md iniciará 1 MB em / dev / sda1 (/ dev / md0 será 1 MB mais curto que / dev / sda1). Com metadados = 0,9 (o antigo padrão), os metadados (64kB) serão inseridos no final, substituindo o que está lá. Portanto, use --metadata = 0.9 e redimensione o FS primeiro. Faça o que fizer, faça um backup com antecedência.
Stéphane Chazelas
3

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

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

Primeiro, é necessário diminuir um pouco o volume, para abrir espaço para os metadados 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 início, mas isso é mais complicado e propenso a riscos, então eu vou para isso.)

Você deve garantir que os últimos 128kB do dispositivo de bloco não sejam utilizados, para liberar espaço para o superbloco. Então, você precisará reduzir o sistema de arquivos /dev/sda1. Se este for um sistema de arquivos ext2 / ext3 / ext4, obtenha o tamanho atual do sistema de arquivos tune2fs /dev/sda1e execute resize2fs /dev/sda1 NNNonde NNN é esse tamanho menos 128kB. Você pode fazer isso com Parted . Se você precisar reduzir um sistema de arquivos extN, 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 estejam livres, ligue mdadm --createpara 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 definidos como com falha. Você deve passar --level=1(ou equivalentemente -n 1) (essa abordagem funciona apenas para RAID-1) e --metadata=0.9ou --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 (incluindo os ausentes) no volume RAID.

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

Agora você pode ativar a matriz e adicionar outros componentes.

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

Uma observação sobre os gerenciadores de inicialização: O Grub2 entende o Linux RAID-1 e pode inicializar a partir dele. Carregadores de inicialização como o Grub1, que não entendem o RAID, são lidos de forma transparente a partir de volumes espelhados, mas seu sistema não inicializa se a unidade em que o carregador de inicialização estiver lendo falhar. Se o volume RAID estiver em uma partição, instale o setor de inicialização do Grub nas duas unidades.

Sure Certifique-se de ter backups. "Não perigoso" significa "você provavelmente não precisará deles", não "aposta seus dados".

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

Gilles 'SO- parar de ser mau'
fonte