Django Screencast für Einsteiger

Wer ein kleines, sehr sauberes Web-Framework ohne Dependency-Hell sucht und Django noch nicht oder nur vom “hören sagen” kennt, sollte einen Blick auf die Getting started with Django Screencasts von Kenneth Love riskieren.

Posted in Uncategorized | Tagged , , | Leave a comment

Deployment & Betrieb (nicht nur) von Eigenentwicklungen, oder: die Applikation als VM – ein Nachwort

2011. Die Cloud ist in aller Munde. Gleichzeitig konfigurieren Administratoren in den “Werkshallen” (Rechenzentren) vor dem Deployment kruder Applikationen noch immer Betriebssysteme händisch, wälzen Support-Matrizen, suchen applikationsspezifische Runtime-Environments, Libraries, Lizenzkeys, telefonieren mit Sales-Leuten, binden das ganze in diverse Clusterstacks und so weiter.

Das ist Arbeit, von der man sich viel sparen können sollte. Nicht um gelangweilt oder gar arbeitslos (siehe “weniger wichtig”) zu sein versteht sich. :-)

Der Schlüssel dazu ist meiner Meinung nach nicht nur ITIL (siehe “streitbare Begriffe” wie “gesunder Menschenverstand”, “Freiheit”, “Liebe”, “Problem-Anderer-Leute-Feld” (PAL), etc.) oder zc.buildout oder Puppet oder Grundeinkommen – das Anstreben von Simplizität (siehe UNIX-Konzept, DNA-Replikation, Mandelbrot-Menge, etc.) reicht vollkommen aus.

Jedenfalls sollte man IMHO wo’s nur geht “die” Applikation endlich zur virtuellen Maschine machen – und zwar ohne sich auf einen Vendor festzunageln! Ein egozentrisches Beispiel:

1. mein Development-Environment ist eine VM (Debian,GPL). Dort habe ich meine Sourcen, mein mercurial-Repository, meine Tools. Dank (InnoTek’s, äh Sun’s, äh Oracle’s) VirtualBox kann ich die mal im Park oder in der Bahn auf’m Netbook oder auch mal bei Windows-Menschen starten und an Software weiterentwickeln.

2. meine “Produktion” ist eine VM (Debian,GPL), läuft allerdings auf einem dicken “Eisen” unter SLES & KVM. Natürlich ist das nix weiter als eine Kopie der Prod-VM die ich unter VirtualBox (selbstverständlich in einem Crypto-Container) mal im Park oder in der Bahn auf’m Netbook oder auch mal bei Windows-Menschen… :-)

3. Fixe ich direkt auf der auf dem Eisen laufenden VM etwas (“Prozessbruch” -> wild! ;-) – kopiere ich mir die anschließend in meine “Staging” Umgebung (Laptop :). So merke ich recht schnell vor jedem Deployment, wenn ich vergessen habe etwas in meine Development-VM “zurückfließen” zu lassen. (ok, ich gebe zu an diesem Punkt hakt es ob Faulheit nicht selten :-)

4. Moment… KVM möchte die vbox-Images nicht & umgekehrt! Ja, da sind Konvertierungsschritte notwendig, na und?

5. Das Eisen oder der Linux-Cluster werfen komische “dazed & confused” Meldungen, komische Geräusche und letztlich macht die HA die Grätsche! -> Solution: Letztes Backup der Prod-VM einfach irgendwoanders hochbeamen (“Backup-Infrastruktur”, Laptop ;) und den Cluster betüddeln (der das ja nicht braucht, siehe “self-healing”).

6. Viel gute Software “funktioniert einfach so” (bei Betriebssystemen wird das z.B. als normal angesehen), und noch viel mehr könnte einfach so funktionieren. Jetzt fragen Sie sich mal, warum das eigentlich nicht so ist. (Falls Sie aus dem Management oder Sales-Bereich kommen – fragen Sie sich bitte mal: benutzen Sie ihre Software selbst auch? Bottom-Up meine ich? Falls Sie ein “Hacker” sind – fragen Sie sich mal: möchten Sie, wenn Sie Dinge benutzen müssen, die sie nicht interessieren, auch diese verstehen müssen? Interessieren Sie sich für Verwaltungsrecht bei unvermeidbaren Behördengängen? One-Click Patente??)

