9 ms·
Mounting partitions from a dd image
- amelius 8y agoIs it also possible to repartition the image with conventional tools? How about setting a boot flag and writing it back to e.g. an USB stick?
- peterwwillis 8y agoYes, you can use losetup. ~# 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-manipulation-of-partition-and-disk-images 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://stackoverflow.com/a/15200862
- jschwartzi 8y agoI have built block-level bootable system images for the TS-7800 using this mechanism. https://www.embeddedarm.com/products/TS-7800 https://www.embeddedarm.com/products/TS-7800 That was before I found multistrap.
- regularfry 8y agoExtlinux on an ext4 partition doesn't need an offset. Or at least didn't when I wrote this: http://www.blackkettle.org/posts/archive/2013-08-19-bootable-mountable-vm-images/ http://www.blackkettle.org/posts/archive/2013-08-19-bootable...
- bcl 8y agoYou can run parted directly on the image file to make modifications. fallocate -l 1G disk.img parted ./disk.img
- ckastner 8y agoUnder Linux, this can also be achieved with kpartx(8). https://linux.die.net/man/8/kpartx https://linux.die.net/man/8/kpartx
- discreditable 8y agoThis is doing it the hard way. Make the image a loop device: 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-compressed-ddrescue-image/ https://brashear.me/blog/2017/11/14/how-to-create-a-compress...
- mrrsm 8y agoI came here to say using the loop device just makes things much easier. No math to get your offsets and fat fingering the numbers this way.
- lathiat 8y agoInteresting I have used kpartx which uses device mapper instead of Partprobe. Wonder why kpartx exists; will have to look into that. Maybe not everything can be partprobed.
- discreditable 8y agoI'm not sure. All I can think is that partprobe is provided by parted and I have noticed people tend to gravitate towards using fdisk or parted and ignoring the other. Notice the author of the article is an fdisk guy. I might be mis-remebering but I think parted used to be considered lame before fdisk lagged to support GPT.
- Tsiklon 8y agoPersonally I’d call myself an fdisk/gdisk person - I like the safety net those programs provide by staging disk changes prior to committing to the MBR/GPT, if I’m doing things by hand this is my preferred tool. I don’t like how parted will automatically commit your changes as you go, though this is useful for scripting your changes and is my preferred method for disk geometry modifications when preparing maintenances etc Right tool for the job and all that. From what I remember partprobe has had a history of occasional unreliable behaviour under RHEL - but I understand it works properly under RHEL 7.3+
- deleted 8y ago[deleted]
- dbolgheroni 8y agoOpenBSD uses vnconfig (also FreeBSD; on NetBSD it's vndconfig). An example: # 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.
- floatboth 8y agoFreeBSD does not use vnconfig, FreeBSD uses mdconfig: # 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) /mnt
- jlgaddis 8y agoI was just about to correct your correction, because I can quite clearly recall using vnconfig on FreeBSD. Apparently 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.
- Ace17 8y ago> mount -t -o ro,offset=$((51263)) x.dd partition_1 > mount -t -o ro,offset=$((51296390)) x.dd partition_2 Isn't the mount type "-t" value missing?
- assafmo 8y agoThanks! I missed this. Fixed. :-)
- phaedrus 8y agoOne time I tried to create a tool to do in-place conversion between Linux software RAID volumes (e.g. RAID-0 to RAID-1 (assuming data fits), or RAID-1 to RAID-5, etc.) I used disk image files and the loopback device to test it to avoid having to reformat physical partitions. 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.
- rwmj 8y agoOr without needing root using guestfish (http://libguestfs.org/guestfish.1.html http://libguestfs.org/guestfish.1.html) $ 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).
- dpedu 8y agoI think ZFS has the easiest way to do this sort of thing: # 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
- trm42 8y agoSure, ZFS has lots of awesome features, but the point of loopback device lets you to attach and mount basically any disk image that has kernel or fuse drivers.
- theonewolf 8y agoYou can directly expose the partitions using the tool `kpartx`, which will create a `loop` device for you: > 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
- pixelbeat__ 8y agolibguestfs > losetup > fdisk 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: http://www.pixelbeat.org/scripts/lomount.sh http://www.pixelbeat.org/scripts/lomount.sh