vndevice |
vndevice { attach shadow } device pathname vndevice detach device
Attaches or detaches a virtual device node to or from a disk image file. (Note that the functionality of vndevice is incorporated within hdiutil .) Modifications to data on the attached disk image will instead be written to the virtual node, or shadow image , and subsequent access to that data will be from the shadow. This allows effective read/write access to data on a disk image that should not or cannot be modified.
Attaches a device node to a disk image designated by pathname .
Detaches a device node from a disk image.
Associates an attached device node to a shadow disk image designated by pathname .
The device node filename; e.g., /dev/vn0 .
Create a disk image, attach a virtual device node to it, and mount it:
% hdiutil create test.dmg -volname test -size 5m -fs HFS+ -layout NONE % sudo vndevice attach /dev/vn0 test.dmg % mkdir mount_point % sudo mount -t hfs /dev/vn0 mount_point
Wait a minute, and then:
% touch mount_point/test_file % ls -l test.dmg
Note that the modification time on the disk image is current, reflecting the change you made by creating a test file.
Now set up shadowing. Unmount the volume first, then create the shadow disk image, attach the virtual node to it, and mount it again:
% sudo umount /dev/vn0 % hdiutil create shadow.dmg -volname shadow -size 5m -fs HFS+ -layout NONE % sudo vndevice shadow /dev/vn0 shadow.dmg % sudo mount -t hfs /dev/vn0 mount_point
Wait a minute, and then:
% rm mount_point/test_file % ls -l test.dmg; ls -l shadow.dmg
The modification time on the test image wasn't updated, but the shadow image reflects the change you just made, indicating that writes are being passed through to the shadow.
Finish up by unmounting the volume and detaching the virtual node:
% sudo umount /dev/vn0 % sudo vndevice detach /dev/vn0
/usr/libexec