From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1CqgON-00049q-9k for qemu-devel@nongnu.org; Mon, 17 Jan 2005 18:34:39 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1CqgOM-00049T-Jq for qemu-devel@nongnu.org; Mon, 17 Jan 2005 18:34:38 -0500 Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1CqgOM-00049O-4k for qemu-devel@nongnu.org; Mon, 17 Jan 2005 18:34:38 -0500 Received: from [80.91.229.2] (helo=main.gmane.org) by monty-python.gnu.org with esmtp (Exim 4.34) id 1CqgBQ-0006Uq-Oa for qemu-devel@nongnu.org; Mon, 17 Jan 2005 18:21:17 -0500 Received: from root by main.gmane.org with local (Exim 3.35 #1 (Debian)) id 1CqgBP-0001pn-00 for ; Tue, 18 Jan 2005 00:21:15 +0100 Received: from p50833221.dip0.t-ipconnect.de ([80.131.50.33]) by main.gmane.org with esmtp (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Tue, 18 Jan 2005 00:21:15 +0100 Received: from hcz by p50833221.dip0.t-ipconnect.de with local (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Tue, 18 Jan 2005 00:21:15 +0100 From: "Heike C. Zimmerer" Date: Tue, 18 Jan 2005 00:13:56 +0100 Message-ID: References: <41EAF9E2.9030108@gsinet.net> <20050117142640.GC5486@jbrown.mylinuxbox.org> <41EC3687.20805@gsinet.net> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Sender: news Subject: [Qemu-devel] Re: Mounting qemu virtual disk images from host linux os Reply-To: hcz@hczim.de, qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Tom Sandholm 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 </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