Raid6 in Linux über die Konsole erstellen

In diesem Abschnitt befassen wir uns mit erstellen eine Raid6 über die Linux Konsole.

Voraussetzungen:
– mindestens 4 Festplatten
– etwas Rechenleistung für das Softraid (mdadm)

Vorteile:
– hohe Datensicherheit: da bis zu 2 Festplatten gleichzeitig ausfallen können ohne Daten zu verlieren

Nachteile:
– man verschenkt etwas Festplattenplatz (2 Festplatten werden für Paritydaten benutzt) und stehen nicht für Daten zur Verfügung. Bei Raids mit mehr als 4 Platten relativiert sich der Nachteil aber schnell.

Installation von mdadm:

yum install mdadm              [RedHat]
apt-get install mdadm          [Debian]

Nach der Installation müssen die Festplatten ausgewählt werden, welche als Raid verbunden werden sollen. Um die Laufwerkszuordung anzuzeigen verwedet man am besten:

# fdisk -l | grep sd
Disk /dev/sda: 3000.6 GB, 3000592982016 bytes, 5860533168 sectors
Disk /dev/sdc: 3000.6 GB, 3000592982016 bytes, 5860533168 sectors
Disk /dev/sdd: 3000.6 GB, 3000592982016 bytes, 5860533168 sectors
Disk /dev/sde: 3000.6 GB, 3000592982016 bytes, 5860533168 sectors
Disk /dev/sdb: 3000.6 GB, 3000592982016 bytes, 5860533168 sectors
Disk /dev/sdf: 256.1 GB, 256060514304 bytes, 500118192 sectors

In diesem Fall verwenden wir die Laufwerke /dev/sda bis / dev/sde

Um zu prüfen, ob eine der Platten zu einem Raid gehört kann man mdadm –examine (-E) ausführen:

# mdadm -E /dev/sd[a-e]
mdadm: No md superblock detected on /dev/sda.
mdadm: No md superblock detected on /dev/sdb.
mdadm: No md superblock detected on /dev/sdc.
mdadm: No md superblock detected on /dev/sdd.
mdadm: No md superblock detected on /dev/sde.

Wird kein superblock gefunden ist alles sauber und man kann weiter machen.

Nun müssen die Laufwerke partitioniert werden:

# fdisk /dev/sda                                  
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0x57755548.

WARNING: The size of this disk is 3.0 TB (3000592982016 bytes).
DOS partition table format can not be used on drives for volumes
larger than (2199023255040 bytes) for 512-byte sectors. Use parted(1) and GUID 
partition table format (GPT).


The device presents a logical sector size that is smaller than
the physical sector size. Aligning to a physical sector (or optimal
I/O) size boundary is recommended, or performance may be impacted.

Befehl (m für Hilfe): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   Erweiterte
Select (default p): p
Partitionsnummer (1-4, default 1): 1
Erster Sektor (2048-4294967295, Vorgabe: 2048): 
Benutze den Standardwert 2048
Last Sektor, +Sektoren or +size{K,M,G} (2048-4294967294, Vorgabe: 4294967294): 
Benutze den Standardwert 4294967294
Partition 1 of type Linux and of size 2 TiB is set

Befehl (m für Hilfe): t
Selected partition 1
Hex code (type L to list all codes): fd
Changed type of partition 'Linux' to 'Linux raid autodetect'

Befehl (m für Hilfe): p

Disk /dev/sda: 3000.6 GB, 3000592982016 bytes, 5860533168 sectors
Units = Sektoren of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk label type: dos
Disk identifier: 0x57755548

   Gerät  boot.     Anfang        Ende     Blöcke   Id  System
/dev/sda1            2048  4294967294  2147482623+  fd  Linux raid autodetect

Befehl (m für Hilfe): w
Die Partitionstabelle wurde verändert!

Rufe ioctl() um Partitionstabelle neu einzulesen.
Synchronisiere Platten.

Das muss mit allen Festplatten durchgeführt werden.

Anschließend kann dann das Raid erzeugt werden:

#  mdadm --create /dev/md0 --level=6 --raid-devices=5 /dev/sda1 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1     
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.

Der Bereitstellungsprozess dauert je nach Festplattenanzahl und Größe mehrere Stunden.

Den Status kann man mit folgendem Befehl beobachten:

# watch -n 1 cat /proc/mdstat
Every 1,0s: cat /proc/mdstat                                                                            Fri Jan  6 16:31:45 2017

