Hot-Swap mit dem IBM/Lenovo Thinkpad T43

Erstellt: 19.11.2007 20:31

Die T4xer Reihe des Thinkpad hat wie seine Vorgänger und Nachfolger die Möglichkeit CD-, DVD-, Harddisklaufwerk, Akku usw. im UltraBay Slim-Schacht während des Betriebes zu wechseln. Das ganze nennt sich Hot-Swap.
Das Ziel ist es, dass sich das Laufwerk wenn man den kleinen Hebel betätigt rechts unten am Schacht direkt von selbst abmeldet und einen Ton ausgibt. Nach dem Einschieben soll es das neue Laufwerk von selbst erkennen, so dass man es mounten kann.
Diese Anleitung wurde mit einem Thinkpad T43 erfolgreich gestestet.

Zuerst muss man im Kernel die Thinkpad ACPI aktivieren. Hier der Pfad im "make menuconfig":

Device Drivers--->
[*] Misc devices --->
<*> Thinkpad ACPI Laptop Extras

Nun compilt man den Kernel.
Falls man nicht weiss, wie man einen Kernel compilt, kann man das in diesem Beitrag nachlesen: Kernel compilen unter Debian

Jetzt ist es möglich, dass man neu eingeschobene Laufwerke erkennen kann, mit diesem Befehl kann man nach neuen Laufwerken scannen:

# echo 0 0 0 > /sys/class/scsi_host/host1/scan

Um ein eingeschobenes Laufwerk sicher zu entfernen, verwendet man folgende zwei Befehle:

# echo 1 > /sys/class/scsi_device/1:0:0:0/device/delete
# echo eject > /proc/acpi/ibm/bay

Sobald die Grüne Anzeige erlischt, kann man nun den Einschub entfernen.

Damit das ganze auch bequem zu handhaben ist, automatisiert man das ganze nun mit einigen Scripts.

Als erstes das Script fürs Einschieben.
Man erstellt die Datei /usr/local/sbin/ultrabay_insert mit den Rechten 775:

#!/bin/bash
echo 12 > /proc/acpi/ibm/beep
sync
echo 0 0 0 > /sys/class/scsi_host/host1/scan
sleep 1
echo 0 0 0 > /sys/class/scsi_host/host1/scan
sleep 1
echo 0 0 0 > /sys/class/scsi_host/host1/scan
sleep 1
echo 0 0 0 > /sys/class/scsi_host/host1/scan

Die Wiederholung der letzen beiden Befehle rührt daher, dass es manchmal länger dauern kann, bis die Hardware reagiert. Dies ist sicherlich nicht die schönste Lösung, aber es funktioniert.
Damit das Ereignis auch ausgelöst wird, braucht es noch die Datei /etc/acpi/events/ultrabay-insert:

event=ibm/bay MSTR 00000001 00000000
action=/usr/local/sbin/ultrabay_insert

Als nächstes erstellt man das Script furs Abmelden des Laufwerks. Für das erstellt man die Datei /usr/local/sbin/ultrabay_eject mit den Rechten 775:

#!/bin/bash
ULTRABAY_SYSDIR='/sys/class/scsi_device/1:0:0:0/device'
shopt -s nullglob

# Umount the filesystem(s) backed by the given major:minor device(s)
unmount_rdev() { perl - "$@" <<'EOPERL' # let's do it in Perl
for $major_minor (@ARGV) {
$major_minor =~ m/^(d+):(d+)$/ or die;
push(@tgt_rdevs, ($1<<8)|$2);
}
# Sort by reverse length of mount point, to unmount sub-directories first
open MOUNTS,"</proc/mounts" or die "$!";
@mounts=sort { length($b->[1]) <=> length($a->[1]) } map { [ split ] } <MOUNTS>;
close MOUNTS;
foreach $m (@mounts) {
($dev,$dir)=@$m;
next unless -b $dev; $rdev=(stat($dev))[6];
next unless grep($_==$rdev, @tgt_rdevs);
system("umount","-v","$dir")==0 or $bad=1;
}
exit 1 if $bad;
EOPERL
}

# Get the UltraBay's /dev/foo block device node
ultrabay_dev_node() {
UDEV_PATH="`readlink -e "$ULTRABAY_SYSDIR/block:"*`" || return 1
UDEV_NAME="`udevinfo -q name -p $UDEV_PATH`" || return 1
echo /dev/$UDEV_NAME
}

if [ -d $ULTRABAY_SYSDIR ]; then
sync
# Unmount filesystems backed by this device
unmount_rdev `cat $ULTRABAY_SYSDIR/block:*/dev
$ULTRABAY_SYSDIR/block:*/*/dev`
|| {
echo 10 > /proc/acpi/ibm/beep; # error tone
exit 1;
}
sync
# Nicely power off the device
DEVNODE=`ultrabay_dev_node` && hdparm -Y $DEVNODE
# Let HAL+KDE notice the unmount and let the disk spin down
sleep 0.5
# Unregister this SCSI device:
sync
echo 1 > $ULTRABAY_SYSDIR/delete
fi
sync
# Turn off power to the UltraBay:
if [ -d /sys/devices/platform/bay.0 ]; then
echo 1 > /sys/devices/platform/bay.0/eject
else
echo eject > /proc/acpi/ibm/bay
fi
# Tell the user we're OK
echo 12 > /proc/acpi/ibm/beep

Als letztes noch die Datei fürs Ereignis vom Abmelden /etc/acpi/events/ultrabay-eject:

event=ibm/bay MSTR 00000003 00000000
action=/usr/local/sbin/ultrabay_eject

Fertig. sich freut

Tagged: Debian Etch Hardware Kernel Linux


Ähnliche Artikel:
W-Lan mit Intel PRO/Wireless 2200BG (ipw2200)
IBM / Lenovo Thinkpad HDAPS (Festplattenschutz), Daemon und Applet einrichten
Speedstep mit dem Pentium M
Lese- und Schreibzugriff auf NTFS-Laufwerke
Exim-Smarthost mit Authentifizierung über STARTTLS

« Vorheriger Eintrag

Nächster Eintrag »

Kommentare

SamuelEa:

30.11.2014 15:17



Kommentar verfassen