【发布时间】: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 是行不通的。