Archive for Februar, 2010

OpenSolaris auf einer V880 installieren

Ich habe heute OpenSolaris auf einer SunFire V880 installiert. Das ganze war nicht ganz so trivial wie ich mir das gedacht habe. Ich habe dazu den Textinstaller benutzt. Diese basiert auf Build 131. Man kann sich das Image z.B. von genunix.org herunter laden.
Hier war mein erster Fehler, ich hatte nich geprüft ob die Checksumme stimmt. Aber irgendwie wollte die Installation auch bei dem 3. Versuch nicht klappen. Die rettende Idee, war einmal die Checksumme vom Image zu bestimmen. Nun habe ich gesehen, dass diese nicht gestimmt hat.
Nachdem ich ein ganze Image auf eine DVD gebrannt ließ sich OpenSolaris auch installieren. Das Netzwerk kann man zur Zeit nur via DHCP konfigurieren, was ich nicht wollte. Nachdem die Installation fertig war, habe ich mit Martin das Netzwerk konfiguriert.   Das macht man wie folgt:

jack@dijkstra ~ $  cat /etc/nwam/llp
eri0 dhcp
ge0 static 192.168.1.100/25

Die default-Route setzt man in der /etc/defaultrouter:

jack@dijkstra ~ $  cat /etc/defaultrouter
192.168.1.126

Als nächstes stand das spiegeln des rpool auf den Plan. Dazu habe ich mit format -e der 2. Platte ein SMI-Label verpasst und die ganze Platte in Slice 0 gepackt.

jack@dijkstra ~ $ pfexec zpool attach -f rpool c1t0d0s0 c1t1d0s0

Abschließend muss man noch die Platte bootbar machen:

jack@dijkstra ~ $ pfexec installboot -F zfs /usr/platform/`uname -i`/lib/fs/zfs/bootblk /dev/rdsk/c1t1d0s0

Zonen retten

Ich habe mir vor einigen Wochen meine Systemplatten zerstört. Das hat mich noch nicht sonderlich gestört. Denn man kann OpenSolaris sehr schnell wieder installieren. Von den ganzen Konfigurationen hatte ich ein Backup. Ein kleineres Problem hatte ich mit den Zonen. Sie ließen sich nicht ohne weiteres im neuen System importieren. Ein möglicher Grund ist, dass ich sie nicht detachet hatte und die Zoneroots hatte ich auch nicht mehr.
Der Fehler hat sich wie folgt geäußert:

rennecke@walhalla ~ $ pfexec zoneadm -z test attach -u
Log File: /var/tmp/test.attach_log.KvayPK
ERROR: no active dataset.
rennecke@walhalla ~ $ pfexec zoneadm -z test attach
Log File: /var/tmp/test.attach_log.X4aOcK
ERROR: no active dataset.
rennecke@walhalla ~ $ pfexec cat /var/tmp/test.attach_log.X4aOcK
[Montag, 15. Februar 2010, 12:45:18 Uhr CET] Log File: /var/tmp/test.attach_log.X4aOcK
[Montag, 15. Februar 2010, 12:45:18 Uhr CET] ERROR: no active dataset.

Also habe ich etwas gebastelt und habe die Zonen wieder importiert.

  1. Das Backup von /etc/zones eingespielt
  2. Den zpool mit den zonen importiert, mit der Option -f
  3. ID des Parent Bootenvironment auslesen:
    rennecke@walhalla ~ $ zfs get -r org.opensolaris.libbe:uuid rpool/ROOT
    ...                                  -
    rpool/ROOT/opensolaris          org.opensolaris.libbe:uuid  642ced7d-55a2-cc3b-fbdf-fbdda1c33ebc  local
    ...
  4. Das höchste Bootenvironment der Zone bestimmen. Das ist die höchste Nummer:
    rennecke@walhalla ~ $ zfs get -r org.opensolaris.libbe:parentbe
    ...
    daten/zone/test/ROOT/zbe-10                      org.opensolaris.libbe:parentbe  5741bca6-d793-454e-ad53-84c2cf7c630b  local
    ...
  5. ID des Parent Bootenvironment setzten:
    rennecke@walhalla ~ $ pfexec zfs set org.opensolaris.libbe:parentbe=642ced7d-55a2-cc3b-fbdf-fbdda1c33ebc daten/zone/test/ROOT/zbe-10
  6. Status der Zone in der Datei /etc/zones/index auf configured setzten
  7. Zone neu installieren:
    rennecke@walhalla ~ $ pfexec zoneadm -z test install
  8. Testen, ob die Zone sich nicht booten lässt:
    rennecke@walhalla ~ $ pfexec zoneadm -z test boot

    Es sollte ein Fehler kommen, dass es mehrere aktive Datasets gibt.

  9. Das neu angelegte Bootenvironment der Zone löschen:
    rennecke@walhalla ~ $ pfexec zfs destroy daten/zone/test/ROOT/zbe-11
  10. Fertig, nun kann man die Zone wieder normal booten

Diese Unschönheit kommt bei Solaris 10 nicht vor. Es kann sein, dass sie auch nur bei den, von mir verwendten Build 131 vorkommt. Man sollte bei dieser Bastelei wissen was man tut, also bitte nicht wild darauf los tippen, wenn ihr den selben Fehler habt.

Virtual Box-Clienten auf raw-Devices