7. Letztlich sind wir alle irgendwo “User” – und nur wenn wir uns gegenseitig helfen, kann unnötige Arbeit verschwinden statt sie in neuen Schläuchen zu rekreieren. “EDV” sollte nicht “IT” heissen, nur damit die ursprüngliche Übersetzung “Ende der Vernunft” schwerer zu googlen ist. ;-)

8. Vielen Dank für Ihre geschätzte Aufmerksamkeit! & happy “write once, run everywhere!” (SUN Microsystems, 1996)! :-)

Zusammenfassung

Klar, das Thema “Virtualisierung” ist letztlich so alt wie ein Mainframe – aber im Gegensatz zu totem Baum “lebt sich die Virtualisierung” mittlerweile netzkompatibel (“frei und gut”).
Eine komplett pre-configured VM statt einer Applikation auszuliefern ist in vielen Fällen eine sehr gute Idee und ohne finanzielle Aufwände zu realisieren. Besonders für “Kleinkram” (was keine Abwertung von Sinnhaftigkeit meint – im Gegenteil, sondern hosting-Aspekte wie z.B. I/O Last). Auch können Backup & Restore Mechanismen vereinfacht werden.
Das Potential geht dann flöten, wenn man sich von einem Anbieter oder nebulösen (komplexen) Automatismen abhängig macht (siehe “KISS”) – nicht immer braucht es “Live Migration Capability” und “Self-Healing” und “elastic Scale-out”, zumindest kann es nicht schaden den Ball flach und stattdessen im Auge zu behalten, dass – wie Großmutter schon wusste – nicht alles Gold ist, was glänzt. :-)

Posted in Enterprise | Tagged , , , , , , , | Leave a comment

Willige Amateure…

und professionelle Schlampen scheinen großes Interesse am Thema ISCSI zu haben. Jedenfalls hämmern das die Bots hochfrequent in meine diesbezüglich längst veralteten Notizen. Der RSS feed ist dann auch zu nix gebrauchen (Page eigentlich ewig nicht mehr angefasst). 15 Minuten Zeit genommen und Akismet als Spamfilter im Wiki installiert. Noch unschlüssig ob es Bots u.U. irgendwie “ehrt”, daß sie keine “early adopters” sind und auch nicht das Thema “cloud” hinkritzeln…

Posted in Uncategorized | Leave a comment

Lieber TÜV… (Update)

Lieber TÜV, bitte lass mir meine Nuckelpinne!

a) Sie ist volljährig und eine treue Gefährtin.

b) Ohne verbeulte, alte Automobile auf den Straßen würde Rundgelutschtes nicht als schön durchgehen.

c) Mehr als 50 km/h verlange ich dem Auto selten ab. Von mir aus kann auf Autobahnen gerne ein Tempolimit eingeführt werden, damit nicht mehr soviele Menschen in verkehrssicheren Autos ihre (und andere) Gedärme über den Asphalt spritzen.

Herzlichen Dank,
Dein kaf!sch.

Posted in RL | Tagged , | Leave a comment

Von der Symmetrix Management Console (SMC) lernen?

Die Symmetrix Management Console (SMC) ist ein WebGUI zur Administration von EMC’s High-End Storage-Arrays (Symmetrix). Mit ihr lassen sich z.B. Config-Changes “zusammenklicken”. Wie sich das bei einem ordentlichen Softwarestack gehört “abstrahiert” die SMC hierbei lediglich die zu bauenden Kommandos für den (potentiell uninteressierten) User und schickt sie an ein API. Man kann diese Kommandos aber genausogut über die entsprechenden Commandline-Tools (symconfigure) an das API übergeben – damit bieten sich gute Scripting- & Kontrollmöglichkeiten.

Leider zeigt die SMC die verwendeten Kommandos zur Durchführung der zusammengeklickten Konfigurationsänderungen nicht an. Aus dem Logfile des SymAPI lassen sich diese aber 1:1 ableiten.

Im folg. z.B. Erstellung von ein paar Thin-Devices, anschließendes Meta-zusammenbauen und in einen Thin-Pool namens “R6″ binden (ohne Pre-Allocation).

