Loopback Device: Difference between revisions

[unchecked revision][unchecked revision]
 
(21 intermediate revisions by 11 users not shown)
Line 1:
A Loopback Device is a mechanism used to interpret files as real devices. The main advantage of this method is that all tools used on real disks can be used with a loopback device.
 
Note: This article only covers UNIX environments (including [[Cygwin]]). For information on how to use loopback devices on Windows, see [[Windows_Tools#diskpart | diskpart]].
 
== Loopback Device under Linux==
Line 6 ⟶ 8:
=== Floppy Disk Images With GRUB and EXT2 ===
 
First, lets create aan empty image.
 
dd if=/dev/zero of=floppy.img bs=512 count=2880
Line 31 ⟶ 33:
cp /lib/grub/i386-pc/stage[12] /mnt/myfloppy/grub
 
Create a device mapping for the GRUB installation. ''You need quotations around the first part.''
 
echo "(fd0) /dev/loop0" > /mnt/myfloppy/grub/device.map
 
Start GRUB console for installation into the boot record.
Line 44 ⟶ 46:
setup (fd0)
 
NOTE: You must unmount /mnt/myfloppy before using a emulator to directly read /dev/loop0, such as.:
 
qemu -fda /dev/loop0
 
NOTE: When deleting the loop device, the original floppy.img file will be saved with the modified contents.
 
=== Floppy Disk Images With FAT16 ===
 
First, lets createCreate an empty image.
dd if=/dev/zero of=floppy.img bs=512 count=2880
 
Now, lets setSet it up for mounting.
 
losetup /dev/loop0 floppy.img
 
Now lets makeMake it MSDOS formatted.
 
mkdosfs /dev/loop0
Line 67 ⟶ 69:
 
mount -t msdos /dev/loop0 /mnt/myfloppy
 
=== Floppy Disk Images With FAT12 ===
 
The steps mentioned below will be useful for the BrokenThorn Entertainment tutorials
 
Create an empty image.
dd if=/dev/zero of=floppy.img bs=512 count=2880
 
Set it up for mounting.
 
losetup /dev/loop0 floppy.img
 
Format it to FAT12.
 
mkdosfs -F 12 /dev/loop0
 
Mount!
mount /dev/loop0 /mnt -t msdos -o "fat=12"
 
Unmount
 
umount /mnt
 
Destroy loopback device
 
losetup -d /dev/loop0
 
=== Hard Disk Images ===
Line 101 ⟶ 130:
|}
That leaves us with a nice sized file full of zeros that we'll use for our disk image.
 
==== Mounting ====
 
Now we attach the file to a loopback device. This lets us treat the file as though it were a physical disk.
 
Note: Under a normal Linux setup you will need to be root to use the losetup command (The same applies to most commands we'll be using).
 
losetup /dev/loop0 /path/to/c.img
 
Explanation:
{| {{Wikitable}}
|-
| losetup
| Linux command to setup and control loop devices.
|-
| /dev/loop0
| Loopback device 0. This will become our raw 'disk' device.
|-
| /path/to/c.img
| File to attach to the the loopback device is our disk image.
|}
 
If you run ps ax, you should now see a [loop0] process.
 
==== Partitioning ====
Line 129 ⟶ 135:
Now to create the MBR and partition table on the disk image (Usually you need to be root).
 
fdisk -u -C#cylinders -S63 -H16 /devpath/loop0to/c.img
 
Explanation:
Line 149 ⟶ 155:
| Set the heads/track to 16.
|-
| /devpath/loop0to/c.img
| fdisk is capable of partitioning image files directly.
| Thanks to losetup this device represents our raw 'disk'.
|}
 
Line 162 ⟶ 168:
You should end up with a screen that looks something like this:
 
Disk /devpath/loop0to/c.img: 516 MB, 516096000 bytes
16 heads, 63 sectors/track, 1000 cylinders, total 1008000 sectors
Units = sectors of 1 * 512 = 512 bytes
 
Device Boot Start End Blocks Id System
/devpath/loop0p1to/c.img1 * 63 1007999 503968+ 83 Linux
 
Obviously the cylinder count, partition end and blocks will be different depending on the size of your image.
Line 183 ⟶ 189:
Unfortunately this also means that from here on out we have to account for the fact that our partition does not start at byte 0 of the image.
 
==== Mounting ====
==== Detach our disk image from the loopback device. ====
 
Command:
 
losetup -d /dev/loop0
 
Explanation:
{| {{Wikitable}}
|-
| -d
| Detach whatever is on the loopback device
|-
| /dev/loop0
| The virtual drive
|}
 
Ok, now we attach the file to the loopback device again, but in such a way that we skip everything before the start of our partition.
 
losetup -o32256 /dev/loop0 /path/to/c.img
Line 210 ⟶ 202:
|}
 
