[Eisfair] Problem beim Kernel-Update
Thomas Bork
tom at eisfair.org
Sa Okt 29 20:21:51 CEST 2016
Am 29.10.2016 um 10:53 schrieb Uwe Kunze:
>> Saving your kernel configuration in /tmp/kernel-backup.tar:
>> /boot
>> /etc/lilo.conf
>> /lib/modules/3.2.81-eisfair-1-SMP
>> /System.map-3.2.81-eisfair-1-SMP
>> /usr/src/linux-3.2.81-eisfair-1/dot-config-smp
>> /usr/src/linux-3.2.82-eisfair-1/dot-config-pae
>> /usr/src/linux-3.2.81-eisfair-1/Module.symvers-smp
>> /usr/src/linux-3.2.82-eisfair-1/Module.symvers-pae
>> /var/install/packages/eiskernel
>> /var/install/packages/eiskernel-smp
>> Done.
>> Compressing /tmp/kernel-backup.tar to /tmp/kernel-backup.tar.gz ...
Hier wird ein Backup Deiner bisherigen Konfiguration erzeugt. Das
benötigt Platz. Du vergleichst also den Zustand vor einer Installation
mit dem Zustand während einer Installation.
>> Cannot move kernel and initrd.gz to old-kernel and old-initrd.gz,
>> cancelling installation!
>> You need at least 4108 blocks in /boot.
>> There are only 0 blocks in /boot available.
Hier wird ermittelt, dass zum Zeitpunkt der Installation nach Backup
(siehe oben) kein Platz mehr vorhanden ist, um den aktiven Kernel und
die aktive initrd zu sichern.
>> Kernel update failed!
>> Successfully installed: eiskernel-pae (2.26.0)!
> Mal davon abgesehen, dass das Install-Script in den letzten 2 Zeilen
> widersprüchliche Angaben macht und eisman das Paket jetzt als
> "installiert" anzeigt, schlägt das Update also fehl.
Die erste Zeile stammt aus dem Install-Skript, die zweite von eisman.
Das install-Skript gibt aber einen exit-Wert von 1 vor:
if [ $available_for_old -ge $du_kernel_initrd ]
then
message="Moving /boot/kernel to /boot/old-kernel ..."
echo "$message"
echo "$message" >>"$klogfile"
mv /boot/kernel /boot/old-kernel
if [ $old_initrd = true ]
then
message="Moving /boot/initrd.gz to /boot/old-initrd.gz ..."
echo "$message"
echo "$message" >>"$klogfile"
mv /boot/initrd.gz /boot/old-initrd.gz
fi
else
echo
message="Cannot move kernel and initrd.gz to old-kernel and
old-initrd.gz, cancelling installation!
You need at least $du_kernel_initrd blocks in /boot.
There are only $available_for_old blocks in /boot available."
mecho --error "$message"
echo "$message" >>"$klogfile"
delete_install_scripts
message="Kernel update failed!"
mecho --error "$message"
echo "$message" >>"$klogfile"
exit 1
fi
Warum eisman den ignoriert? Kann ich nicht sagen.
>> server # df -h
>> Filesystem Size Used Avail Use% Mounted on
>> /dev/hde1 12G 6.7G 4.2G 62% /
>> tmpfs 1.5G 368K 1.5G 1% /run
>> devtmpfs 1.5G 0 1.5G 0% /dev
>> tmpfs 1.5G 24K 1.5G 1% /run/shm
>> tmpfs 2.0M 312K 1.7M 16% /brute_force_blocking
>> /dev/hdi1 459G 227G 209G 53% /mnt/_hdi
>> /dev/hdj1 459G 346G 90G 80% /mnt/_hdj
>> /dev/hdk1 459G 234G 203G 54% /mnt/_hdk
>> /dev/hdl1 459G 316G 121G 73% /mnt/_hdl
> Warum meint das Script, ich hätte 0 blocks in /boot available ?
Sieh Dir das Skript an. Du verwendest keine Boot-Partition, deshalb wird
die Root-Partition zum Vergleich des Platzbedarfs herangezogen, da hier
boot als Verzeichnis existiert.
root wird aus der lilo.conf ermittelt:
tab=`/bin/echo -e "\011\c"`
tabs_or_blanks="[ $tab]*"
old_root_line=`grep "root${tabs_or_blanks}=${tabs_or_blanks}/dev/"
/etc/lilo.conf | head -1`
root=`echo $old_root_line | sed
"s#root${tabs_or_blanks}=${tabs_or_blanks}##g"`
Darauf wird dann 'du' losgelassen:
if [ -n "`df /boot | grep "/boot$"`" ]
then
set -- `df /boot | grep "/boot$"`
boot=$1
available=$4
else
set -- `df / | grep "^$root"`
boot=$1
available=$4
fi
Dann wird die Grösse der alten Sicherung von Kernel und initrd ermittelt:
if [ -f /boot/initrd.gz ]
then
old_initrd=true
else
old_initrd=false
fi
du_old_kernel_initrd='0'
if [ -f /boot/old-kernel ]
then
du_old_kernel=`du /boot/old-kernel | awk '{print $1}'`
else
du_old_kernel='0'
fi
if [ -f /boot/old-initrd.gz ]
then
du_old_initrd=`du /boot/old-initrd.gz | awk '{print $1}'`
else
du_old_initrd='0'
fi
du_old_kernel_initrd=`expr $du_old_kernel + $du_old_initrd`
Zur Sicherung des aktuellen Kernels und der aktuellen initrd steht der
Platz von $available (siehe oben) plus dem Platz des alten Kernels und
der alten initrd zur Verfügung (denn die werden ja überschrieben).
available_for_old=`expr $available + $du_old_kernel_initrd`
Dann wird der Platzbedarf des gerade aktiven Kernels und der gerade
aktiven initrd vor Installation ermittelt:
if [ -f /boot/kernel -a -f /boot/initrd.gz ]
then
du_kernel_initrd=`du -c /boot/initrd.gz /boot/kernel | tail -n1 |
awk '{print $1}'`
else
du_kernel_initrd=`du /boot/kernel | awk '{print $1}'`
fi
Und wenn der Platz für eine Sicherung ausreicht, wird gesichert,
ansonsten abgebrochen:
if [ $available_for_old -ge $du_kernel_initrd ]
then
message="Moving /boot/kernel to /boot/old-kernel ..."
[...]
else
echo
message="Cannot move kernel and initrd.gz to old-kernel and
old-initrd.gz, cancelling installation!
You need at least $du_kernel_initrd blocks in /boot.
There are only $available_for_old blocks in /boot available."
[...]
exit 1
fi
Gehen Dir eventuell die inodes aus?
--
der tom
[eisfair-team]
Mehr Informationen über die Mailingliste Eisfair