Como montar automaticamente dispositivos de loop com partições

0

Estou testando algum código de driver do sistema de arquivos e gostaria de fazê-lo fora do kernel. O método mais simples e seguro para fazer isso é do espaço do usuário. Então, eu criei um arquivo de algum tamanho

dd if=/dev/zero of=testfs bs=10M count=50

Em seguida, instalei um esquema de particionamento do MBR usando o fdisk

fdisk testfs

Eu posso configurar um dispositivo de loop para acessar meu arquivo no modo de emulação de blocos:

$ losetup /dev/loop0 testfs

Neste momento, posso ver este novo dispositivo de bloco emulado na lista de dispositivos:

NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0    50G  0 disk 
├─sda1   8:1    0    46G  0 part /
├─sda2   8:2    0     1K  0 part 
└─sda5   8:5    0     4G  0 part [SWAP]
sr0     11:0    1  55.2M  0 rom  
loop0    7:0    0    50M  0 loop 

E este dispositivo tem a seguinte tabela de partições

$ fdisk -l /dev/loop0 

Disk /dev/loop0: 52 MB, 52428800 bytes
96 heads, 25 sectors/track, 42 cylinders, total 102400 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: 0xe7d5af9a

      Device Boot      Start         End      Blocks   Id  System
/dev/loop0p1   *        2048      102399       50176    7  HPFS/NTFS/exFAT

No entanto, para criar um fileyststem eu preciso montar a partição , não o "disco". O sistema de loop não monta automaticamente as partições do dispositivo, semelhante aos outros dispositivos de bloco? Eu era capaz de criar o sistema de arquivos, montando o arquivo através do loop em um deslocamento

$ losetup -o $((2048*512)) /dev/loop0 testfs

Mas esta solução é menos que ideal, uma vez que o comportamento é ligeiramente diferente dos dispositivos de bloco reais. Existe uma maneira de "automount" partições ao fazer através de um dispositivo de loop?

    
por sherrellbc 22.02.2018 / 15:11

1 resposta

0

Existe uma opção para isso:

losetup --partscan /dev/loop0 testfs

Isso ativará o suporte a partições regulares em seu kernel, criando /dev/loop0p1 e assim por diante.

Você também pode usar o partx do util-linux:

losetup /dev/loop0 testfs
partx -u /dev/loop0

Isto irá criar partições baseadas no kernel ( /dev/loop0p1 , etc.), mas a própria tabela de partição será analisada usando o libblkid, ao invés de perguntar ao kernel.

Finalmente, há o kpartx dos multipath-tools:

losetup /dev/loop0 testfs
kpartx -u /dev/loop0

Embora à primeira vista isto seja o mesmo que acima, ele não usa o suporte de partição de loop nativo do kernel. Em vez disso, ele cria /dev/mapper/loop0p1 usando o subsistema do mapeador de dispositivos (mapeamentos lineares).

    
por 22.02.2018 / 15:17