mkdisk: attach and detach loop device after each operation.
This commit is contained in:
parent
1afee2214f
commit
8837ab35e8
58
mkdisk.bash
58
mkdisk.bash
@ -24,16 +24,16 @@
|
|||||||
|
|
||||||
cmd_parted()
|
cmd_parted()
|
||||||
{
|
{
|
||||||
dev="$1"; shift
|
bdev="$1"; shift
|
||||||
"$cmd_parted" "$dev" -a cylinder -s -- $@
|
"$cmd_parted" "$bdev" -a cylinder -s -- $@
|
||||||
}
|
}
|
||||||
|
|
||||||
cmd_mount()
|
cmd_mount()
|
||||||
{
|
{
|
||||||
fs="$1"
|
fs="$1"
|
||||||
dev="$2"
|
bdev="$2"
|
||||||
mkdir -p mount &&
|
mkdir -p mount &&
|
||||||
mount -t "$fs" "$dev" mount
|
mount -t "$fs" "$bdev" mount
|
||||||
}
|
}
|
||||||
|
|
||||||
cmd_unmount()
|
cmd_unmount()
|
||||||
@ -47,7 +47,7 @@ cmd_unmount()
|
|||||||
|
|
||||||
die()
|
die()
|
||||||
{
|
{
|
||||||
umount mount > /dev/null 2>&1
|
umount -v mount > /dev/null 2>&1
|
||||||
rmdir mount > /dev/null 2>&1
|
rmdir mount > /dev/null 2>&1
|
||||||
[ -n "$dev_loop" ] && losetup -d "$dev_loop"
|
[ -n "$dev_loop" ] && losetup -d "$dev_loop"
|
||||||
exit 1
|
exit 1
|
||||||
@ -253,27 +253,46 @@ if [ -z "$cfg_partitions" ]; then
|
|||||||
)
|
)
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Loop device.
|
cmd_loop_attach()
|
||||||
dev_loop="$(losetup -f)"
|
{
|
||||||
|
export dev="$1"
|
||||||
|
export dev_loop="$(losetup -f)"
|
||||||
|
|
||||||
nfo1 "Attaching $dev to $dev_loop"
|
nfo1 "Attaching $dev to $dev_loop"
|
||||||
losetup -v "$dev_loop" "$dev"
|
losetup -v "$dev_loop" "$dev"
|
||||||
if [ $? -ne 0 ]; then
|
if [ $? -ne 0 ]; then
|
||||||
|
unset dev_loop
|
||||||
|
die
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
cmd_loop_detach()
|
||||||
|
{
|
||||||
|
nfo1 "Detaching $dev_loop"
|
||||||
|
sync && sync && sync && sync
|
||||||
|
blockdev --flushbufs "$dev_loop"
|
||||||
|
losetup -v -d "$dev_loop"
|
||||||
|
sync && sync && sync && sync
|
||||||
unset dev_loop
|
unset dev_loop
|
||||||
die
|
}
|
||||||
fi
|
|
||||||
|
|
||||||
nfo1 "Obliterating partition table"
|
nfo1 "Obliterating partition table"
|
||||||
|
cmd_loop_attach "$dev"
|
||||||
dd if=/dev/zero of="$dev_loop" bs=1 count=1M count=32 > /dev/null 2>&1 || die
|
dd if=/dev/zero of="$dev_loop" bs=1 count=1M count=32 > /dev/null 2>&1 || die
|
||||||
|
losetup -a
|
||||||
|
cmd_loop_detach
|
||||||
|
losetup -a
|
||||||
|
|
||||||
nfo1 "Creating empty partition table"
|
nfo1 "Creating empty partition table"
|
||||||
cmd_parted "$dev_loop" \
|
cmd_loop_attach "$dev"
|
||||||
mklabel msdos \
|
cmd_parted "$dev_loop" mklabel msdos || die
|
||||||
|| die
|
cmd_loop_detach
|
||||||
|
|
||||||
part_nr=1
|
part_nr=1
|
||||||
xboot_system_id=0
|
xboot_system_id=0
|
||||||
for ((i = 0; i < ${#cfg_partitions[@]}; i += 4)); do
|
for ((i = 0; i < ${#cfg_partitions[@]}; i += 4)); do
|
||||||
|
cmd_loop_attach "$dev"
|
||||||
|
|
||||||
part_type="${cfg_partitions[$i+0]}"
|
part_type="${cfg_partitions[$i+0]}"
|
||||||
part_label="${cfg_partitions[$i+1]}"
|
part_label="${cfg_partitions[$i+1]}"
|
||||||
part_start="${cfg_partitions[$i+2]}"
|
part_start="${cfg_partitions[$i+2]}"
|
||||||
@ -301,22 +320,23 @@ for ((i = 0; i < ${#cfg_partitions[@]}; i += 4)); do
|
|||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
|
cmd_loop_detach
|
||||||
let part_nr++
|
let part_nr++
|
||||||
done
|
done
|
||||||
|
|
||||||
if [ -f "$cfg_sys_family/rootfs/boot/extlinux/mbr.bin" ]; then
|
if [ -f "$cfg_sys_family/rootfs/boot/extlinux/mbr.bin" ]; then
|
||||||
nfo1 "Installing bootloader in MBR..."
|
nfo1 "Installing bootloader in MBR..."
|
||||||
|
cmd_loop_attach "$dev"
|
||||||
dd if="$cfg_sys_family/rootfs/boot/extlinux/mbr.bin" of="$dev_loop" > /dev/null 2>&1
|
dd if="$cfg_sys_family/rootfs/boot/extlinux/mbr.bin" of="$dev_loop" > /dev/null 2>&1
|
||||||
|
cmd_loop_detach
|
||||||
fi
|
fi
|
||||||
|
|
||||||
nfo1 "Synchronizing caches"
|
nfo1 "Synchronizing caches"
|
||||||
sync && sync && sync && sync && sync && sync
|
sync && sync && sync && sync && sync && sync
|
||||||
blockdev --flushbufs "$dev_loop" || die
|
|
||||||
|
|
||||||
# Make sure the partition has 0x0e type.
|
# Make sure the partition has 0x0e type.
|
||||||
if [ $xboot_system_id -eq 1 ]; then
|
if [ $xboot_system_id -eq 1 ]; then
|
||||||
|
cmd_loop_attach "$dev"
|
||||||
echo -en "t\n1\ne\nw\n" | $cmd_fdisk "$dev_loop" > /dev/null 2>&1
|
echo -en "t\n1\ne\nw\n" | $cmd_fdisk "$dev_loop" > /dev/null 2>&1
|
||||||
|
cmd_loop_detach
|
||||||
fi
|
fi
|
||||||
|
|
||||||
nfo1 "Detaching loop device $dev_loop"
|
|
||||||
losetup -v -d "$dev_loop"
|
|
||||||
|
Reference in New Issue
Block a user