3 votes

Comment monter automatiquement les périphériques en boucle avec des partitions

Je teste du code de pilote de système de fichiers et j'aimerais le faire en dehors du noyau. La méthode la plus simple et la plus sûre pour le faire est depuis l'espace utilisateur. J'ai donc créé un fichier de longueur variable

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

Ensuite, j'ai installé un schéma de partition MBR en utilisant fdisk

fdisk testfs

Je peux configurer un périphérique en boucle pour accéder à mon fichier en mode émulé par blocs :

$ losetup /dev/loop0 testfs

À ce stade, je peux voir ce nouveau périphérique en bloc émulé dans la liste des périphériques :

NOM   MAJ:MIN RM   TAILLE RO TYPE POINT DE MONTAGE
sda      8:0    0    50G  0 disque 
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 

Et ce périphérique a la table de partitions suivante

$ fdisk -l /dev/loop0 

Disque /dev/loop0: 52 Mo, 52428800 octets
96 têtes, 25 secteurs/piste, 42 cylindres, total 102400 secteurs
Unités = secteurs de 1 * 512 = 512 octets
Taille de secteur (logique/physique) : 512 octets / 512 octets
Taille d'E/S (minimale/optimale) : 512 octets / 512 octets
Identifiant de disque : 0xe7d5af9a

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

Cependant, pour créer un système de fichiers, j'ai besoin de monter la partition, pas le "disque". Le système en boucle ne monte-t-il pas automatiquement les partitions du périphérique, de manière similaire aux autres périphériques en bloc ? J'ai pu créer le système de fichiers en montant le fichier à travers la boucle à un décalage

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

Mais cette solution est moins qu'idéale car le comportement est légèrement différent des véritables périphériques en bloc. Existe-t-il un moyen de "automonter" les partitions lorsqu'on passe par un périphérique en boucle ?

5voto

James Mertz Points 390

Il existe une option pour cela :

losetup --partscan /dev/loop0 testfs

Cela activera la prise en charge des partitions normales dans votre noyau, créant /dev/loop0p1 et ainsi de suite.


Vous pouvez également utiliser partx de util-linux :

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

Cela créera des partitions basées sur le noyau (/dev/loop0p1, etc.), mais la table des partitions elle-même sera analysée en utilisant libblkid, plutôt que de demander au noyau.


Enfin, il y a kpartx de multipath-tools :

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

Bien qu'à première vue cela soit similaire à ce qui précède, cela n'utilise en aucun cas la prise en charge native des partitions en boucle du noyau. Au lieu de cela, il crée /dev/**mapper**/loop0p1 en utilisant le sous-système de mappage de périphériques (mappages linéaires).

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X