RAID mdadm disco virtual muito pequeno

4
sudo mdadm --build /dev/md0 --level=linear --raid-devices=3 /dev/loop0 /dev/sda1 /dev/sda2

Depois de executar o comando acima, /dev/md0 é menor que /dev/loop0 + /dev/sda1 + /dev/sda2 . Por que isso está acontecendo e como posso ter o tamanho correto ? /dev/sda1 é uma partição muito pequena necessária para a partição /dev/sda2 Windows 7 para que o Windows inicialize corretamente. /dev/loop0 é um dispositivo de loopback que criei usando este comando: sudo losetup /dev/loop0 boot.mbr . boot.mbr é um arquivo de imagem que é uma cópia dos primeiros 2048 setores que aparecem no início do meu disco /dev/sda logo antes do início da primeira partição, /dev/sda1 . Esses setores contêm o gerenciador de inicialização Grub. Este é o comando que executei para criar esse arquivo de imagem: dd if=/dev/zero of=boot.mbr count=2048 . A razão pela qual ele precisa ser do mesmo tamanho, é que estou tentando configurar o disco rígido /dev/md0 virtual para imitar o layout do gerenciador de inicialização Grub e dessas 2 partições, mas fico sem bytes ao tentar configurar a última partição porque não há bytes suficientes no disco /dev/md0 . Se você precisar de mais contexto, aqui está um link para minha outra pergunta que explica por que estou fazendo isso: link

Especificações técnicas :

  • Linux Mint 17.2 64 bits com canela
  • mdadm - v3.2.5
  • dd (coreutils) 8,21

Mais detalhes :

O fdisk mostra /dev/sda1 como sendo 1572864000 bytes. Mostra /dev/sda2 como sendo 229318000128 bytes. Meu sistema de arquivos mostra boot.mbr como sendo 1048576. Portanto, se você adicionar esses três números juntos, a unidade /dev/md0 deverá ter pelo menos 230891912704 bytes. Mas o fdisk mostra / dev / md0 como sendo 230891847680 bytes. Então /dev/md0 é de alguma forma 65024 bytes menor do que o necessário.

Especulação:

Eu pensei que talvez o problema estivesse com o dispositivo de loopback /dev/loop0 . Mas fdisk -l /dev/loop0 mostra o dispositivo como tendo 1048576 bytes, portanto, corresponde ao tamanho do arquivo de imagem. No entanto, o fdisk reclama que /dev/loop0 não possui cilindros. Esse poderia ser o problema de alguma forma? Eu estou apenas agarrando canudos aqui.

Se /dev/md0 for um disco rígido virtual criado por software RAID, o que isso realmente significa? Por uma coisa, onde estão seus dados armazenados? Talvez eu esteja ficando sem memória ou espaço de armazenamento em algum lugar?

    
por still_dreaming_1 20.07.2015 / 00:29

1 resposta

2

Normalmente, os dispositivos Linux mdadm RAID são sempre um pouco menores que o tamanho dos dispositivos componentes (ou sua soma no caso do RAID 0), porque os dispositivos MD armazenam metadados.

Nesse caso, você usou --build , que chama um modo de montagem manual que não usa metadados. No entanto, um array linear pode ser menor que a soma dos tamanhos dos dispositivos do componente porque os dispositivos MD usam um tamanho de bloco. Por favor, note a seguinte saída ou similar que você deve obter do seu comando:

mdadm: chunk size defaults to 64K
mdadm: array /dev/md0 started.

Isso significa que o array trabalha com pedaços de 65536 bytes. Por exemplo, se fosse uma matriz RAID0 (o que não é), os dados seriam intercalados com 65536 bytes em um componente, 65536 bytes no próximo e assim por diante.

Se houver bytes extras no final que não compõem um trecho completo, o array não poderá usá-los.

No modo linear, não tenho certeza se o MD irá arredondar o tamanho de cada componente para o múltiplo mais próximo de 65536 bytes, ou apenas arredondar para baixo o tamanho de toda a matriz. De qualquer forma, o tamanho de um de seus componentes, se não um múltiplo de 65536 bytes (os outros 2 são), resultando em um arredondamento para baixo de 65024 bytes - exatamente a discrepância que você viu.

A melhor maneira de mostrar o tamanho exato de um dispositivo de bloco é:

blockdev --getsize64 /dev/sda1

Então, se você pegar a soma de:

blockdev --getsize64 /dev/sda1
blockdev --getsize64 /dev/sda2
blockdev --getsize64 /dev/loop0

E o tamanho utilizável do array resultante que pode ser visto com:

blockdev --getsize64 /dev/md0

A propósito, eu acho que o array que você está tentando construir aqui é bem estranho e possivelmente perigoso. A utilidade de um array composto de dois dispositivos de bloco físico e um dispositivo de bloco virtual apoiado por um arquivo é estranho. Mais importante, você diz:

/dev/sda1 is a very small partition needed by the /dev/sda2 Windows 7 partition in order for Windows to boot properly.

Parece que você destruirá o Windows 7, mas se você sobrescrever essas partições com um dispositivo Linux MD RAID, o Windows não poderá mais usá-las!

    
por 20.07.2015 / 01:19

Tags