05/16/2011 14:28:40.716   2436   8096     {
05/16/2011 14:28:40.716   2436   8096       create dev count=3,
    size=294624 cyl, emulation=FBA, config=TDEV, mvs_ssid=0,
    dynamic_capability=dyn_rdf;
05/16/2011 14:28:40.716   2436   8096     }

05/16/2011 14:28:44.091   2436   8096     Validating configuration
    changes..........................Validated.
05/16/2011 14:28:44.107   2436   8096       New symdevs: 02B3:02B5 

05/16/2011 14:48:25.607   2436   4904     {
05/16/2011 14:48:25.607   2436   4904       create dev count=20,
    size=17476 cyl, emulation=FBA, config=TDEV, mvs_ssid=0,
    dynamic_capability=dyn_rdf;
05/16/2011 14:48:25.607   2436   4904     }

05/16/2011 14:48:28.997   2436   4904     Validating configuration
    changes..........................Validated.
05/16/2011 14:48:28.997   2436   4904       New symdevs: 02B6:02C9 

[...]

05/18/2011 11:40:57.794   2436   6848     {
05/18/2011 11:40:57.794   2436   6848       form meta
    from dev 02B3 config=Concatenated;
05/18/2011 11:40:57.794   2436   6848       add dev
    02B4:02B5 to meta 02B3;
05/18/2011 11:40:57.794   2436   6848     }

[...]

05/18/2011 11:58:10.982   2436   7360     {
05/18/2011 11:58:10.982   2436   7360       form meta
    from dev 02B6 config=Concatenated;
05/18/2011 11:58:10.982   2436   7360       add dev
    02B7:02C9 to meta 02B6;
05/18/2011 11:58:10.982   2436   7360     }

[...]

05/18/2011 12:06:26.232   2436   4416     {
05/18/2011 12:06:26.232   2436   4416       bind tdev 02B3
    to pool R6 preallocate size=0 cyl;
05/18/2011 12:06:26.247   2436   4416       bind tdev 02B6
    to pool R6 preallocate size=0 cyl;
05/18/2011 12:06:26.247   2436   4416     }

Damit lässt sich tatsächlich Suchaufwand im “Solution Enabler Guide” einsparen. :-)

Das Logfile befindet sich üblicherweise unter:

  • /var/symapi/log/symapi-YYYYMMDD.log (UNIX)
  • C:\Programme\EMC\SYMAPI\log\symapi-YYYYMMDD.log (Windows)

Weiterführende Links:

Posted in Enterprise | Tagged , , , | Leave a comment

Webapps für Faule – Oracle Application Express (APEX)

Das Versprechen einfach und schnell gute Webapplikationen entwickeln zu können (“Rapid Webapplication Development”) wird bei jedem Framework großgeschrieben. Nicht selten erkauft man sich damit Einschränkungen, die zu umgehen Aufwand – sprich Erfahrung – erfordern. Django ist ein gutes Beispiel, bei dem der Nutzen schnell den Aufwand übertrifft – vorausgesetzt man programmiert gerne.

Es gibt aber genügend Leute, die so ekliges Zeug wie Excel-Sheets benutzen, statt ihre Daten einer kleinen selbstgestrickten Webapplikation anzuvertrauen – einfach weil sie nicht gerne selbst programmieren. In solchen Fällen lohnt sich ein Blick auf APEX – ein Produkt welches Oracle als “kostenlos” bewirbt und das auch Nicht-Programmierern erlaubt sich eine Webapplikation inklusive Datenmodell “zusammenklicken”.

Klingt erstmal typisch doof, ist es aber nicht. Ausprobieren lohnt sich! Einen Online-Workspace mit der aktuellen APEX Version 4.0 und ein paar MB Speicherplatz kann man kostenfrei & schnell auf apex.oracle.com erstellen. Wer mehr will, kann sich eine Oracle XE DB und APEX lokal (oder besser in einer virtuellen Machine) installieren.

