-
-
Save crnkjck/0dc5aaa485eaba78b678f9da38385560 to your computer and use it in GitHub Desktop.
access a disk image read-only with a copy-on-write overlay to allow fsck or the like to write changes
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# usage: attach_cow_image.sh [imagefile] [cowfile] [devname] | |
# imagefile: path to the image file you want to load | |
# cowfile: path to the file to store writes into. If it doesn't exist, a sparse 1GB file will be created. | |
# devname: the name you want the drive to show up as in /dev/mapper | |
imgfile="$1" | |
cowfile="$2" | |
dmname="$3" | |
# create COW file if it doesn't exist (otherwise, assume we are using a file from a previous use) | |
# the if you don't think 1000MiB will be enough, you can create a larger one. | |
[ -f "$cowfile" ] || dd if=/dev/zero of="$cowfile" bs=1 count=1 seek=1048575999 | |
# attach the files to loop devices (with the image file read-only) | |
imgdev=`losetup -f -r --show "$imgfile"` | |
cowdev=`losetup -f --show "$cowfile"` | |
# get the size of the image device | |
imgsz=`blockdev --getsz $imgdev` | |
# create the devmapper table for a copy-on-write device using the two loop devices | |
echo 0 $imgsz snapshot $imgdev $cowdev p 8| dmsetup create $dmname | |
# and now probe the partition table of the new device | |
partprobe -s /dev/mapper/$dmname | |
# to detatch everything: | |
# dmsetup remove $dmname | |
# losetup -d $cowdev | |
# losetup -d $imgdev |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment