metadados mdadm: devo tomar precauções para evitar a sobreposição de superblocos?

2

Situação:

  • Estou criando uma nova matriz RAID1 usando o mdadm.
  • Eu não usarei camadas adicionais, como o LVM ou o dm-crypt.

  • Percebi que a versão de metadados 1.2 agora é o padrão. Eu entendo que é a versão recomendada, se todas as outras partes do sistema (por exemplo grub2) o suportarem. Este é o caso para mim.

  • Na manpage e em várias outras fontes, entendo que o metadado 1.2 significa que o superbloco está armazenado no início do disco. No 4KiB desde o início.
  • Nos arrays RAID1 anteriores que criei, usei a versão de metadados 0.90, que armazena o superbloco no final do disco. Para evitar que seja sobrescrito, deixei a última parte do disco não particionada.

É minha intenção particionar o novo arranjo RAID1 com uma tabela de partição GPT, a primeira partição começando no setor 2048. Se um setor tiver 512 bytes, isso significa que a partição real começará em 1024KiB desde o início do disco.

Perguntas:

  • Devo tomar algumas precauções para evitar que o superbloco da versão 1.2 seja sobrescrito, ou esteja iniciando a primeira partição no setor 2048 o suficiente para ser relativamente seguro?
  • Eu imagino que o grub irá escrever no início do disco, mas provavelmente precisará apenas dos primeiros 512 bytes. Algum outro programa escreve logo após esses bytes no disco?
  • A parte é logo após o fim do primeiro setor, até o setor 2048, uma parte 'regulada' do disco? Outros programas verificam se existem outros dados antes de começar a escrever lá? Não consegui encontrar nada específico sobre isso.

Eu entendo que usar dd pode destruir um superbloco ;-) e mdadm --zero-superblock . Estou mais preocupado com quaisquer outras utilidades ou camadas do sistema de arquivos, como o LVM, sobre as quais eu possa não perceber imediatamente que elas poderiam sobrescrever aquela parte específica do disco onde o superbloco está armazenado.

    
por Martijn 03.08.2014 / 17:32

2 respostas

3

É tudo sobre camadas.

Você tem um disco (a camada mais baixa). Nesse disco você coloca uma tabela de partições. Nisso, você coloca um RAID. No RAID você colocou LUKS. No LUKS você adiciona o LVM. No LVM, finalmente, o sistema de arquivos (a camada mais alta).

Disk -> Partition -> RAID -> LUKS -> LVM -> Filesystem

Você pode pular ou reordenar algumas dessas camadas. Geralmente começa com um disco e termina em um sistema de arquivos, o que está no meio é opcional.

Sem problemas até agora. Tudo deve estar bem.

Desde que cada uma dessas camadas seja respeitada, não haverá conflitos. Cada uma dessas camadas tem metadados, mas cada camada fornece apenas o que pode ser usado sem danificar esses metadados. Você não pode criar uma partição que começa em sector 0 porque isso entraria em conflito com a própria tabela de partição. Você não pode danificar md metadados gravando no dispositivo md . Você pode preencher o sistema de arquivos até a borda, isso não danificará os metadados do sistema de arquivos, nem qualquer uma das camadas abaixo, porque cada camada cuida de si mesma.

Assim, você não precisa se preocupar com nada.

A menos que você pare de respeitar essas camadas.

Você menciona o RAID e o GPT. Você pode colocar RAID em uma partição GPT ou GPT em um RAID. Contanto que seja uma camada na outra camada, não é um problema de todo. Mas suponha que você estivesse tentando usar as duas camadas ao mesmo tempo lado a lado? Você particiona seu disco usando o GPT e, ao mesmo tempo, transforma todo o disco em um membro do seu RAID.

Realmente não funciona.

O GPT tem metadados no início e no final; O RAID tem metadados no início ou no final (por md , depende da versão de metadados). Os metadados RAID podem substituir o GPT imediatamente (ou vice-versa). Ou pode parecer funcionar, já que as compensações são ligeiramente diferentes, mas ainda é uma situação horrível.

Suponha que você queira usar outra camada junto com isso, onde você a coloca? Se você colocá-lo no RAID, ele pode ultrapassar os limites das partições criadas. Se em vez disso você colocá-lo nas partições, ele ignora a camada RAID e, como tal, não será espelhado. O RAID acredita em sincronia enquanto os dados estão corrompidos.

De repente você tem camadas lutando entre si, quando deveriam cooperar e complementar.

    
por 04.08.2014 / 03:14
1

Você não precisa se preocupar com tudo isso. Os dados em um volume não se sobrepõem aos metadados. Caso contrário, seria muito difícil de gerir! Por exemplo, isso é o que cada um dos seus discos terá (não dimensionar):

[--------------------- sda ------------------------]
[---][------------------ sda1 ---------------------]
     [---][----------------------------------------]
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ one copy of the data in /dev/md0
     ^^^^ superblock
^^^^ partition table

A tabela de partição não está contida em uma partição e os metadados RAID não estão contidos no volume RAID. Quando você coloca conteúdo no volume RAID, esse conteúdo ocupa a parte que não é ocupada pelos metadados. Você não precisa fazer nenhum arranjo especial.

    
por 04.08.2014 / 01:07