losetup /dev/loop0 /path/to/your/image.img
Now you can use /dev/loop0 like it's a normal disk. If you're not seeing your partitions (/dev/loop0p1, etc.): partprobe /dev/loop0
When you're done, detach the loop device: losetup -d /dev/loop0
I use this trick to transparently compress ddrescue images with brtfs: https://brashear.me/blog/2017/11/14/how-to-create-a-compress...Everything that you will (probably) need is here: http://libguestfs.org
If you happen to need something that isn't already included, the APIs make it pretty easy to build your own tools as well.
Conveniently, those tools are also already packaged up for your distro (unless you use some esoteric distribution, perhaps).
Wonder why kpartx exists; will have to look into that. Maybe not everything can be partprobed.
I might be mis-remebering but I think parted used to be considered lame before fdisk lagged to support GPT.
A lot of StackOverflow questions have answers that use kpartx, and those answers are out of date.
# losetup -Pf /path/to/disk.img
# mount /dev/loop0pX /mnt # vnconfig vnd0 install63.fs
Then you can treat vnd0 as if it was a disk: # disklabel vnd0
# /dev/rvnd0c:
type: vnd
disk: vnd device
label: fictitious
duid: 138b4f2a2e184426
flags:
bytes/sector: 512
sectors/track: 100
tracks/cylinder: 1
sectors/cylinder: 100
cylinders: 7382
total sectors: 738240
boundstart: 1024
boundend: 737280
drivedata: 0
16 partitions:
# size offset fstype [fsize bsize cpg]
a: 736256 1024 4.2BSD 2048 16384 16142
c: 738240 0 unused
i: 960 64 MSDOS
For instance, to mount the 'a' partition: # mount /dev/vnd0a /mnt
You can also associate an encryption key with the device. All data written to the diskimage will then be encrypted. # mdconfig -f smartos-latest-USB.img
md0
# gpart list md0
...
scheme: MBR
Providers:
1. Name: md0s1
...
# mount -o ro -t msdosfs /dev/md0s1 /mnt
// (or, use labels)
# mount -o ro -t msdosfs /dev/msdosfs/SMARTOSBOOT /mnt
Or for ISOs, in one line: # mount -t cd9660 /dev/$(mdconfig -f image.iso) /mntApparently that's been a little while, however. According to vnconfig(8):
> The mdconfig utility first appeared in FreeBSD 5.0 as a cleaner replacement for the vn(4) and vnconfig(8) combo.
5.0 was released just over 15 years ago.
Despite reading all of the documentation I could find, and even going so far as to read kernel source code, I could never get the system to recognize my striped block data. That is, I tried to generate three files composing a RAID-5 "by hand", but mdadm would refuse to mount them. I never figured out if there was some additional id-block I was missing, or if my striping algorithm was not correct.
$ guestfish -a img.dd -m /dev/sda1
><fs> ll /
guestmount works if you want to mount it on a local directory (implemented using libguestfs + FUSE). # fallocate -l 256M disk.bin
# zpool create filepool /root/disk.bin
# zfs set mountpoint=/root/filepool filepool
# df -h /root/filepool
Filesystem Size Used Avail Use% Mounted on
filepool 208M 0 208M 0% /root/filepool > sudo kpartx -a test.raw
> lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
loop0 7:0 0 4G 0 loop
└─loop0p1 253:0 0 4G 0 part
> sudo kpartx -d test.raw> mount -t -o ro,offset=$((51296390)) x.dd partition_2
Isn't the mount type "-t" value missing?
I.E. libguestfs is safer when dealing with images of unknown origin, and losetup has inbuilt support now for partition scanning.
Here's an old fdisk/parted wrapper I used to use:
How about setting a boot flag and writing it back to e.g. an USB stick?
~# dd if=/dev/zero of=image.img bs=1M count=100
~# LODEVICE=$(losetup --find --show image.img)
~# fdisk $LODEVICE
~# losetup -d $LODEVICE
^ The above creates a 100MB disk image, binds it to a loopback device, runs fdisk, and then detaches it. I'm not sure how formatting the partition would work but presumably those tools have an offset option too?edit: this page explains using offsets for mke2fs and doesn't require losetup: https://superuser.com/questions/737072/userspace-manipulatio...
also, losetup can now scan the device for partition tables and make partition-specific loopbacks! https://stackoverflow.com/a/15200862
https://www.embeddedarm.com/products/TS-7800
That was before I found multistrap.
fallocate -l 1G disk.img
parted ./disk.img