From: "Heike C. Zimmerer" <usenet04q4@gmx.net>
To: qemu-devel@nongnu.org
Subject: [Qemu-devel] Re: Mounting qemu virtual disk images from host linux os
Date: Tue, 18 Jan 2005 00:13:56 +0100 [thread overview]
Message-ID: <cshgs2$sd8$1@sea.gmane.org> (raw)
In-Reply-To: 41EC3687.20805@gsinet.net
Tom Sandholm <sandholm@gsinet.net> writes:
[ mounting disk partitions ]
You might want to try the following script I'm using for mounting
entire disk images. I wouldn't say it's really finished, but it works
for me so far so I hope it might be of some use.
==========================================================================
~/bin/mount-hd-image
==========================================================================
#!/bin/sh
#
# Time-stamp: <2005-01-10 10:50:16 hcz>
pname=${0##*/}
usage() {
iconv -f utf-8 <<EOF
Syntax: $pname [-t type] raw_image mountpoint
Function: mount all partitions of a complete hd image
optionally create a new one
opts:
-c create image if it doesn't exist
-f run fdisk on the image
-m make a filesystem on it
-v debug level (may be given multiple times)
-x Script debug (det -x)
EOF
}
if [ -z "$nopt" ]; then
black=$(tput oc)$(tput sgr0) # Reset color + attribs
bold=$(tput bold)
red=$(tput setaf 1)
green=$(tput setaf 2)
blue=$(tput setaf 4)
cyan=$(tput setaf 6)
fi 2>/dev/null
d_echo(){
# $1: minimum debug level req'd for display
# $2 ..: message
if [ "$vopt" -ge "$1" ]; then
shift
echo "$@"
fi
}
muss(){
res=0
d_echo 1 -e "$cyan$*$black"
"$@" || abort "$*"
}
kann(){
d_echo 1 -e "$cyan$*$black"
"$@"
}
kann0(){
d_echo 1 -e "$cyan$*$black"
"$@" >/dev/null 2>&1
}
abort(){
[ $# -gt 0 ] && echo -n "$pname: "
for i in "$@"; do echo >&2 "$i"; done
echo "$pname: aborted."
exit 2
}
###################################################
vopt=0
dopt=/home/hcz/qemu
while getopts xvh-:fmc: argv; do
case $argv in
c) eval ${argv}opt="\$OPTARG";;
f|m) eval ${argv}opt=\$argv;;
v) eval ': $(('$argv'opt++))';;
x) set -x;;
*) usage; exit 0;;
esac
done
shift $((OPTIND-1))
if [ $# -lt 2 ]; then
abort "Not enough arguments"
exit 1
fi
src="$1"
dest="$2"
shift; shift
mkdir -p "${dest##*/}" || abort "Can't create $dest"
uid=$(id -u)
gid=$(id -g)
losetup=/sbin/losetup
#types="vfat captive-ntfs ntfs"
if [ -n "$copt" ]; then
if [ -f "$src" ]; then
read -p "$src already exists. Overwrite (Y/N*): "
echo $REPLY | egrep -i '^ *y' || abort
fi
muss qemu-img create -f raw "$src" $copt
fi
if [ -n "$copt$fopt" ]; then
muss /sbin/fdisk -C $(( $(stat "$src" -c "%s") / 255 / 63 /512)) "$src"
fi
x=$(/sbin/fdisk -ul "$src" 2>/dev/null)
[ -z "$x" ] && abort "Can't 'fdisk -ul $src'"
echo $x | grep -q "This doesn't look like a partition table" &&
abort "You selected a partition, but there is no valid partition table"
echo "Mounting harddisk image '$src' ..."
# win-b1 63 20964824 10482381 7 HPFS/NTFS
# ()1 ()2 ( ){3} ()3
echo "$x" | grep -v 'Extended$' |
sed -ne "s#^${src}p\?\([0-9]\+\)[ *]*\([0-9]*\) \+\([0-9]\++\? \+\)\{3\}\(.\+\)#\1 \2 \3 \4#p" |
while read partno start id system; do
d_echo 2 "p:$partno start:$start id:$id sys:$system"
case $system in
Extended) continue;;
FAT*) types="msdos vfat"; mkfs=(/sbin/mkfs.msdos -F32);;
HPFS/NTFS) types="captive-ntfs ntfs";;
*) types=auto;;
esac
echo -n "Patition $partno: trying "
mkdir -p "$dest/$partno"
for type in $types; do
echo -n "$type "
res=99
loop_dev=$($losetup -f)
[ -z "$loop_dev" ] && abort "Can't find a loop device"
muss $losetup -o $((start * 512)) $loop_dev "$src"
if [ -n "$mopt" ]; then
[ -n "$mkfs" ] ||
echo "Don't know how to make a $system file system"
muss "${mkfs[@]}" $loop_dev
# muss $losetup -d $loop_dev
fi
if kann0 sudo mount -o uid=$uid,gid=$gid,users \
-t $type "$loop_dev" "$dest/$partno"; then
kann0 sudo chmod a+xrw "$2"
echo "... $type: ok."
res=0
break
fi
done
[ "$res" -eq 0 ] || abort "Error mounting partition $partno"
done
next prev parent reply other threads:[~2005-01-17 23:34 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-01-16 23:33 [Qemu-devel] Mounting qemu virtual disk images from host linux os Tom Sandholm
2005-01-17 0:42 ` Magnus Damm
2005-01-17 1:51 ` Tom Sandholm
2005-01-17 3:31 ` Mark Williamson
2005-01-17 15:26 ` Jim C. Brown
2005-01-17 21:59 ` Tom Sandholm
2005-01-17 4:01 ` Bartosz Fabianowski
2005-01-17 14:24 ` Jim C. Brown
2005-01-17 14:22 ` Jim C. Brown
2005-01-17 14:26 ` Jim C. Brown
2005-01-17 22:04 ` Tom Sandholm
2005-01-17 23:13 ` Heike C. Zimmerer [this message]
[not found] ` <87r7kjejij.fsf@tazzelwurm.hczim.de>
2005-01-17 23:50 ` [Qemu-devel] " Heike C. Zimmerer
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='cshgs2$sd8$1@sea.gmane.org' \
--to=usenet04q4@gmx.net \
--cc=hcz@hczim.de \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.