The reason we move 32256 bytes into the file is this is where the partition starts. Remember I said to note the start sector of the partition (63 is usual)? Well, since each sector is 512 bytes long we therefore know the starting byte of the partition is 32256 (63*512) bytes into the file. The reason behind this gap is that most (Therethere is no real standard) fdisk programs don't use the first track for anything but the MBR. That space isn't always wasted though, some bootloaders (Eg GRUB) use it to store parts of their program.
 
''Note: If you aren't using the suggested geometry then you'll have to calculate this for yourself.''
Line 220 ⟶ 212:
For ext2fs, use:
 
mke2fs -b1024 /dev/loop0 #blocks
 
Explanation:
Line 226 ⟶ 218:
|-
| mke2fs
| Create an ext2EXT2 filesytem
|-
| -b1024
Line 238 ⟶ 230:
|}
 
This gives us a clean ext2EXT2 formatted partition.
 
Note: mke2fs is smart enough to figure out block size and #blocks for itself, but if you ever want to use multiple partitions you'll need to know how to use those values.
Line 244 ⟶ 236:
For FAT32, use:
 
mkdosfs -F32 /dev/loop0 #blocks
 
Explanation:
Line 274 ⟶ 266:
mount -text2 /dev/loop0 /mnt/wherever
 
or:
 
mount -tvfat /dev/loop0 /mnt/wherever
 
Explanation:
{| {{Wikitable}}
mount Linux command to mount a filesystem
|-
-text2/-tvfat Filesystem being used, Linux can usually figure this out on its own.
| mount
/dev/loop0 The device representing our PARTITION
/mnt/wherever| ALinux directorycommand to mount thea partition on.filesystem
|-
| -text2 / -tvfat
| Filesystem being used, Linux can usually figure this out on its own.
|-
| /dev/loop0
| The device representing our partition
|-
| /mnt/wherever
| A directory to mount the partition on.
|}
 
This should leave you with a nicely mounted partition. If you run df -Th you should end up with a line similar to:
Line 289 ⟶ 291:
/dev/loop0 vfat 492M 4.0K 492M 1% /mnt/wherever
 
...or for ext2fs...:
 
Filesystem Type Size Used Avail Use% Mounted on
Line 306 ⟶ 308:
 
Explanation:
{| {{Wikitable}}
umount Linux command to unmount a filesystem.
|-
/dev/loop0 The device that was mounted
| umount
| Linux command to unmount a filesystem.
|-
| /dev/loop0
| The device that was mounted
|}
 
==== Making it Easier ====
Line 313 ⟶ 321:
One final thing to do, which is to simplify mounting and unmounting that partition.
 
Command:
Mounting:
 
mount -text2 -oloop=/dev/loop0,offset=32256 /path/to/c.img /mnt/wherever
 
Unmounting:
 
umount /path/to/c.img
 
Explanation:
 
This is essentially a combination of the losetup and mount commands we used previously when formatting the partition. If used it also means we lose access to the raw 'disk' or 'partition' through /dev/loop0.
Line 328 ⟶ 333:
See also http://www.pixelbeat.org/scripts/lomount.sh
 
Finally, if you have to mount and umount that image very frequently and you're too lazy to type the sudo password each time, just add to /etc/fstab:
==== The End ====
 
