【问题标题】:mounting multiple partitions from a disk image file从磁盘映像文件挂载多个分区
【发布时间】:2021-03-23 13:35:21
【问题描述】:

我正在尝试编写一个小型 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 的超级块已损坏, 缺少编码页,或其他错误。

【问题讨论】:

  • offset=$offset,sizelimit=$sizelimit 你为什么不想要partprobe 或者让内核检测有哪些分区?检查你的脚本shellcheck.net
  • 我的镜像文件有一个分区表和几个分区。至少据我所知,使用没有 offset/sizelimit 的 mount 是行不通的。

标签: bash mount


【解决方案1】:

考虑一种不需要进行一些偏移计算的不同方法。我们先创建一个带有 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 losetup -d "$loopf"

【讨论】:

  • 当使用sudo losetup "$loopf" ./file.img 时,我收到一条警告说最后一个扇区没有被使用。我的图像文件的总文件大小为 4294967295 字节。所以最后一个扇区的大小只有 511 字节,而不是 512。这可能是个问题吗?
  • 使用sudo partprobe "$loopf"会产生错误:(错误的语言翻译)错误:硬盘外的分区是不可能的!
  • May this be a problem? 取决于分区表 - 我会创建它以便最后一个分区不使用最后一个文件。 Error: Partitions outside the hard disk are not possible! - 无论如何似乎都是这样。
  • 我的图片好像损坏了。我的系统管理员设置了最大文件大小的策略。而且这个最大文件大小低于我的图像所需的文件大小。
  • 不,我的图像应该在 16gb 左右,但只有 4gb。还是要谢谢你的帮助。我想您提出的解决方案将在正常条件下工作。至少我现在发现了真正的错误:-)
猜你喜欢
  • 2014-04-15
  • 1970-01-01
  • 2010-11-28
  • 1970-01-01
  • 1970-01-01
  • 2016-02-25
  • 1970-01-01
  • 2014-04-30
  • 1970-01-01
相关资源
最近更新 更多