Wie man Loop-Geräte mit Partitionen automatisch einfügt

870
sherrellbc

Ich teste einige Dateisystemtreibercodes und möchte dies außerhalb des Kernels tun. Die einfachste und sicherste Methode dafür ist der Benutzerraum. Ich habe also eine Datei von einiger Länge erstellt

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

Dann habe ich ein MBR-Partitionierungsschema mit fdisk installiert

fdisk testfs

Ich kann ein Loop-Gerät einrichten, um im blockemulierten Modus auf meine Datei zuzugreifen:

$ losetup /dev/loop0 testfs 

An dieser Stelle kann ich dieses neue emulierte Blockgerät in der Geräteliste sehen:

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  

Und dieses Gerät hat die folgende Partitionstabelle

$ 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 

Um ein Dateisystem zu erstellen, muss ich jedoch die Partition einhängen, nicht die "Festplatte". Hängt das Schleifensystem nicht automatisch die Partitionen des Geräts an, ähnlich wie bei den anderen Blockgeräten? Ich konnte das Dateisystem erstellen, indem ich die Datei versetzt in die Schleife einhängt

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

Diese Lösung ist jedoch nicht ideal, da sich das Verhalten etwas von echten Blockgeräten unterscheidet. Gibt es eine Möglichkeit, Partitionen "automatisch anzuhängen", wenn Sie über ein Schleifengerät gehen?

0

1 Antwort auf die Frage

0
grawity

Dafür gibt es eine Option:

losetup --partscan /dev/loop0 testfs 

Dadurch wird die reguläre Partitionsunterstützung in Ihrem Kernel aktiviert, /dev/loop0p1und so weiter.


Sie können partx auch von util-linux verwenden:

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

Dadurch werden /dev/loop0p1kernelbasierte Partitionen ( usw.) erstellt. Die Partitionstabelle selbst wird jedoch mit libblkid analysiert, anstatt den Kernel abzufragen.


Schließlich gibt es kpartx von Multipath-Tools:

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

Obwohl dies auf den ersten Blick dasselbe ist wie oben, wird die native Loop-Partitionsunterstützung des Kernels nicht verwendet. Es wird stattdessen mithilfe des Device-Mapper-Subsystems erstellt (lineare Zuordnungen)./dev/mapper/loop0p1