Bash 从磁盘映像文件装入多个分区
我正在尝试编写一个小的bash脚本,它将装载给定磁盘映像文件中的所有分区。我知道这是可行的,因为我在过去已经做过了,但我已经记不起来了。也许我用的是Bash 从磁盘映像文件装入多个分区,bash,mount,Bash,Mount,我正在尝试编写一个小的bash脚本,它将装载给定磁盘映像文件中的所有分区。我知道这是可行的,因为我在过去已经做过了,但我已经记不起来了。也许我用的是/dev/mapper,但我记不得了。我使用的sizelimit参数是分区的实际大小,而不是分区的绝对扇区端 对不起,我的英语不好 #!/bin/bash source=$1 destination=$2 if !(fdisk $source -l); then exit 1 fi echo "" partdata
/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
#/bin/bash
来源=$1
目的地=$2
如果!(fdisk$source-l);然后
出口1
fi
回声“”
partdata=$(fdisk$source-l | grep$source | tail-n+2)
偏移量=0
sizelimit=0
而[“$partdata”!=”];做
read-ra数组考虑一种不需要进行偏移计算的不同方法。让我们首先使用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
您可以使用p1
和p2
作为普通分区,就像您通常使用的那样:
for i in "$loopf"p*; do
sudo mount "$i" "somwheere/$(basename "$i")"
done
完成后,umount
所有目录并断开循环设备的连接:
sudo losetop -d "$loopf"
offset=$offset,sizelimit=$sizelimit
为什么不让内核检测有哪些分区?用我的映像文件检查脚本,它有一个分区表和几个分区。至少据我所知,使用不带偏移量的mount/sizelimit是行不通的。当使用sudo losetup“$loopf.”/file.img
时,我收到一条警告,最后一个扇区没有使用。我的图像文件的总文件大小为4294967295字节。所以最后一个扇区的大小只有511字节,而不是512字节。这可能是个问题吗?使用sudo partprobe“$loopf”
会创建一个错误:(错误的语言翻译)错误:硬盘外的分区是不可能的这可能是个问题吗?
取决于分区表-我会创建它,以便最后一个分区不使用最后一个文件<代码>错误:硬盘外的分区不可能代码>-看起来无论如何都是这样。我的图像似乎已损坏。我的系统管理员已设置最大文件大小的策略。这个最大文件大小比我的图像所需的文件大小要小。不,我的图像应该是16gb左右,但只有4gb。无论如何,谢谢你的帮助。我想你提出的解决方案在正常情况下是可行的。至少我现在发现了真正的错误:-)