Fazit: Spaß macht APEX auf Anhieb! Trotz des unangenehmen Nachgeschmacks – es ist weder Open-Source, noch ist es ohne eine Oracle Datenbank zu gebrauchen. Intensive Nutzung führt damit zu einem Vendor-Lock-In. Fans & Besitzer der Berühmten “eh-da Kosten” (Firmen) hält sowas natürlich nicht ab, damit auch komplexe Applikationen zu bauen, die weit über ein “Zusammenklicken” hinausgehen. Ob PL/SQL in heutigen Zeiten (Python,Ruby,Java) noch geeignet ist, um Website-/Prozesslogik zu implementieren? Glaub’s ja nicht, aber es verdienen momentan Consultants richtig Geld damit (Intranetprojekte, Kurse, Bücher) und, naja, meiner bescheidenen Meinung nach wirkt der Layer “unter den Klicks” schon “hacktivistisch”. Vielleicht bin ich auch einfach nur zu jung (haha ;-). Äußerst beliebt sind übrigens die zahlreichen Rezepte zur Integration von Open-Source Software zum “Aufhübschen” des Frontends (jQuery & Co.) – APEX setzt out-of-the-box (noch) auf Flash.

Auf jeden Fall bleibt mir ein interessanter, kurzweiliger Eindruck des “Gucken & Herumspielen erlaubt” (das ist bei Enterprise-Software leider nicht selbstverständlich – siehe z.B. Fa. EMC, wo IMHO jeder Furz an Information hinter einem uncrawlbaren “Customer-Portal” versteckt wird #-)) – und selbiges kann ich auch nur empfehlen. Der Weg zum Oracle Fanboy bleibt aber weit – gerade folg. in den Lizenzbedingungen zu “meiner” lokalen Oracle XE & APEX Installation unter Debian gelesen:


# ORACLE DATABASE 10g EXPRESS EDITION LICENSE AGREEMENT
[...]
Upon 45 days written notice Oracle may audit the use of the program. You agree to cooperate with Oracle’s audit and provide reasonable assistance and access to information. You agree that Oracle shall not be responsible for any of your costs incurred in cooperating with the audit.
[...]

WTF???


Weiterführende Links:


Posted in Enterprise | Tagged , , , , | Leave a comment

Oracle DB – Schulungsumgebung auf dem Netbook

Um grundlegende Erfahrungen mit Oracle’s Vorzeigeprodukt zu sammeln benötigt man – entgegen hartnäckigen Gerüchten – beileibe keine Rechenboliden. Mein Playground-Setup läuft momentan in einer virtuellen Maschine mit schlappen 380MB RAM und 7 GB Festplattenspeicher – auf einem aktuellen Netbook mit gerade mal 1GB RAM! :-)

Wie man die Oracle DB Software in der kostenfreien XE-Variante schmerzfrei unter Debian Squeeze installiert, die notwendigsten Basics konfiguriert und via Python darauf zugreift ist Inhalt dieses Artikels. Er richtet sich an Oracle Newbies (wie mich).

Download der Software

Nachdem man sich in der VM-Software seiner Wahl ein frisches Debian eingerichtet hat, ist noch die Linux kernel AIO access library nachzuinstallieren:

apt-get install libaio1

Anschließend holt man sich die Oracle Software in der sog. “Express Edition” (XE). Diese ist kostenfrei nutzbar, jedoch im Funktionsumfang eingeschränkt (z.B. Datenvolumen <= 4GiB, CPU & RAM Beschränkungen, bla) - für's Lernen von Basics reicht sie allemal aus. :-)
Man achte darauf, Server- und Client-Package zu ziehen, also folgende:

	oracle-xe-client_10.2.0.1-1.0_i386.deb
	oracle-xe-universal_10.2.0.1-1.0_i386.deb

Und wenn wir gerade dabei sind, ziehen wir auch gleich noch das Python-Modul cx_Oracle in der Variante cx_Oracle-5.0.4-10g-unicode-py25-1.i386.rpm.

Installation

Die Installation ist eigentlich idiotensicher. Defaultwerte kann man übernehmen, allerdings sollte man die Frage, ob die DB beim Booten automatisch gestartet werden soll, IMHO unbedingt mit No beantworten. Dies schont zum einen die Ressourcen bei Nichtgebrauch der DB und zum anderen lernt man dadurch etwas hilfreiches (später), also:

dpkg -i oracle-xe-universal_10.2.0.1-1.0_i386.deb
dpkg -i oracle-xe-client_10.2.0.1-1.0_i386.deb

