[Eisfair] rpc.mountd 100% CPU

Thomas Bork tom at eisfair.org
So Dez 18 22:13:16 CET 2016


Am 18.12.2016 um 17:51 schrieb ich:

> Um in der initramfs sicher zu stellen, dass die notwendigen Devices
> existieren, müsste man das Rootdevice schreibbar mounten und fehlende
> Devices nach /dev des Systems kopieren. Nur welche fehlen da genau und
> warum (siehe oben)?

Wenn ich in der initramfs das dev-Verzeichnis des Systems komplett 
lösche, neu anlege und nur /dev/console und /dev/null aus dem 
dev-Verzeichnis der initramfs in das ansonsten leere dev-Verzeichnis des 
Systems kopiere, startet mein System (auf Raid) völlig normal.

Dazu habe ich mir eine neue busybox gebaut, die cp, rm und mknod 
unterstützt.

if [ -z "$DEVSTATIC" ]
then
     copydevices='yes'

     if [ ! -c "$NEWROOT/dev/console" ]
     then
         copydevices='yes'
     fi

     if [ ! -c "$NEWROOT/dev/null" ]
     then
         copydevices='yes'
     fi

     if [ "$copydevices" = "yes" ]
     then
         # Mount ROOTDEV rw.
         $MOUNT -o remount,rw "$ROOTDEV" "$NEWROOT"

         rm -f -r "$NEWROOT/dev"
         $MKDIR "$NEWROOT/dev"

         # Copy over devices from initramfs/dev to ROOTDEV/dev
         cp -a /dev/console "$NEWROOT/dev/console"
         cp -a /dev/null    "$NEWROOT/dev/null"
         # Uncomment to debug /dev, if dynamic.
         ls -lR /dev >"$NEWROOT"/mit_mdev.txt
         ls -lR "$NEWROOT/dev" >"$NEWROOT"/vor_udev.txt
         $MOUNT -o remount,ro "$ROOTDEV" "$NEWROOT"
     fi

     # Reset kernel hotplugging to /sbin/hotplug
     echo "Resetting kernel hotplugging to /sbin/hotplug ..."
     echo "/sbin/hotplug" > /proc/sys/kernel/hotplug
fi


Oben ist copydevices='yes' gesetzt, da ich erst weiter unten das 
dev-Verzeichnis des Systems komplett lösche, um den Fehlerfall zu erzwingen.

Normalerweise könnte das ansonsten so aussehen (das Löschen und 
Neuerstellen das dev-Verzeichnisses des Systems findet hier natürlich 
nicht statt, copydevices ist 'no' und wird nur bei fehlenden Devices 
gesetzt und das Debugging der Devices ist deaktiviert):

if [ -z "$DEVSTATIC" ]
then
     copydevices='no'

     if [ ! -c "$NEWROOT/dev/console" ]
     then
         copydevices='yes'
     fi

     if [ ! -c "$NEWROOT/dev/null" ]
     then
         copydevices='yes'
     fi

     if [ "$copydevices" = "yes" ]
     then
         # Mount ROOTDEV rw.
         $MOUNT -o remount,rw "$ROOTDEV" "$NEWROOT"

         # Copy over devices from initramfs/dev to ROOTDEV/dev
         cp -a /dev/console "$NEWROOT/dev/console"
         cp -a /dev/null    "$NEWROOT/dev/null"

         # Uncomment to debug /dev, if dynamic.
         #ls -lR /dev >"$NEWROOT"/mit_mdev.txt
         #ls -lR "$NEWROOT/dev" >"$NEWROOT"/vor_udev.txt
         $MOUNT -o remount,ro "$ROOTDEV" "$NEWROOT"
     fi

     # Reset kernel hotplugging to /sbin/hotplug
     echo "Resetting kernel hotplugging to /sbin/hotplug ..."
     echo "/sbin/hotplug" > /proc/sys/kernel/hotplug
fi


Aber eine busybox mit den zusätzlichen Features ist viel fetter. 
Deswegen würde ich gern erst mal wissen, wie das leere dev-Verzeichnis 
zustande kommt...

-- 
der tom
[eisfair-team]


Mehr Informationen über die Mailingliste Eisfair