Der User-Space-Teil des Device Mappers ist für Entwickler optional, um ihre eigenen Speicherverwaltungstools zu implementieren. Tatsächlich verwenden viele unserer gängigen logischen Volume-Manager, wie LVM2, dmraid und andere Tools, den Device Mapper Die Benutzerraumbibliothek richtet einen unabhängigen Satz von Verwaltungstools gemäß ihren eigenen Verwaltungsanforderungen ein, verwendet jedoch nicht das von ihr bereitgestellte dmsetup-Tool. Selbst das logische Volume-Managementsystem auf Unternehmensebene von IBM ist nicht in der Implementierung enthalten Die User-Space-Bibliothek des Device Mappers implementiert eine Reihe eigener Funktionsbibliotheken, die vollständig auf der ioctl-Definition im Kernel basieren.
Zieltreiber
Device Mapper bietet eine einheitliche Architektur, die es Benutzern ermöglicht, über das Zieltreiber-Plug-in ihre eigenen E/A-Verarbeitungsregeln entsprechend den tatsächlichen Anforderungen festzulegen, sodass der Zieltreiber das Gerät vollständig verkörpert Mapper-Flexibilität. Oben haben wir den Zieltreiber mehr als einmal erwähnt und die Funktionen des Zieltreibers beschrieben. Hier stellen wir die Implementierung des Zieltreibers im Detail mit dem einfachsten linearen Zieltreiber vor.
Der Zieltreiber definiert hauptsächlich die Verarbeitungsregeln für E/A-Anfragen. Im Geräte-Mapper wurde eine einheitliche Schnittstelle für den Betrieb des Zieltreibers definiert. In der Implementierung wird die Schnittstelle durch die von uns erwähnte Struktur „target_type“ definiert oben, das die folgenden Zieltreibermethoden definiert:
Methode zum Löschen des Zielgeräts; Anforderungsmethode;
4 Methode zum Beenden der E/A-Anfrage;
6 ;
7 Erhalten Sie Zugriff auf den aktuellen Zielgerätestatus;
Benutzer können die oben genannten Methoden selektiv implementieren Aber im Allgemeinen müssen mindestens die ersten drei Methoden implementiert werden, sonst funktioniert es unter dem Geräte-Mapper nicht richtig. Der lineare Zieltreiber implementiert nur die ersten drei Methoden und Methode 7. Er vervollständigt die lineare Zuordnung vom logischen Adressraum zum physischen Adressraum und kann ein logisches Gerät bilden, indem mehrere physische Geräte linear verbunden werden, wie in Abbildung 4 beschrieben In werden die drei kontinuierlichen Räume /dev/sda, /dev/sdb und /dev/sdc über den linearen Zieltreiber zu einem großen logischen Blockgerät geformt. Die Implementierung des linearen Ziels ist sehr einfach. Seine Erstellungs- und Löschmethoden vervollständigen hauptsächlich die Anwendung und Freigabe der vom linearen Zielgerät verwendeten Struktur. Die Implementierung der IO-Zuordnungsverarbeitungsmethode ist noch einfacher, wie im folgenden Code gezeigt:
Die Zuordnungsmethode besteht darin, die an das zugeordnete logische Gerät gesendete Bio-Anfrage linear entsprechend der Zuordnungsbeziehung zum entsprechenden Standort des physischen Geräts umzuleiten, das durch das lineare Zielgerät As dargestellt wird Wie im Code gezeigt, besteht die spezifische Implementierungsmethode darin, den bi_bdev von bio zu ändern. Der Gerätezeiger ist der Gerätezeiger, der dem Zielgerät entspricht, und die Sektornummer bi_sector, in der die E/A-Anforderung beginnt, wird entsprechend der Startadresse des Zielgeräts geändert und den Offsetwert der Bio-Anfrage auf dem zugeordneten Gerätegerät, wodurch die Umleitung der IO-Anfrage abgeschlossen wird. Die Implementierung anderer Zieltreiber ist ebenfalls ähnlich. Sie können sie gemäß den vom Geräte-Mapper definierten Schnittstellenspezifikationen implementieren und die von Ihnen benötigten Funktionen kombinieren. Ich werde sie hier nicht einzeln vorstellen im Kernel. (T114) Das Obige ist der Inhalt des Device Mapper-Mechanismus (1) (5) im Linux-Systemkern. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn) !static int linear_map(struct dm_target *ti, struct bio *bio, union map_info *map_context) { struct linear_c *lc = (struct linear_c *) ti->private; bio->bi_bdev = lc->dev->bdev; bio->bi_sector = lc->start + (bio->bi_sector - ti->begin); return 1; }