Personalities : [raid6] [raid5] [raid4]
md0 : active raid6 sde1[4] sdd1[3] sdc1[2] sdb1[1] sda1[0]
      6442053120 blocks super 1.2 level 6, 512k chunk, algorithm 2 [5/5] [UUUUU]
      [=====>...............]  resync = 26.8% (576457508/2147351040) finish=195.0min speed=134255K/sec
      bitmap: 12/16 pages [48KB], 65536KB chunk

unused devices: <none>

Nach dem das Raid synchronisiert ist kann man sich den Zustand mit folgendem Befehl anzeigen lassen:

# mdadm --detail /dev/md0                                                                                   :(
/dev/md0:
        Version : 1.2
  Creation Time : Fri Jan  6 15:22:54 2017
     Raid Level : raid6
     Array Size : 6442053120 (6143.62 GiB 6596.66 GB)
  Used Dev Size : 2147351040 (2047.87 GiB 2198.89 GB)
   Raid Devices : 5
  Total Devices : 5
    Persistence : Superblock is persistent

  Intent Bitmap : Internal

    Update Time : Fri Jan  6 20:19:54 2017
          State : clean 
 Active Devices : 5
Working Devices : 5
 Failed Devices : 0
  Spare Devices : 0

         Layout : left-symmetric
     Chunk Size : 512K

           Name : localhost.local:0  (local to host localhost.local)
           UUID : 7a7b49b9:ebaf805a:a9ec676c:d6c31c13
         Events : 3224

    Number   Major   Minor   RaidDevice State
       0       8        1        0      active sync   /dev/sda1
       1       8       17        1      active sync   /dev/sdb1
       2       8       33        2      active sync   /dev/sdc1
       3       8       49        3      active sync   /dev/sdd1
       4       8       65        4      active sync   /dev/sde1

Als nächstes muss das Raid mit einem Dateisystem formatiert werden. Hier bietet sich für Raids z.B.  xfs an.

# mkfs.xfs /dev/md0
meta-data=/dev/md0               isize=512    agcount=32, agsize=50328448 blks
         =                       sectsz=4096  attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=1610510336, imaxpct=5
         =                       sunit=128    swidth=384 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =Internes Protokoll     bsize=4096   blocks=521728, version=2
         =                       sectsz=4096  sunit=1 blks, lazy-count=1
realtime =keine                  extsz=4096   blocks=0, rtextents=0

Anschließend muss man das Raid im Dateisystem einhängen:

# mkdir /mnt/raid6
# mount /dev/md0 /mnt/raid6/

Wenn es funktioniert sollte man noch das automatische Einhängen einrichten:

# vi /etc/fstab

/dev/md0 /mnt/raid6 xfs defaults,nobootwait,nofail 0 0

! Wichtig ! hierbei sind die Optionen nobootwait,nofail welche dafür sorgen, dass das System auch noch startet wenn das RAID mal in einen Fehlerzustand kommt. Sonst hat man nur noch die Möglichkeit an der lokalen Konsole das System zu reparieren.

Ob die Konfiguration richtig ist lässt sich mit mount -av testen:

mount -av
/                        : ignored
/boot                    : already mounted
/home                    : already mounted
swap                     : ignored
/mnt/raid6               : already mounted

Zu guter Letzt muss noch die Konfiguration des Raids gespeichert werden:

# mkdir /etc/mdadm          [if it does not already exist]
# mdadm --detail --scan --verbose >> /etc/mdadm/mdadm.conf
# cat /etc/mdadm.conf 
ARRAY /dev/md0 level=raid6 num-devices=5 metadata=1.2 name=localhost.local:0 UUID=7a7b49b9:ebaf805a:a9ec676c:d6c31c13
   devices=/dev/sda1,/dev/sdb1,/dev/sdc1,/dev/sdd1,/dev/sde1

Um über Probleme mit dem Raid informiert zu werden kann man sich von mdadm Mails senden lassen.

Hierfür müssen /etc/mdadm/mdadm.conf noch die folgenden Einträge hinzugefügt werden:

MAILADDR <receivers mail address>
MAILFROM <senders mail address>

Anschließend kann mit der Installation von oVirt begonnen werden. Weiter

 

 

 

 

 

 

Logitech G500 – prellende Taster tauschen

Sonntag Nachmittag man setzt sich an den Rechner und plötzlich macht die Maus nur noch Doppelkicks und klickt willkürlich bei Bewegungen!?!!11elf  Dach dem die Üblichen Verdächtigen in den Windows Einstellungen auch nicht schuld waren und der Gang zum lokalen Elektronikdealer auch versperrt war ging die Suche weiter.

Im Logitech Support Forum bin ich dann auf Leidensgenossen gestoßen, die das Problem auf die billigen Mikrotaster zurück geführt haben. Hier wird auf neue Mikrostaster in der selben Bauform verwiesen. Die kann man sich aus einer anderen Maus besorgen oder z.B. bei Aliexpress. Also Lötkolben an und tauschen…

maus1
Netter weise hat Logitech zumindest 3 von 4 Schaubenfundorte „intuitiv“ durch Vertiefungen markiert. Die vierte befindet sich wie üblich unter dem Typenschild.

maus2
Nach dem die Gleitpads entfernt sind kann man die Maus mit einem PH0 Schraubendreher öffnen.

maus3
Beim öffnen muss man etwas vorsichtig sein um nicht das Flachbandkabel der Seitentasten zu beschädigen. Am einfachsten ist das Flachbandkabel an den Seitentaste zu lösen. Danach kann das Schubfach für die Tarierungsgewichte mit 3 Schrauben entfernt werden.

maus4
Das Mausrad ist eher etwas ungewöhnlich mit einem Bolzen gesichert der einfach herausgezogen werden kann. Danach lässt sich das Mausrad nach oben abnehmen. Vorsicht hier sind 2 winzige Federn unterlegt die schnell verloren gehen können.

maus5
Um die Platine zu lösen müssen 4 PH00 Schrauben gelöst werden. Danach kann der Stecke des USB-Kabels abgezogen und die Platinen abgezogen werden.

maus6
Leider hat man beim Design auf eine Steckverbindung verzichtet welche die beiden Platinen mit einander verbindet. Hier hat man 2 Optionen:

  • man fummelt mit dem Lötkolben und der Absaugpumpe zwischen den beiden Platinen herum um die Schalter aus zulöten  (klingt schon nach keiner guten Idee!)
  • man lötet alle 12 Kontakte ab und hat dann Platz. Hier ist es besser die Lötstellen auf der Unterseite zu öffnen da auf der Oberseite die Taste direkt neben den Platinenverbindung stehen und leicht beschädigt werden können.

maus7
Hat man die beiden Platinen getrennt ist das Austauschen der Schalter ein Leichtes. Sind die Schalter getauscht kann man bei Bedarf das Gehäuse und das Mausrad noch reinigen und dann alle Schritte wieder rückwärts durchführen. Und dem sonntäglich PC vergnügen steht nichts mehr im Weg.

Einfache Server Status-LED durch ESP-12F Witty Cloud Board

Das Witty Cloud Board ist ein kleines und günstiges ESP-12F Wifi Board. Es kommt, z.B. von hier, für ca. 2,50€ pro Board aus dem China portofrei nach Deutschland. Das Board umfasst nicht nur den ESP-12F, eine RGB LED, einen Lichtempfindlichen Widerstand (LDR), sondern kommt auch mit Programmer Board für USB.

Node
Node in seiner Kaugummibox

Das Board besteht aus zwei Teilen. Unten ist der Programmierer, welcher in der IDE als … ausgewählt wird. Der obere Teil ist der eigentliche ESP. Dieser kann auch Standalone betrieben werden, ebenfalls über USB.

Video hier

Die Anwendung die ich schon ewig umsetzen wollte, doch nie richtig die Zeit fand war eine optische Rückmeldung was auf meiner Seite www.kalenderA4.de passiert. Dort kann man sich kostenlos Kalender im PDF Format herunterladen. Die Seite wird von mir eigentlich nur zum Spaß betrieben, da die Werbung dort bei weitem nicht einmal die Domainkosten deckt. Aber es macht eben Spaß und die Rückmeldungen der User ist bisher auch immer sehr positiv gewesen. Die Idee war daher, ich würde gerne sehen, wenn ein User gerade wieder einen Kalender heruntergeladen hat. Das schenkt mir immer ein kleines Lächeln. Genug der rührseeligen Worte, hier nun der Aufbau.

Zuerst brauchen wir einen Code für den Witty Node: (gefunden und geändert von hier)

/**
 * Webstatus.ino
 *
 *
 */

#include <Arduino.h>

#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>

#include <ESP8266HTTPClient.h>

#define USE_SERIAL Serial

ESP8266WiFiMulti WiFiMulti;

const int BUTTON = 4;
const int RED = 15;    // Pin for red LED
const int GREEN = 12;  // Pin for green LED
const int BLUE = 13;   // Pin for blue LED

void flashColor(int color); // declaration for flasher

void setup() {

    USE_SERIAL.begin(115200);
    USE_SERIAL.setDebugOutput(true);

flashColor(RED);
flashColor(GREEN);
flashColor(BLUE);
    USE_SERIAL.println();
    USE_SERIAL.println();
    USE_SERIAL.println();

    for(uint8_t t = 4; t > 0; t--) {
        USE_SERIAL.printf("[SETUP] WAIT %d...\n", t);
        USE_SERIAL.flush();
        delay(1000);
    }

    WiFiMulti.addAP("SSID", "PASSWORD"); // CHANGE FOR YOUR PLEASURE
    

}
 
void flashColor(int color) // LED should blink slowly... its nicer
{
  for(int i = 0; i <256; i+=25)
  {
    analogWrite(color, i);
    delay(100);
  }
  delay(800);
  for(int i = 0; i <256; i+=25)
  {
    analogWrite(color, 256-i);
    delay(100);
  }
  analogWrite(color, 0);
}

void loop() {
    // wait for WiFi connection
    if((WiFiMulti.run() == WL_CONNECTED)) {
        HTTPClient http;

        USE_SERIAL.print("[HTTP] begin...\n");
        // configure traged server and url
        
        http.begin("YOURDOMAIN.COM/SCRIPT.php?token=YOURTOKEN"); //HTTP

        USE_SERIAL.print("[HTTP] GET...\n");
        // start connection and send HTTP header
        int httpCode = http.GET();

        // httpCode will be negative on error
        if(httpCode > 0) {
            // HTTP header has been send and Server response header has been handled
            USE_SERIAL.printf("[HTTP] GET... code: %d\n", httpCode);

            // file found at server
            if(httpCode == HTTP_CODE_OK) {
                String payload = http.getString();
                USE_SERIAL.println(payload);
                char chars[payload.length()+1];
 
  payload.toCharArray(chars, payload.length()+1);
                for(int i = 0; i < payload.length()+1; i++)
                {
                  char c = chars[i];
                  USE_SERIAL.println(c);
                  if(c=='D') // jeder Download gruen
                    {
                      flashColor(GREEN);
                      delay(1000);
                    } else if(c=='H') // Jeder Visit blau
                    {
                      flashColor(BLUE);
                      delay(1000);
                    }
                }
                flashColor(RED);
                
            }
        } else {
            USE_SERIAL.printf("[HTTP] GET... failed, error: %s\n", http.errorToString(httpCode).c_str());
        }

        http.end();
    }
    

    delay(5*60*1000); // TODO SLEEP MODE... 
    USE_SERIAL.printf("end loop...");
}

Der Code bringt den Node dazu sich mit dem WLan zu verbinden, erstmal kurz anzuzeigen, dass alles läuft und dann geht er in den ewigen Loop. Dieser ruft eine Webseite auf und erhält dort als Content einfach nur einen String von Buchstaben. Wenn ein solcher String da ist, wird dieser nach und nach abgearbeitet. Am Ende, sofern ein String da war, wird die rote LED kurz angeschaltet, damit man weiß der String ist fertig. Bei H wird die blaue LED kurz angeschaltet, bei D die grüne. Nach 5 Minuten Pause wird der Server erneut angefragt. Das ist bei meinem Besucheraufkommen völlig ausreichend. Wenn Ihr mehr Besucher habt, einfach die Pause kürzer machen, bzw. auch die Dauer des Aufleuchtens verkürzen.

Dann brauchen wir noch das PHP Skript. Dieses ist sehr einfach gestrickt. In meinem Fall holt es Besucher der Webseite und Downloads. Diese sind in einer Datenbank gespeichert, zusammen mit einem Datum wann ich zuletzt abgefragt habe. Das Ergebnis ist dann entweder ein H für Hit und D für Download.

<?php
$token = $_GET["token"];

if($token != "THETOKENYOUSETFORSECURITY") die("YOU SCUM!");

/*
* ADD CODE WHICH GENERATES AN ARRAY OF CHARACTERS...
*/
foreach($result AS $r)
{
 echo $r;
}

Alles in allem sehr simpel. Das Gehäuse, damit die LEDs auch schön zu sehen sind, ist eine leere Kaugummipackung. Sie steht neben dem Fernseher, und wenn sie aufleuchtet, weiß ich, dass meine Seite wieder jemandem geholfen hat. Praktischerweise hat mein TV Receiver eine USB Schnittstelle über die ich den Witty Node betreiben kann.

 

AliExpress und die Packstation

sjwpkmb9u-k-maico-amorim
Maico Amorim – https://unsplash.com/photos/SJWPKMb9u-k

AliExpress ist einer der Online Plattformen um günstig Artikel direkt aus Asien zu sourcen. Der Nachteil ist, die Artikel benötigen meist sehr unterschiedlich lange Zeit um geliefert zu werden. Aber alle haben eins gemeinsam, es ist nie planbar wann sie kommen. Nicht alle sind dauernd zuhause und viele können sich auch nicht dauernd die kleinen Päckchen ins Büro liefern lassen. Gerade bei Kleinstmengen kann dies schon eine beachtliche Anzahl werden.

Daher habe ich ein paar Probebestellungen durchgeführt und an meine Packstation schicken lassen.

Artikel Artikelstandort Bestellt Geliefert Versandmethode
50 Edelstahlkugeln China / China Post 30. Juni 2016
20. Juli 2016 in die Packstation China Post Ordinary Small Packet Plus
 Auto Ladegerät Shzenzhen / China Post  27. Juni 2016  09. August 2016 in die Packstation China Post Ordinary Small Packet Plus
Jumper Caps China 24. Juni 2016 Dispute gestartet

(Ging wohl zurück)

China Post Registered Air Mail
Abstandshalterschrauben China / China Post 30. Juni 2016 26. Juli 2016 in die Packstation Seller’s Shipping Method/Keine weiteren Angaben
12000mAh Solar Powerbank China / China Post 07. Juli 2016 Dispute gestartet

(Ging wohl zurück)

China Post Registered Air Mail
Max7219 Dot Matrix Module China / China Post 30. Juni 2016 Dispute gestartet

(Ging wohl zurück)

China Post Registered Air Mail
Anti Statische Beutel China 07. Juli 2016 Dispute gestartet

(Ging wohl zurück)

China Post Registered Air Mail
 Power SP10T Drehschalter  China / China Post  24. Juni 2016 Buyer Protection extended—

Dispute gestartet (Ging wohl zurück)

Betrag rückerstattet

China Post Registered Air Mail

Die Tabelle wird geupdated sollte sich etwas tun.

Bisher sind von den 8 Bestellungen eine in der Packstation gelandet.

UPDATE: 2 von 8 Bestellungen sind erfolgreich in der Packstation gelandet. Also 25%.

UPDATE: 3 von 8 Bestellungen sind erfolgreich in der Packstation gelandet. Es scheint sich abzuzeichnen, dass Registered Air Mail nicht in Packstationen landet. Ordinary Packets scheinen kein Problem zu sein.

UPDATE: Bei einer Bestellung habe ich die Buyer Protection verlängern lassen. Das ist nicht umbedingt unüblich, muss nicht an der Packstation liegen.

UPDATE: Habe bei 3 Paketen die Dispute Resolution gestartet. Laut Tracking sind diese wohl zurück nach China geschickt worden. Wie befürchtet kommt die Packstation mit Registered Air Mail nicht klar. 2 Registered Pakete sollten noch unterwegs sein, diese haben aber noch bis September „Zeit“.

UPDATE: Alle „Registered“ Pakete kamen nie an, wurden zurück geschickt und dementsprechend rückerstattet. 

Zusammenfassung: Wenn ihr an eine Packstation schicken wollt achtet auf „Ordinary Packets Plus“ und Finger weg von „Registered“ Optionen. Wie es sich mit „Standard Shipping Method“ aussieht, bzw. was dahinter steckt, ist leider nicht so richtig klar, darum einfach nur „Ordinary Packets“ an die Packstation schicken lassen. Das hab ich nun noch ein paarmal gemacht mit Erfolg.

TP-Link Powerline Adapter reparieren TL-PA211

Die Powerline Adapter von TP-LINK sind günstig bei allen gut sortierten Elektronikhändlern zu bekommen. Leider währt die Freude oft nicht so lange, da es immer wieder zu Totalausfällen kommt.  Innerhalb der Garantiezeit bekommt man sie auch mehrfach Umgetauscht. Ärgerlich wird es aber wenn die Garantie gerade abgelaufen ist. Der Übeltäter ist meist nur ein Bauteil:

cap-exploded

Ein Schelm der hier an geplante Obsoleszenz denkt… TP-Link Powerline Adapter reparieren TL-PA211 weiterlesen