Criando dispositivo de disco em um arquivo

3

Estou tentando criar um dispositivo de disco em um arquivo com:

dd if=/dev/zero of=file.img bs=516096 count=1000
sudo losetup /dev/loop0 file.img
(echo n; echo p; echo 1; echo ""; echo ""; echo w;) | sudo fdisk -u -C1000 -S63 -H16 file.img
sudo mke2fs -b1024 /dev/loop0 503968

Obrigado montar com:

sudo mkdir /mnt/fcd
sudo mount -t ext2 /dev/loop0 /mnt/fcd

e escrevendo o bootloader autogerido:

sudo dd if=loader.bin of=file.img bs=512 count=1 conv=notrunc

e desmembrá-lo com:

sudo umount /dev/loop0
sudo losetup -d /dev/loop0

Eu tenho duas perguntas:

1.Estou recebendo a seguinte saída no fdisk:

Using default response p
Partition number (1-4, default 1): 
Using default value 1
First sector (2048-1007999, default 2048): 
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-1007999, default 1007999): 

Por que o primeiro setor começa em 2048 e não em 0? 0-2048 para o MBR no ext2 ou para outra coisa?

2.Depois do meu disco criado, eu executo:

fdisk -l file.img

E a saída é:

Disk file.img: 516 MB, 516096000 bytes
255 heads, 63 sectors/track, 62 cylinders, total 1008000 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

    Device Boot      Start         End      Blocks   Id  System

Por que não há uma partição?

Obrigado.

    
por 0xAX 27.09.2014 / 09:16

2 respostas

3

1.- Originalmente, o fdisk criava partições tentando torná-las alinhadas aos limites do cilindro, deixando o primeiro cilindro livre, como seria usado para o MBR, a tabela de patentes e outras coisas. Dessa forma, a primeira partição geralmente é iniciada no bloco 63 (cada bloco tem 512 bytes). O fdisk de distribuições como RedHat 6.x, ainda funciona dessa maneira, mas avisa sobre isso e permite que você escolha o esquema não compatível com DOS.

Versões mais recentes do fdisk, crie partições alinhadas aos limites do MB, para garantir que as partições sejam alinhadas à página, pois isso causa um grande impacto no desempenho (se tiver curiosidade, leia mais no meu blog: link e link ). 2048 é 1 MB (2048 * 512).

2.- Você está sobrescrevendo a tabela de partições ao criar o sistema de arquivos ext2 no dispositivo com backup de arquivos. Depois de criar a partição, você deve anexar outro dispositivo de loop começando no mesmo bloco da partição que você criou. No seu caso, como a partição começa em 2048, o deslocamento deve ser 1048576 (2048 * 512):

losetup -o 1048576 /dev/loop1 file.img
mkfs.ext2 /dev/loop1
mount /dev/loop1 /mnt
# Do whatever you want with the partition here
umount /mnt
losetup -d /dev/loop1
losetup -d /dev/loop0

Isso deve funcionar.

    
por 27.09.2014 / 10:37
0

sfdisk + mke2fs

É possível fazer isso com essas duas ferramentas combinadas + alguns cálculos de compensação cuidadosos.

Isso também pode ser feito totalmente sem sudo.

Aqui eu descrevo um exemplo mínimo executável de tal: link

    
por 17.10.2018 / 10:55
Listar propriedade do espaço no arquivo por usuário Como copiar, executar e recuperar dados de um computador remoto? ______ qstntxt ___

Estou tentando executar alguns cálculos em um computador remoto. Basicamente eu quero copiar alguns arquivos para o computador, carregar um software, executar o cálculo e recuperar os dados. Eu criei uma conexão sem senha já para isso. Abaixo está minha tentativa:

%pre%

O script apenas copia os arquivos e efetua o login no computador remoto, mas nenhum cálculo é iniciado.

    
______ azszpr158431 ___

Não sei bem qual é a sua pergunta, mas tenho duas observações que são muito longas para um comentário:

  1. Seu script atual irá parar quando você logar em %code% (na linha 4) e irá esperar que você faça algo interativamente - somente quando você sair o script prosseguirá (o que provavelmente não é o que você quer). / p>

    Portanto, coloque qualquer coisa que deve ser executada no servidor remoto em um script de shell independente, scp-lo com o resto dos dados e execute-o com %code% .

    Assim:

%pre%

substitua %code% / %code% com o que você precisar copiar para / do cluster - você provavelmente não deseja copiar de volta as entradas. Observe que o script mencionado como %code% precisa ser marcado como executável. Se mesmo isso não funcionar (porque o sistema de arquivos para o qual você está copiando está montado com a opção %code% , use %code% . Ou você pode simplesmente canalizá-lo para a máquina remota:

%pre%

2) Se você estiver executando isso em %code% (o que parece que você é), você pode se livrar de uma direção de conexão scp executando o %code% on %code% novamente.

    
______ azszpr158433 ___

Sugiro que você tenha seu script em sua casa para execução remota e, em seguida, chame seu script como

%pre%

Basicamente, a partir do seu script com acesso sem senha, após %code% , o script não está sendo executado. Isso poderia ser facilmente testado.

Teste

Tenha estas duas linhas em um script e tente executar o script em sua máquina local.

%pre%

Normalmente, estaríamos esperando que ele imprimisse o nome da máquina remota desde que tenhamos ssh. Mas esse não é o caso. Ele apenas efetua login na máquina remota e, quando você %code% sai da máquina remota, somente ele imprimirá o nome do host ( Certifique-se de verificar o nome do host que está sendo impresso, seria imprimir o local nome do host da máquina ).

Agora, como sugeri, se você tiver seu roteiro em sua casa local e chamá-lo como

%pre%

A saída, neste caso, é o nome da máquina host remota ( Certifique-se de remover a linha ssh do script, pois isso é inútil agora ).

    
______ azszpr158430 ___

Basicamente, você espera que seu script continue na máquina remota, o que não acontecerá, eles serão executados em sua máquina local. Para conseguir o que você quer, você precisará passar a série de comandos para a máquina remota através do ssh.

Você pode ler este guia para ter uma ideia: link

    
___