/etc/init.d/oracle-xe configure

Damit ist die DB einsatzbereit und ein hübsches (nützliches) Webinterface bereits über http://127.0.0.1:8080/apex zu erreichen. Da wir in unserer schlanken VM natürlich keinen X-Server laufen lassen, nützt uns das aber noch nix. ;-)

Console, oder “In the beginning there was the TTY”

Wir werden daher User Oracle

su - oracle

sollten so automatisch im verzeichnis /usr/lib/oracle/xe landen, setzen notwendige Environment-Variablen (ORACLE_HOME etc.)

. /usr/lib/oracle/xe/app/oracle/product/10.2.0/server/bin/oracle_env.sh

und sollten nun das Tool sqlplus nutzen können, um mit der Datenbank zu sprechen.

Um sich als User sys mit dem beim configure-script vergebenen Passwort (hier “password”) anzumelden, tippe man:

oracle@vmora:~$ sqlplus system/password@xe

SQL*Plus: Release 10.2.0.1.0 - Production on Tue Mar 8 14:10:13 2011
Copyright (c) 1982, 2005, Oracle.  All rights reserved.

Connected to:
Oracle Database 10g Express Edition Release 10.2.0.1.0 - Production

SQL>
SQL> SELECT SYSDATE from dual;
SYSDATE
---------
08-MAR-11
SQL> SELECT SQRT(2) FROM dual;
   SQRT(2)
----------
1.41421356
SQL> quit
Disconnected from Oracle Database 10g Express Edition Release 10.2.0.1.0 - Production

Klicki-Bunti Interface

OK. So obiges funktioniert ist es jetzt an der Zeit, dem Webinterface abzugewöhnen nur auf’s Loopback (127.0.0.1) zu lauschen. Googlen fördert eine mitgelieferte PL/SQL-Procedure zu Tage, die man lediglich aufrufen muss.

Also wieder via sqlplus mit der DB verbinden:

oracle@vmora:~$ sqlplus system/password@xe

SQL*Plus: Release 10.2.0.1.0 - Production on Tue Mar 8 15:34:30 2011
Copyright (c) 1982, 2005, Oracle.  All rights reserved.

Connected to:
Oracle Database 10g Express Edition Release 10.2.0.1.0 - Production

Die Procedure aufrufen:

SQL> EXEC DBMS_XDB.SETLISTENERLOCALACCESS(FALSE);

PL/SQL procedure successfully completed.

SQL> quit
Disconnected from Oracle Database 10g Express Edition Release 10.2.0.1.0 - Production

Und schon ist das Webinterface über alle im OS konfigurierten NICs erreichbar. Innerhalb einer VM ohne X-Server ist das sehr praktisch (ja, das VM-Netzwerkinterface muss an das des Wirts gebridged sein).

…oder lieber Python

sqlplus geht mangels History, Cmd-Completion etc. ziemlich schnell auf den Senkel, weswegen – zumindest ich – lieber gleich meine momentane Lieblingssprache Python verwenden will. An Bord hat Python IMHO leider keine Oracle-Bindings. Es gibt aber z.B. das Python-Modul cx_Oracle. Für’s Kompilieren dieses Moduls benötigt man noch einige Development-Packages – diese kann man zwar von Oracle frei herunterladen, aber den Aufwand sparen wir uns. Stattdessen haben wir ja schon einen passenden RPM-Build heruntergeldaen. Dieses wandeln wir via alien in ein DEB um und installieren es.

alien cx_Oracle-5.0.4-10g-unicode-py25-1.i386.rpm
dpkg -i cx-oracle_5.0.4-2_i386.deb

Fertig. :-) Jetzt können wir – vorausgesetzt die Environment-Variablen sind passend gesetzt (LD_LIBRARY_PATH) so komfortabel wie von anderen DBs (MySQL,SQLLite etc.) gewohnt auf die DB zugreifen:

#!/usr/bin/env python
import cx_Oracle

if __name__ == '__main__':
    sSQL = unicode('SELECT SYSDATE FROM dual')
    print type(sSQL)

    con = cx_Oracle.connect(unicode("system/password@127.0.0.1"))
    print con.version
    cur = con.cursor()

    cur.execute(sSQL)

    for result in cur:
        print result
    cur.close()
    con.close()