/path/to/c.img /mnt/wherever ext2 user,loop 0 0
That's it, you now know how to handle hard disk images under Linux. Whilst mounted you can use it in exactly the same way you use a normal disk partition. Multiple partitions are an extension of this, just change the offset of the losetup command according to the partition you want to use (And format using the correct number of blocks).
 
now you can just call:
Things to remember:
losetup type command will give you the equivalent of a raw disk device (Eg /dev/hda)
losetup -o type command will give you the equivalent of a raw partition device (Eg /dev/hda1)
 
mount /mnt/wherever
== Loopback Device under FreeBSD ==
umount /mnt/wherever
 
==== The End ====
FreeBSD 4.x uses vnconfig FreeBSD 5.x uses mdconfig
 
That's it, you now know how to handle hard disk images under Linux. Whilst mounted you can use it in exactly the same way you use a normal disk partition. Multiple partitions are an extension of this, just change the offset of the losetup command according to the partition you want to use (And format using the correct number of blocks).
First, use DD to create an empty floppy image (1.44mb in size)
 
Things to remember:
=== FreeBSD 4.x ===
 
* losetup type command will give you the equivalent of a raw disk device (Eg /dev/hda)
dd if=/dev/zero of=floppy.img bs=512 count=2880
* losetup -o type command will give you the equivalent of a raw partition device (Eg /dev/hda1)
vnconfig vn0 floppy.img
newfs_msdos -f 1440 /dev/vn0
mount -t msdosfs /dev/vn0 /mnt/myfloppy
 
Don't forget to flush the filesystem buffers when manipulating with files on mounted disk image. On a Unix-like system, this can be simply done by executing the <tt>sync</tt> program in your shell.
To shut and image down, unmount and unconfigure it.
 
== Loopback Device under FreeBSD ==
umount /mnt/myfloppy
 
vnconfig -c /dev/vn0
FreeBSD uses mdconfig. First, use DD to create an empty floppy image (1.44 MB in size). Memdisks are allocated dynamically, and the name is displayed after the mdconfig command. This assumes that "md0" is printed.
=== FreeBSD 5.x ===
Memdisks are allocated dynamically, and the name is displayed after the mdconfig command. This assumes that "md0" is printed.)
 
To mount:
Line 369:
== Loopback Device under OpenBSD ==
 
OpenBSD has used [http://www.openbsd.org/cgi-bin/man.cgi?query=vnconfig&apropos=0&sektion=0&manpath=OpenBSD+Current&arch=i386&format=html vnconfig(8)] since OpenBSDversion 2.2 (orperhaps earlier..) and still uses it in OpenBSD 4.0-CURRENT.
 
UnderAs root or using su/sudo, Here areis an example stepsscenario for configuring a vnode pseudo disk device.
 
Creating the floppy.img file using dd:
dd if=/dev/zero of=/path/to/floppy.img bs=512 count=2880
 
Configuring the svnd0vnd0 device:
vnconfig svnd0vnd0 /path/to/floppy.img
 
Listing configured vnd/svnd devices:
vnconfig -l
Line 389:
 
Creating a FAT12 file system and then mounting the device:
newfs_msdos -F 12 -f 1440 /dev/svnd0crvnd0c
mount -t msdos /dev/svnd0cvnd0i /mnt/floppy
 
Removing the device mount and removinguninstalling the svnd0vnd0 device:
umount /mnt/floppy
vnconfig -u /dev/svnd0vnd0
 
More Information: [http://www.openbsd.org/cgi-bin/man.cgi?query=vnd&apropos=0&sektion=4&manpath=OpenBSD+Current&arch=i386&format=html vnd(4)] / [http://www.openbsd.org/cgi-bin/man.cgi?query=vnconfig&apropos=0&sektion=0&manpath=OpenBSD+Current&arch=i386&format=html vnconfig(8)]
http://www.openbsd.org/cgi-bin/man.cgi?query=vnconfig&apropos=0&sektion=0&manpath=OpenBSD+Current&arch=i386&format=html
 
[[Category:Disk Image Utilities]]
Anonymous user