re
Fatal: Duplicate "disk =" definition for /dev/sdb
which seems to be root of all this ...
patch 16_geometry is at fault: cleverly, the stat is omitted when the
disk is declared inaccessible. too bad, that disks are identified by
their device number, which is only determined by a stat. ergo, an
uninited var is used, which happens to still contain the value from
the previous disk entry.
the patch was supposed to fix bug #379518.
not checking the partition table is obvious, but it is beyond me why the
device node must not be stat()ed.
the attached patch Works For Me (TM).
#! /bin/sh -e
##
## All lines beginning with `## DP:' are a description of the patch.
## DP: Make sure that disks marked 'inaccessible' do not have their
## DP: partition tables checked. Fixes #379518.
## DP: Doesn't fix the crash on missing /dev nodes, unfortunately.
[ -f debian/patches/00patch-opts ] && . debian/patches/00patch-opts
patch_opts="${patch_opts:--f --no-backup-if-mismatch}"
if [ $# -ne 1 ]; then
echo >&2 "`basename $0`: script expects -patch|-unpatch as argument
"
exit 1
fi
case "$1" in
-patch) patch $patch_opts -p1 < $0;;
-unpatch) patch $patch_opts -p1 -R < $0;;
*)
echo >&2 "`basename $0`: script expects -patch|-unpatch
as argument"
exit 1;;
esac
exit 0
@DPATCH@
diff -urN lilo-22.7.3.orig/geometry.c lilo-22.7.3/geometry.c
--- lilo-22.7.3.orig/geometry.c 2006-12-03 20:12:42.009282000 +0000
+++ lilo-22.7.3/geometry.c 2006-12-03 20:23:23.960349187 +0000
@@ -381,7 +381,8 @@
die("do_disk: stat %s: %s",disk,strerror(errno));
}
if (!S_ISBLK(st.st_mode) ||
- (has_partitions(st.st_rdev) && (MINOR(st.st_rdev) &
P_MASK(st.st_rdev))))
+ (!cfg_get_flag(cf_disk,"inaccessible") &&
+ has_partitions(st.st_rdev) && (MINOR(st.st_rdev) &
P_MASK(st.st_rdev))))
die(" '%s' is not a whole disk device",disk);
entry = alloc_t(DT_ENTRY);