Falls es hier zu einem “ImportError: libclntsh.so.10.1: cannot open shared object file: ” kommt, hat man höchstwahrscheinlich nicht aufgepasst bzw. vergessen obiger Erwähnung zum LD_LIBRARY_PATH zu folgen. ;-) (siehe cat $ORACLE_HOME/app/oracle/product/10.2.0/server/bin/oracle_env.sh).

Voila! Ein großer Teil des Rattenschwanzes von Oracle-Terminologie liegt nun – empirisch erfahrbar & mobil – vor uns. Jetzt müssten wir uns eigentlich nur noch aufraffen eine hübsche Django-Applikation darauf zu deployen, Backups & Restores zu triggern, das Data Dictionary zu erforschen oder Ähnliches. Happy playing!

Autoboot OFF, reboot und nun???

Achso, wer – wie ich – keine nebulösen Automatismen mag (Kontrollfreak?) und die DB nicht automatisch starten lässt, hat als Oracle Newbie nach einem Reboot ein Problem.

Die DB lässt sich NICHT – wie man naiv erwarten könnte – einfach über das runlevel-script /etc/init.d/oracle-xe start starten! Das wäre zu einfach. :-)

Deshalb:

su - oracle

# 1. datenbank starten

$ sqlplus /nolog
SQL> CONNECT SYS/sys_password as SYSDBA
SQL> STARTUP

# oder (wenn man 'ne BASH hat) als einzeiler:

echo -e "CONNECT SYS/password as SYSDBA\nSTARTUP" | sqlplus /nolog

# 2. listener starten

lsnrctl start
Posted in Enterprise, Tutorial | Tagged , , , , | 1 Comment

Rewolluhschinärrie Relaunch – die neue Querzone

Zum ersten mal seit ca. 8 Jahren wird die Querzone kräftig umgebaut. D.h. die “Altlasten” fliegen raus (blog, gallery, bla), um mehr Platz für’s Wesentliche (jep, damit ist das Wiki gemeint :-) und ganz viele neue tolle Produkte zu schaffen. Ist es gut zu erwähnen, daß für die handvoll “richtiger” Textbeiträge pro Jahr eine eigene kleine Django-Applikation ausreichen würde, diese aber trotz mehrere Zugfahrten “irgendwie” immer grottiger / komplexer wurde, weshalb ich nun vorerst doch wieder zu PHP/Wordpress gegriffen habe? ;-) Naja… das nächste mal fang ich halt nicht mit Multilanguage-Support und selbstgestrickter Revisionssicherheit an – oder trinke auf der Zugfahrt kein Bier :-), sondern konzentriere mich.

Posted in Uncategorized | Leave a comment

Visualisierung DIY – Messdaten plotten mit matplotlib

Zur Aufzeichnung von Infos über Aktivitäten der wichtigsten Subsysteme eines Servers (CPU, Mem, Disk, Net, …) eignet sich die Toolsammlung sar bzw. sysstat hervorragend. Sie ist für die meisten UNIX-Derivate frei verfügbar. Eine graf. Darstellung der Messdaten ist dabei nicht vorgesehen (und naja, proprietäre Tools wie Excel können mir gestohlen bleiben).

Ein entsprechendes Tool ist aber schnell zusammengehackt, weswegen ich genau dies auch getan habe. :-) Das Ergebnis funktioniert ebenso einfach wie gut, so dass ich ihm eine eigene Wiki-Seite spendiert und den Code attached habe. Vielleicht hilft es ja dem ein oder anderen (bitte keine Code-Nazis! :).

Das Tool macht nichts wirklich “schön” – der Fokus liegt einzig auf der Funktion “mal eben” Daten im CSV Format auf einen Zeitstrahl zu plotten. Es ist recht “generisch” bzw. nicht auf sar festgelegt – einfach ein entsprechendes CSV File generieren und gut ist.

Per default wird eine einzige große Grafik generiert. Soll heißen: alle im Input-File enthaltenen Metriken werden untereinander geplottet (siehe Beispiel). Zum Anschauen nehme man daher am besten einen Viewer, in dem das Zoomen Spaß macht (ich nehme feh).

Die Usage entnehme man den Docstrings.

