Criando o sistema de arquivos a partir do nada

2

Eu preciso criar um sistema de arquivos com apenas uma partição do nada ( /dev/zero ). Eu tentei esta sequência de comandos:

dd if=/dev/zero of=mountedImage.img bs=512 count=131072
fdisk mountedImage.img
    n
    p 
    2048
    131072

Basicamente, eu preciso criar um arquivo de imagem de 64MB preenchido com zeros. Então eu uso fdisk para criar uma nova partição para o novo sistema de arquivos, começando no setor 2048 e usando todos os setores restantes. Mas agora estou com problemas. Se eu configurar um dispositivo de loop e formatá-lo usando mkfs -t vfat , a tabela de partições será sobrescrita e o sistema de arquivos será colocado no disco. Eu não preciso de todo o disco formatado com FAT32, só preciso que minha partição primária seja assim.

Alguém sabe como posso formatar apenas uma partição de imagem bruta de disco, não imagem inteira? Por favor ajude.

    
por user35443 17.08.2013 / 20:28

3 respostas

2

Uma solução que não requer privilégios de root é criar um arquivo com o tamanho da partição, chamar mkfs nesse arquivo e depois copiar o arquivo no lugar.

truncate -s 64512k part1.vfat
/sbin/mkfs.vfat part1.vfat
dd if=part1.vfat of=mountedImage.img bs=1k skip=2048

Como alternativa, com privilégios de root, você pode configurar um dispositivo de loop que dá acesso à imagem como um dispositivo . Como você deseja acessar apenas parte da imagem, é necessário indicar isso explicitamente.

sudo losetup -o 2048k --sizelimit 64512k đev/loop0 mountedImage.img
sudo mkfs.vfat /dev/loop0
sudo losetup -d /dev/loop0

Para trabalhar com ferramentas mais confortáveis, você precisa de privilégios de root e reinicialização. O módulo de loop pode fornecer acesso a partições, mas isso é desativado por padrão. Para ativar esse acesso, edite /etc/default/grub e altere a linha GRUB_CMDLINE_LINUX="" para

GRUB_CMDLINE_LINUX="loop.max_part=15"

Se já existissem outras opções, deixe-as, claro; eles precisam ser separados por espaços e toda a cadeia de opções deve estar entre aspas duplas, por exemplo, GRUB_CMDLINE_LINUX="option=value anotheroption loop.max_part=15" .

Agora, depois de particionar a imagem do disco, execute

sudo losetup /dev/loop0 mountedImage.img
sudo mkfs.vfat /dev/loop0p1

Execute losetup -d /dev/loop0 quando terminar de trabalhar com essa imagem.

    
por Gilles 19.09.2013 / 11:24
1

Os arquivos de imagem do sistema de arquivos normalmente não são particionados, a menos que sejam backups de todo o disco ou sejam usados com máquinas virtuais (QEMU, etc.). Para seus propósitos, você provavelmente deseja apenas criar o sistema de arquivos diretamente no arquivo de imagem. Você pode montá-lo:

sudo mkdosfs mountedImage.img
sudo mount -o loop mountedImage.img /mnt

Se você quiser gravar posteriormente essa imagem em uma unidade flash USB ou algo semelhante, poderá escrevê-la em uma partição:

sudo dd if=mountedImage.img of=/dev/sdc1
    
por Rod Smith 17.08.2013 / 23:37
0

kpartx

sudo apt-get install kpartx
losetup -fs my.raw
sudo kpartx -a my.img
ls /dev/mapper

Saída:

/dev/mapper/loop0
/dev/mapper/loop0p1

onde loop0p1 é a primeira partição, por isso podemos fazer:

mkdir -p d
sudo mount /dev/mapper/loop0p1 d

Vantagem deste método: funciona no Ubuntu 14.04 sem reiniciar.

losetup 2.21 -P opção

losetup -P -f --show my.img

Cria um /dev/loopXpY por partição.

Vantagem: executável pré-instalado em muitas distros (pacote util-linux).

Desvantagem: opção bastante recente, não presente no Ubuntu 14.04.