Como anexar um disco rígido virtual para ocupar / dev / sdb?

3

Eu quero inserir um disco rígido virtual (ou qualquer coisa) para ocupar o bloco do sistema / dev / sdb , como eu poderia fazer isso no Linux (Ubuntu e Debian)?

    
por return 0 09.12.2013 / 20:38

4 respostas

6

Crie um arquivo do tamanho que você gostaria que este disco rígido virtual fosse (o seguinte faz um arquivo 1Mx1024 ou 1GByte):

dd if=/dev/zero of=virtual_hard_drive.bin bs=1M count=1024

Crie um dispositivo de loop no lugar de /dev/sdb

mknod /dev/sdb b 7 500

Não, isso não funcionará se você já tiver um /dev/sdb .

Você precisará alterar os 500 para outro número no caso extremamente improvável de ter um /dev/loop500 .

Agora, atribua seu arquivo a este dispositivo de loop

losetup /dev/sdb virtual_hard_drive.bin

Então agora você tem um arquivo agindo como um disco rígido, através do mecanismo de dispositivos de loop do Linux. Neste ponto, você deseja formatá-lo com mke2fs /dev/sdb ou similar e montá-lo da maneira usual.

Para que isso funcione na inicialização, será necessária alguma edição dos scripts de tempo de inicialização, pois os scripts que verificam fstab não transformarão /dev/sdb em um dispositivo de loop na inicialização por conta própria.

Se você não precisa realmente de um volume, pode fazer algo como ln -s /dev/sdb /dev/full para fazer com que /dev/sdb "aponte para" o full (ou zero ou null ou mesmo dvdrom ) dispositivos virtuais.

    
por 10.12.2013 / 00:53
1

Por que você precisa especificamente que seja /dev/sdb ? Eu acho que você precisa explicar por que você quer algo para ocupar esse nó de dispositivo de bloco, porque você não pode simplesmente ter algo usá-lo. Se você tiver algum software que queira ler /dev/sdb , você pode simplesmente alterar o software.

No pior dos casos, você pode usar o simulador de host de depuração SCSI . Basta fazer modprobe scsi_debug e os padrões devem fornecer um único dispositivo SCSI. Observe que não estará explicitamente em /dev/sdb , mas sempre no próximo dispositivo SCSI disponível.

    
por 09.12.2013 / 22:58
1

Se você quiser usar um arquivo de imagem de disco bruto, poderá usar dispositivos de loopback para acessá-lo como um dispositivo de bloco (como /dev/sdb ).

  1. Crie uma imagem vazia: dd if=/dev/zero of=/path/to/the/image bs=1M count=10240
    Isto irá criar uma imagem vazia de tamanho 10 GiB.
  2. Associe a imagem a um dispositivo de loop: sudo losetup -f --show /path/to/the/image
    Isto irá imprimir o dispositivo de loop usado. Digamos que seja /dev/loop0 .
  3. Criar partições (e sistemas de arquivos): sudo gparted /dev/loop0
  4. Mover o original /dev/sdb : for a in /dev/sdb* ; do sudo mv "$a" "$a-orig" ; done
  5. Copiar dispositivos de loop no lugar de /dev/sdb : l=/dev/loop0 ; d=/dev/sdb ; sudo cp -a "$l" "$d" ; for a in "$l"* ; do sudo cp -a "$a" "$d${a#$l}" ; done

Depois disso, você terá a imagem de disco /path/to/the/image acessível como /dev/sdb , incluindo partições.

    
por 10.12.2013 / 00:55
0

As soluções baseadas em losetup fornecidas acima não criam um dispositivo de bloco SCSI, portanto, elas não criam um nó de dispositivo /dev/sd* e alguns renomeamentos ou links são necessários para criar um, e alguns softwares podem não encontrar o dispositivo adequado, uma vez que não está usando o subsistema SCSI.

É possível criar um dispositivo de disco SCSI que seja apoiado por uma partição ou arquivo usando targetcli . Consulte o link e link que cobre um problema com essas instruções. Assim como no simulador de host de depuração SCSI sugerido por @ robbat2, este dispositivo receberá o próximo identificador disponível.

Eu entendo que o simulador de host de depuração SCSI é apoiado por RAM, por isso é volátil. Com o método que proponho aqui, os dados serão realmente gravados em uma partição ou arquivo.

    
por 12.10.2018 / 14:32