Dan man mit zfs kann man auch volumes anlegen kann, wollte ich mal testen, ob man auch einen VirtualBox-Client auch auf ein solches Volume installieren kann. Es benötige einiges an Vorbereitungen, aber es geht wie folgt:

  1. Volume erzeugen:
    rennecke@walhalla VirtualBox $ pfexec  zfs create -s -V 200g daten/vol_win

    man erzeugt hiermit ein Volume, welches 200 GB groß ist. Es fordert den Speicher erst an, wenn dieser benötigt wird.

  2. VirtualBox-User Zugriff auf das raw-Device geben:
    rennecke@walhalla VirtualBox $ pfexec chown rennecke:staff /dev/zvol/rdsk/daten/vol_win
    rennecke@walhalla VirtualBox $ pfexec chmod 660 /dev/zvol/rdsk/daten/vol_win

    Das Device VirtualBox bekannt geben. Ich möchte diese Platten nicht bei den virtuellen Platten liegen haben.

    rennecke@walhalla VirtualBox $ mkdir ~/.VirtualBox/raw-disk
    rennecke@walhalla VirtualBox $ cd /opt/VirtualBox/
    rennecke@walhalla VirtualBox $ VBoxManage internalcommands createrawvmdk -filename /home/rennecke/.VirtualBox/raw-disk/windows-raw.vmdk -rawdisk /dev/zvol/rdsk/daten/vol_win -register
  3. Fertig: Nun kann man in VirtualBox auf das Volume zugreifen.

Man sollte aber wissen, was man tut. Man kann sich mit dieser Vorgehensweise ganz schnell etwas kaputt machen, z.B. indem man VirtualBox das falsche raw-Device übergibt. Das ganze hat auch noch einen anderen Schönheitsfehler. Man kann keine Snapshots mit VirtualBox erzeugen. Diese werden als Datei im Dateisystem auf dem Host abgelegt. Man kann aber Snapshots mit zfs erstellen, um Sicherungen der Virtuellen Maschine zu haben. Vielleicht gibt es irgendwann eine VirtualBox-Version, welche Features von zfs nutzt.

Deduplikation

Einige haben bestimmt schon von den Deduplikations-Feature in zfs gehört. Ich hatte leider keine Zeit ehr darüber zu schreiben. Bei Dedublikation speichert man doppelte Blöcke nur einmal. Diese kann man recht schnell erzeugen, wenn man eine Datei kopiert. Man kann auch gezielt Deduplikation nutzen. So kann man jeder Nutzer seine eigene Musiksammlung haben, denn doppelte Lieder benötigen keinen zusätzlichen Platz.

Ich möchte auch nicht meiner Freundin überall Schreibrechte geben, nicht dass sie ausversehen meine Mario Ranieri-Sammlung löscht. Kann sie mit ihren home nicht so umgehen, wie unter Windoof, dann ist Open Solaris nicht mehr schön. Also ist Dedublikation die administratorfreundliche Lösung, denn man spart Platz und die User freuen sich über mehr Freiheiten. Es gibt noch viele andere Fälle, bei denen Deduplikation nützlich ist. In Unis und in Firmen haben auch einige Leute die gleichen Daten im home. Ich habe bei mir in allen zpools Deduplukation an. Es stimmt, dass Deduplikation CPU-Leistung braucht. Ich muss Sun recht geben, dass heutige CPUs genug Leistung haben und das nebenbei mit erledigen. Ich habe es noch nie erlebt, dass ich beim kopieren von Daten oder ähnlichen Aktionen mein System lahm gelegt habe.

Wie findet zfs eigenlich die doppelten Blöcke? In der default-Einstellung wird von den Blöcken eine SHA-256-Prüfsumme gebildet. Wenn 2 Prüfsummen gleich sind, dann sagt zfs, dass die Blöcke gleich sind. Für paranoide Leute bietet zfs die Möglichkeit, dass man im Falle von 2 gleichen Prüfsummen die Blöcke (Es besteht die Möglichkeit, dass 2 unterschiedliche Blöcke die selbe Prüfsumme haben, das ist aber viel unwahrscheinlicher als unerkannte ECC-Fehler) noch einmal Byteweise vergleicht. Das wird aber sehr teuer. Das 2 Blöcke die selbe Prüfsumme haben tritt immer auf, wenn diese gleich sind. Also sollte man nicht denken, dass man die Blöcke nur Byteweise vergleicht, wenn die Prüfsummen gleich sind aber die Blockinhalte unterschiedlich. Die Deduplikation arbeitet im gesamten Pool, d.h. wenn man Dateien von einem Dateisystem in ein anderes kopiert werden die Daten auch dedupliziert.

Das ganze aktiviert man wie folgt:

rennecke@walhalla ~ $  pfexec zfs set dedup=on rpool

Update-Probleme bei Open Solaris

Mein neuer Blog ist noch nicht so lange online und ich arbeite noch daran. Deswegen kommt diese Meldung etwas verspätet. Ich konnte bei meinen Rechnern nicht auf Build 131 updaten. Der Fehler äußerte sich wie folgt:

 root@walhalla Videos $ pkg install -q SUNWipkg

pkg: Angeforderter “install”-Vorgang würde sich auf Dateien auswirken, die im Live-Abbild nicht geändert werden können.
Versuchen Sie diesen Vorgang in einer alternativen Startumgebung erneut.
Der Grund sind “falsche” Pakte im contrib-Repository. Diese Pakte haben einen nicht korrekten Verweis auf das Paket entire, welche Pakte das sind kann man wie folgt raus finden:

root@walhalla Videos $ pkg contents -Ho pkg.name,action.raw -t depend | grep fmri=entire@ | cut -f1
wine

Nun habe ich das entsprechnende Paket mit

root@walhalla Videos $ pkg uninstall wine

destinstalliert. Dadnach ging das update ohne Probleme