Posted in Uncategorized | Tagged , , | Leave a comment

Wie herum liest man eigentlich SCSI_error codes, oder: Bitschubsereien as usual…

Aus gg. Anlass ergab sich heute im Büro tatsächlich die Frage, “wie herum” denn eigentlich SCSI-Error-Messagecodes zu interpretieren sind. Gute Frage. Besonders bei der IMHO unerträglichen Schweinehitze. :-)

Also (verkürzt) konkret. Hintergrund ist die Fehlermeldung:

SCSI error: return code = 0x00070000

Und die Vermutung / Behauptung:

A) es handelt sich um das “Host Code” Byte, welches hier auf 7 gesetzt ist

B) es handelt sich hier um das “SCSI Sense” Byte, welches hier auf 7 gesetzt ist

Unabhängig von der Frage, was denn welcher der beiden Fälle bedeuten würde, nämlich (“irgendwie” konkret oder eher “diffus”):

SCSI Sense Keys, 7h == DATA PROTECT.
    Indicates that a command that reads or writes the medium
    was attempted on a block that is protected from this
    operation. The read or write operation is not performed.

Host Code, 0x07 == DID_ERROR. internal error

und ob man der LVM-Mailingliste (A) nicht einfach vertrauen sollte, bleibt ersteinmal die Frage: ja watt denn nun? A oder B?

Also TLDP (im Archiv, also outdated) meint:

The meaning of hd_status can be found in drivers/scsi/scsi.h:
This unsigned int is composed out of different parts:

lsb  |    ...    |    ...    | msb
=======|===========|===========|============
status | sense key | host code | driver byte

Ergo: Die 07 ist das 2te Byte von links. Also doch das “Sense-Key” Byte? Für mich als nicht low-level Programmierer ist sowas nicht nur bei der Hitze verwirrend. Deswegen am Besten nochmal langsam, lsb steht für least-significant-bit oder -Byte, also das niederwärtigste Bit/Byte, also jenes ganz rechts aussen, ok, und 07 ist nicht nur das 2te Byte von links sondern auch das dritte von rechts, also doch “Host Code”? Ich gebe zu den Leuten von der LVM-Liste erstmal intuitiv schneller zu glauben als anderen Aussagen, aber so richtig zufrieden bin ich damit noch nicht. Da fehlt noch etwas, um das zu untermauern.

Also um halbwegs sicher zu gehen, mache ich mir den Spass, ein wenig durch die Kernel-Sourcen zu greppen. Auch ohne grosse C-Kenntnisse geht das. Und tatsächlich, ein wenig Sucherei, et voila:

1. wo wird DID_ERROR definiert und passt das zur doku?

kiste:/usr/src/linux/include # grep -iR "DID_ERROR" ./scsi/scsi.h

#define DID_ERROR       0x07    /* Internal error

OK, passt. Wenn auch nicht ganz zur Stelle, die in der (veralteten) TLDP Doku genannt wurde (drivers/scsi/scsi.h).

2. Und wo (und vor allem wie) wird nun z.B. mal so ein Wert zurückgegeben?

kiste:/usr/src/linux/drivers/scsi # grep -iR "DID_ERROR" ./* | less
[...]
./libfc/fc_fcp.c:               sc_cmd->result = (DID_ERROR << 16);
./wd7000.c:             hosterr = DID_ERROR;
[...]

Ah. Die shiften das um 16bit nach links ("<<16"), also ins dritte Byte von rechts, oder? Mal eben schnell mit Python ausprobieren (davon ausgehend es handelt sich um 32bit, also 8 Stellen in Hex-Notation):

kiste2:/mnt/bla/tmp# python -c 'print "%08x" % (07 << 0)'
00000007
kiste2:/mnt/bla/tmp# python -c 'print "%08x" % (07 << 8)'
00000700
kiste2:/mnt/bla/tmp# python -c 'print "%08x" % (07 << 16)'
00070000

Schön. Das sollte reichen, um zu glauben es ist als DID_ERROR und nicht als DATA_PROTECT zu interpretieren. In welcher Reihenfolge die Bytes zu lesen sind, ist nun schonmal klarer. Was'n toller Sommer! *g* ;-)

Posted in Uncategorized | Tagged , , , | Leave a comment