Im dargestellten Beipiel befindet sich ein CD image im High Sierra Format (hsfs) auf der Festplatte, welche mit ufs formatiert ist. Wenn das Loopback Device (loop) auf genau dieses CD image gelinkt ist, kann ein Prozess darauf zugreifen, als handele es sich direkt um ein High Sierra Filesystem. Die "Zwischenschicht" des Platten-ufs bleibt transparent.
Jeder Instanz kann nun mit Hilfe des von uns implementierten Tools loplk (UNIX für loop link) eine Datei zugeordnet werden. Sinnvollerweise sollte diese Datei ein Disk Image sein, auch wenn das nicht verpflichtend ist. Das Kommando zum Linken sieht etwa so aus:
$ loplk -link /usr/tmp/128kfs /dev/loop0rFür jede Instanz gibt es ein character (raw) device und ein block device. Zu Beachten ist, daß der Link nur vom raw device aus erzeugt werden kann. Überhaupt arbeitet loplk nur mit raw devices, weil es sich bei der Kommunikation mit dem Treiber des ioctl() Systemaufrufs bedient. Den oben erzeugten Link könnte man beispielsweise mit folgendem Kommando wieder aufheben:
$ loplk -unlink /dev/loop0rDer Loopback Device Treiber stellt zu jedem Zeitpunkt sicher, daß sich die Devices in einem konsistenten Zustand befinden. Es ist also unmöglich, einen Link aufzuheben, der gerade benutzt wird, das Treibermodul aus dem Speicher zu entfernen, wenn noch Devices in Benutzung sind und ähnliches mehr. Das dritte und letzte von loplk bereitgestellte Kommando dient der Ausgabe des aktuellen Status aller Devices:
$ loplk -info /dev/loop0r
0 -> "/usr/tmp/128kfs" (busy, pid: 542)
1 -> "/usr/tmp/rootfs"
2 -> (not linked)
3 -> "/proj/i4akbp_ii/image-files/AKBP_CD.img" (busy, pid: 533)
4 -> (not linked)
In diesem Beispiel sind die Instanzen 0, 1 und 3 aktiv. Bei den Devices, die
aktuell busy sind, wird noch die pid des Prozesses angezeigt, der das Device
gerade belegt hat.
$ loplk -link /proj/i4akbp_ii/image-files/AKBP_CD.img /dev/loop1r
$ loplk -info /dev/loop1r
0 -> (not linked)
1 -> "/proj/i4akbp_ii/image-files/AKBP_CD.img"
2 -> (not linked)
3 -> (not linked)
4 -> (not linked)
$ mount -F hsfs -r /dev/loop1 /mnt
$ loplk -info /dev/loop1r
0 -> (not linked)
1 -> "/proj/i4akbp_ii/image-files/AKBP_CD.img" (busy, pid: 434)
2 -> (not linked)
3 -> (not linked)
4 -> (not linked)
$ cd /mnt
$ ls
MiB.zoo fpu/ rwlock.h
acct.h frame.h rwlock_impl.h
acl.h fs/ sad.h
...
Zu beachten ist, daß das mount- $ id
uid=0(root) gid=1(other)
$ mkfile 128k /usr/tmp/fs128k
$ loplk -link /usr/tmp/fs128k /dev/loop3r
$ loplk -info /dev/loop1r
0 -> (not linked)
1 -> "/proj/i4akbp_ii/image-files/AKBP_CD.img" (busy, pid: 434)
2 -> (not linked)
3 -> "/usr/tmp/fs128k"
4 -> (not linked)
$ mkfs -F ufs -o nsect=32,ntrack=16,bsize=8192,fragsize=1024,cgsize=2,
free=0,rps=60,nbpi=2048,opt=t,apc=0,gap=0,maxcontig=7 /dev/loop3r 256
/dev/loop3r: 256 sectors in 1 cylinders of 16 tracks, 32 sectors
0.1MB in 1 cyl groups (2 c/g, 0.50MB/g, 128 i/g)
super-block backups (for fsck -F ufs -o b=#) at:
32,
$ fsck -F ufs /dev/loop3
** /dev/loop3
** Last Mounted on /
** Phase 1 - Check Blocks and Sizes
** Phase 2 - Check Pathnames
** Phase 3 - Check Connectivity
** Phase 4 - Check Reference Counts
** Phase 5 - Check Cyl groups
2 files, 9 used, 70 free (14 frags, 7 blocks, 17.7% fragmentation)
$ mount -F ufs /dev/loop3 /mnt_test
$ cd /mnt_test
$ ll
total 16
drwx------ 2 root 8192 Mar 12 18:20 lost+found/
$
Zunächst wird eine leere Datei der Größe 128 KB erzeugt (unser Treiber
unterstützt keine wachsenden Devices), die dann mit einer Device-