| #!/bin/bash |
| |
| # Copyright (c) 2010 The Chromium OS Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| # Determine script directory |
| SCRIPT_DIR=$(dirname $0) |
| GPT=cgpt |
| |
| # Read GPT table to find the starting location of a specific partition. |
| # Args: DEVICE PARTNUM |
| # Returns: offset (in sectors) of partition PARTNUM |
| partoffset() { |
| sudo $GPT show -b -i $2 $1 |
| } |
| |
| # Read GPT table to find the size of a specific partition. |
| # Args: DEVICE PARTNUM |
| # Returns: size (in sectors) of partition PARTNUM |
| partsize() { |
| sudo $GPT show -s -i $2 $1 |
| } |
| |
| # Mount a partition from an image into a local directory |
| # Args: IMAGE PARTNUM MOUNTDIRECTORY |
| mount_image_partition() { |
| local image=$1 |
| local partnum=$2 |
| local mount_dir=$3 |
| local offset=$(partoffset "$image" "$partnum") |
| sudo mount -o loop,offset=$((offset * 512)) "$image" "$mount_dir" |
| } |
| |
| # Extract a partition to a file |
| # Args: IMAGE PARTNUM OUTPUTFILE |
| extract_image_partition() { |
| local image=$1 |
| local partnum=$2 |
| local output_file=$3 |
| local offset=$(partoffset "$image" "$partnum") |
| local size=$(partsize "$image" "$partnum") |
| dd if=$image of=$output_file bs=512 skip=$offset count=$size |
| } |
| |