Como criar um arquivo de imagem de partição formatada do zero?

15

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 adicionar uma nova partição para o novo sistema de arquivos (que deve ser finalmente o FAT32), começando no setor 2048 e usando todos os setores restantes.

losetup /dev/loop1 mountedImage.img
mkfs -t vfat /dev/loop1

Mas aqui estou atingindo problemas. Se eu configurar um dispositivo loop e formatá-lo usando mkfs -t vfat , a tabela de partições será sobrescrita e o sistema de arquivos (FAT32) 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 user35443 17.08.2013 / 20:30

3 respostas

18

Se no Linux, ao carregar o módulo loop , certifique-se de passar uma opção max_part para o módulo para que os dispositivos de loop sejam particionáveis.

Verifique o valor atual:

cat /sys/module/loop/parameters/max_part

Se for 0:

modprobe -r loop # unload the module
modprobe loop max_part=31

Para tornar essa configuração persistente, adicione a seguinte linha a /etc/modprobe.conf ou a um arquivo em /etc/modprobe.d se esse diretório existir em seu sistema:

options loop max_part=31

Se modprobe -r loop falhar porque "O loop do módulo está integrado", você precisará adicionar loop.max_part=31 à sua linha de comando do kernel e reinicializar. Se o seu gerenciador de inicialização for o Grub2, adicione-o ao valor de GRUB_CMDLINE_LINUX em etc/default/grub .

Agora, você pode criar um dispositivo de loop particionável:

truncate -s64M file # no need to fill it with zeros, just make it sparse
fdisk file # create partitions
losetup /dev/loop0 file
mkfs.vfat /dev/loop0p1 # for the first partition.
mount /dev/loop0p1 /mnt/

(note que você precisa de uma versão relativamente recente do Linux).

    
por 17.08.2013 / 21:32
3

losetup /dev/loop0 file -o 1048576 --sizelimit limit

O deslocamento especificado deve estar em bytes (1048576 = 2048 setores * 512 bytes por setor).

mount -o loop,offset=1048576,sizelimit=limit

Para mais informações, consulte losetup e mount .

    
por 18.08.2013 / 10:56
2

Os procedimentos a seguir permitem que você monte as partições da imagem para modificá-las.

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.

losetup -P automation

Uso:

$ los my.img
/dev/loop0
/mnt/loop0p1
/mnt/loop0p2

$ ls /mnt/loop0p1
/whatever
/files
/youhave
/there

$ sudo losetup -l
NAME       SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE                                                                                      DIO
/dev/loop1         0      0         0  0 /full/path/to/my.img

$ # Cleanup.
$ losd 0
$ ls /mnt/loop0p1
$ ls /dev | grep loop0
loop0

Fonte:

los() (
  img="$1"
  dev="$(sudo losetup --show -f -P "$img")"
  echo "$dev"
  for part in "$dev"?*; do
    if [ "$part" = "${dev}p*" ]; then
      part="${dev}"
    fi
    dst="/mnt/$(basename "$part")"
    echo "$dst"
    sudo mkdir -p "$dst"
    sudo mount "$part" "$dst"
  done
)
losd() (
  dev="/dev/loop$1"
  for part in "$dev"?*; do
    if [ "$part" = "${dev}p*" ]; then
      part="${dev}"
    fi
    dst="/mnt/$(basename "$part")"
    sudo umount "$dst"
  done
  sudo losetup -d "$dev"
)

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.

    
por 12.09.2015 / 12:44