繁体   English   中英

从磁盘映像文件挂载多个分区

[英]mounting multiple partitions from a disk image file

我正在尝试编写一个小的 bash 脚本,该脚本将挂载给定磁盘映像文件中的所有分区。 我知道这行得通,因为我过去已经这样做了,但我不记得了。 也许我以某种方式使用/dev/mapper但我不记得了。 我将sizelimit参数用于分区的实际大小,而不是分区的绝对扇区末端。

对不起,我的英语不好。

#!/bin/bash

source=$1
destination=$2

if !(fdisk $source -l); then
    exit 1
fi

echo ""

partdata=$(fdisk $source -l|grep $source|tail -n +2)

offset=0
sizelimit=0

while [ "$partdata" != "" ]; do
    read -ra ARRAY <<< "$partdata"

    echo "ARRAY: ${ARRAY[0]} ${ARRAY[1]} ${ARRAY[2]} ${ARRAY[3]}" #echo for debugging

    mkdir $destination"/"${ARRAY[0]}
    ((offset=512*${ARRAY[1]}))
    ((sizelimit=512*${ARRAY[3]}))

    echo "#mount -v -o ro,loop,offset=$offset,sizelimit=$sizelimit -t auto $source $destination/${ARRAY[0]}" #echo for debugging

    mount -v -o ro,loop,offset=$offset,sizelimit=$sizelimit -t auto $source $destination"/"${ARRAY[0]}

    echo ""

    partdata=$(echo "$partdata"|tail -n +2)
done

exit 0

编辑:翻译错误信息:

mount: /mnt/raspi_qr_prototype_test_sample.img2: 文件系统类型错误,选项无效,/dev/loop1 的超级块损坏,缺少编码页,或其他错误。

考虑一种不需要进行一些偏移计算的不同方法。 让我们首先创建一个带有 DOS 分区表的示例文件:

truncate -s 20M file.img
printf "%s\n" o n p 1 '' +10M n p 2 '' '' p w | fdisk ./file.img

那么你也能:

loopf="$(sudo losetup -f)"      # ie. /dev/loop0 for example
sudo losetup "$loopf" ./file.img
sudo partprobe "$loopf"

然后我会得到:

$ ls /dev/loop0*
/dev/loop0  /dev/loop0p1  /dev/loop0p2

并且您可以像往常一样将p1p2用作普通分区:

for i in "$loopf"p*; do
    sudo mount "$i"  "somwheere/$(basename "$i")"
done

完成后, umount所有目录并断开循环设备:

sudo losetop -d "$loopf"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM