April 5, 2012

The power of Linux

Heute mal etwas völlig anderes: man kennt das ja, da hat man eine externe Festplatte, die man unbedingt frei haben muss, um sie mit neuem Zeug zu füllen und muss sie mindestens für ein, zwei Tage auf dem eigenen Rechner speichern können. Auf der externen Festplatte sind vielleicht 300 GB an Daten und auf dem eigenen Rechner sind noch 350 GB an Plattenplatz frei. Dumm nur, dass sich diese 350 GB auf drei Festplatten verteilen und auf der ersten 200 GB frei sind, auf der zweiten 100 und der dritten ebenfalls.

Was also tun? Man könnte versuchen, den Inhalt von einer Platte auf die andere interne zu kopieren, um so zumindest auf einer genügend freien Platz zu schaffen – aber das dauert und besonders einfach ist das auch nicht immer. Nein.

Praktischer ist es dabei, sich ein billiges Raid-0 (Striping) über Loop-Devices zu basteln, deren Imagedateien auf den drei Festplatten liegen, das man dann mit einem beliebigen, geeigneten Dateisystem formatiert und die externe Festplatte wird darauf gesichert. Das geht standardmässig mit jedem einigermaßen, aktuellen Linux recht einfach.

Zuerst einmal fängt der Spaß damit an, dass man die Imagefiles auf den jeweiligen Festplatten als sog. Sparse File anlegt. Dies macht man praktischerweise mit dem netten Befehl dd:

dd if=/dev/zero of=file1.img bs=1k seek=128M

Das legt ein Sparsefile an, welches maximal 128 GB an Inhalt fasst. Man lege also so drei Sparse-Files auf den verschiedenen Festplatten an, nenne sie meinetwegen file1.img, file2.img und file3.img und passe natürlich auch die Größe an, meinetwegen 150 GB, 100 GB und 50 GB.

Als nächstes muss man dann Linux sagen, dass es diese Image-Files als Loopback-Device zur Verfügung stellt. Wer ein Loopback-Device nicht kennen sollte: damit tut der Kernel so, als sei das Image-File ein weiteres, physikalisches Gerät. Man kann diese Devices also z.B. nutzen, um ISO-Images direkt von der Festplatte zu mounten und auszulesen, eine praktische Sache.

Der Befehl, den wir dazu brauchen, ist losetup, und so sieht das dann auf:

losetup /dev/loop0 /file1.img
losetup /dev/loop1 /mnt/bla/file2.img
losetup /dev/loop2 /mnt/bla2/file3.img

Damit wird dem Device /dev/loop0 die Datei file1.img zugewiesen usw.

Als nächstes müssen wir dann aus den drei Devices ein Raid-0 basteln, was nichts anderes bedeutet als dass der Kernel aus dem Speicherplatz der drei Dateien einen einzigen, zusammenhängenden Bereich generiert, und das geht so:

md-adm --create /dev/md0 --level=0 --raid-devices=3 /dev/loop0 /dev/loop1 /dev/loop2

Damit wird der Kernel angewiesen, mit der Datei /dev/md0 ein Raid-0 zur Verfügung zu stellen, welches sich genau über die drei Loop-Devices erstreckt.

Als letztes formatiere man dann das Raid-Device md0 noch mit einem Dateisystem (hier: Ext4) seiner Wahl, beispielsweise so:

mkfs.ext4 /dev/md0

Und mounte es:

mount /dev/md0 /mnt/backup

Wenn man dann später das Backup nicht mehr braucht, kann man die Imagedateien einfach löschen und der Platz ist wieder frei, und fertig ist die Laube. Schön, nicht wahr?

Ach ja, und wenn man später mal die Dateien doch noch mal zusammen bauen will zum Raid-0, um nach einem Neustart wieder darauf zuzugreifen, muss man nur den Schritt mit losetup ausführen und danach das hier eintippen:

md-adm --assemble /dev/md0 /dev/loop0 /dev/loop1 /dev/loop2

Das ist alles.

PS: Für wen Linux und dessen Kommandozeile ein böhmisches Dorf ist, der sollte besser die Finger davon lassen, bevor er sich noch wichtige Daten zerschießt und ohnehin ist es sinnvoll, immer mindestens ein aktuelles Backup zur Hand zu haben! Ihr seid gewarnt!

Mods leben gefährlich

Als Moderator von Gor auf Deutsch ist man es ja gewohnt, dass die Avatare, welche wegen ihres eigenen Verhaltens möglicherweise mal stumm geschaltet werden, meistens darüber nicht besonders erfreut sind und einen kräftig anpampen. Das muss man ertragen können, sonst ist man da fehl am Platze (wobei das generelle Abschalten des Chats mir mehr und mehr als eine sehr gute Idee erscheint!)

Nun gibt es da so einen weiblichen Avatar, der zu Recht von Kusa – zumindest meint die Dame das – stumm geschaltet worden ist. Das kommt vor. Aber was macht dieser Avatar daraus? Die nutzt nun einen OOC-Grund dafür, dass sie IC einen Kill an Kusa in Auftrag geben will!

Im Profil(!!!) der Dame steht dazu folgendes:

Gor auf deutsch mit OOkdings als Neroline Tante Kindergartenschreck? Ne Danke

Need a Assasine. 5000 Tarsk for a Job.
IM me. Real Assasine, no german.
Head oookusama Hirano
log with 30 minutes rp befor kill, smile
and r

Ich bin ja viel Dünnpfiff gewohnt, aber das setzt nun wirklich doch dem Faß die Krone auf. Abgesehen davon würde ein Mord aus solchen Gründen sowieso niemals validiert werden.

Hypergrid 2.0: die Zukunft ist jetzt!

Diva Canto (bürgerlicher Name Crista Lopes), die Erfinderin des Hypergrids, erklärt in einem ihrer seltenen Blogposts bei sich, was für die Version 2.0 des Hypergrid-Protokolls geplant ist und wie es funktionieren soll.

Zunächst geht sie dabei ein wenig auf die Geschichte der verschiedenen Versionen ein: so war HG 1.0 ausschließlich als „proof of concept“ gedacht gewesen, um zu testen, ob das Konzept überhaupt funktionieren könnte, nicht mehr aber auch nicht weniger. Die Implementierung irgendwelcher Sicherheitsmaßnahmen stand dabei noch nicht zur Debatte, es ging ausschließlich darum, ob man dem Viewer glauben machen könnte, dass er sich noch im selben Grid bewege – und man konnte. Das Hauptziel zu testen, ob und wie man den Viewer für Zwecke mißbrauchen könne, für die er niemals gedacht gewesen war, war erfolgreich erreicht.

Als nächstes Ziel mit HG 1.5 ging es darum, erste einfache Sicherheitsmaßnahmen zu etablieren. Mit dieser Version wurde eine fälschungssichere Identität eingeführt, ein etwas sicherer Zugriff auf das Inventar und gridübergreifende IMs sowie Freundeslisten. Das ist der aktuelle Stand der Dinge, für den große Teile von Opensimulator umgeschrieben werden mussten, damit es überhaupt funktionierte.

Also was wird mit Hypergrid 2.0 kommen, was sind die Ziele?

Inventar
Zuerst einmal  soll das Inventar zu 100% abgesichert werden und der Ordner „My Suitcase“ wird endlich ohne externe Webapplikationen benutzbar sein [Anm.: 100% Sicherheit kann und wird es niemals geben, bei solchen vollmundigen Claims werde ich immer skeptisch!]. Wenn ein Benutzer in ein anderes Grid teleportiert, dann hat das Grid nur noch Zugriff auf den Ordner „My Suitcase“ und der Rest ist nicht sichtbar. Teleportiert der Benutzer dann zurück, wird der Ordner „My Suitcase“ wieder durch den echten Root-Ordner ersetzt und fertig.

Ob und wie der Ordner genau genutzt werden kann, wird dabei konfigurierbar sein. Es kann beispielsweise sein, das manche Grids den Export ihrer Assets mit diesem Ordner nicht erlauben wollen, und so wird der Benutzer dann extern leicht anders ausseehen.

Zugriffskontrolle auf Benutzerebene
Es werden verschiedene Richtlinien an Zugriffskontrollen implementiert werden: wer teleportieren kann und wie, wer zu einem teleportieren kann und von wo. Diese Kontrollen werden auf verschiedenen Richtlinien basieren, die die Information über die Benutzer selber als auch deren Herkunftsgrids berücksichtigen werden.

So wird es beispielsweise möglich sein, dass nur Benutzer ab einem bestimmten Level über das Hypergrid andere Grids besuchen können werden, während andere unterhalb dieses Levels es nicht können – das ist ein Wunsch, den gerade Bildungseinrichtungen häufig fordern. Es wird möglich sein, eine Liste an Grids festzulegen, die die Benutzer besuchen dürfen – oder nicht.

Für mögliche Gäste ist es ebenfalls analog möglich zu bestimmen, von welchen Grids Besucher erlaubt sind und für welche nicht – oder es ganz einfach ganz abzuschalten.

Zugriffskontrolle auf Asset-Ebene
Es wird eine Möglichkeit geben um einzustellen, ob das Grid Assets exportieren darf und wenn ja, zu welchen Grids oder generell. HG 2.0 wird dabei allerdings keine feinere Einstellungsmöglichkeit unterstützen, man wird also nicht sagen einstellen können, das ein bestimmtes Set an Assets exportiert werden darf und das andere nicht. Dies benötigt eine Möglichkeit, so etwas einzustellen und bisher ist diese noch nicht existent.