• Diese Seite verwendet Cookies. Indem du diese Website weiterhin nutzt, erklärst du dich mit der Verwendung von Cookies einverstanden. Erfahre mehr

I/O Error beim Neuinstallieren

Lance

Well-Known Member
Themenstarter #1
Moin,

wollte bzw musste GhostBSD neu installieren weil ich mir durch einen falschen Eintrag an der rc.conf einen Kernel Panic eingefangen hatte und dieser auch nach Entfernen der Einträge nicht wegging.

Dabei hatte ich allerdings ein Problem dass ich zwar gelöst habe aber nicht weiss warum bzw warum das so ist.

Ich hatte beim Neuinstallieren, nachdem die zpools angelegt wurden jedesmal einen I/O Error und die Installation wurde dann abgebrochen. SMART-Werte ok, Sticktausch, gpart destroy und auch unter Ubuntu > Gparted > alle Partitionen wegknallen brachte KEINE ABHILFE.

Erst als ich unter einem WInPE Rettungsmedium Minitool Partition Wizard startete um die Platte komplett zu wipen (also mit ZERO überschreiben; ich brach nach 3% ab), erst dann lief die anschliessende Installation ohne Probleme durch. Und das verstehe ich nicht. Ein gpart destroy hätte das Problem eigentlich beheben müssen. Oder mit welchem Befehl lösche ich komplett alle Partitionen?
 

pit234a

Well-Known Member
#2
gpart destroy und alle anderen Partitionierungstools löschen jeweils immer nur die Einträge im MBR bzw in der gpart-Tabelle. Sie nehmen keine Löschungen von Daten oder Einträgen vor.
In der regel sollte das auch genügen, denn die Bereiche sind dann als Frei markiert, bzw nicht als benutzt gesetzt und sollten dann einem Partitionierungstool auch wieder dementsprechend zur Verfügung stehen.

Ich kann mir auch nicht vorstellen, dass eine noch vorhandene Partition einen I/O Error verursacht. Das sieht eher nach Fehler im Installationsmedium aus. Allerdings weiß ich viel zu wenig, was heute FreeBSD bei der Installation macht, ich habe ja schon lange keines mehr installiert. Das letzte war wahrscheinlich ein 10er oder frühes 11er. Ist es erst mal installiert, zieht man es einfach jeweils weiter hoch und installiert nicht neu und hat man ZFS, kann man es auch einfach auf einen neuen Rechner senden, wenn man mal einen aufsetzen muss.
Und bei GhostBSD weiß ich das schon gar nicht, was da womöglich bei der Installation gemacht wird.
 

pit234a

Well-Known Member
#4
kurze Antwort: zfs send | recv

etwas längere Antwort: du brauchst einen Snapshot des Pools, den du senden möchtest und einen Pool, in den du diesen übertragen kannst. Ich selbst habe das bisher mehrmals "Offline" gemacht, also die neuen Platten in meinen PC eingebaut dort vorbereitet und danach im neuen Rechner gebootet, aber Testweise auch schon mal ein komplettes System über Netzwerk zu einem anderen PC geschickt. Dann muss der natürlich über Netzwerk erreichbar sein (ssh) und muss ZFS verstehen. In meinem Fall war ein FreeBSD dort installiert, doch man könnte natürlich ein Live-System wie nomad-bsd benutzen. Das Beispiel, wie ich das über Netz gesendet habe, hatte ich nicht dokumentiert. In der man-Page zu ZFS ist ein Beispiel zu zfs send | recv über ssh und es findet sich einige Information im Web dazu, auch, wie ein kompletter System-Umzug gemacht wird.
Wie immer sollte man sich an solchen Texten nur orientieren und zuvor alles verstehen, was dort gemacht wird. Trotzdem gebe ich mal meine Mitschrift hier wieder, die ich noch finden kann. Ich weiß nicht mehr, wozu das gut war. Vielleicht war das nur ein Test, vielleicht war das echt. Ich wundere mich darüber, dass nur eine Platte benutzt wurde und die offenbar 1 TB groß ist. Ich habe aber keine 1 TB großen SSDs im Einsatz und FreeBSD nur auf SSDs laufen und in der Regel wenigstens als Mirror mit einfacher Redundanz. Es könnte also irgendein Test gewesen sein:
Code:
root@Celsius:/home/pit # zpool import Extern
root@Celsius:/home/pit # zpool destroy Extern
root@Celsius:/home/pit # gpart destroy -F da3
da3 destroyed
root@Celsius:/home/pit # gpart create -s gpt da3
da3 created
root@Celsius:/home/pit # gpart add -t freebsd-boot -l boot0 -a4k -s 512k da3
da3p1 added
root@Celsius:/home/pit # gpart add -t freebsd-swap -l swap0 -b 1m -s 2g da3
da3p2 added
root@Celsius:/home/pit # gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 da3
partcode written to da3p1
bootcode written to da3
root@Celsius:/home/pit # gpart add -t freebsd-zfs -l system0 -a 1m -s 928g da3
da3p3 added
root@Celsius:/home/pit # zpool create -R /tmp/Extern Extern /dev/da3p3
root@Celsius:/home/pit # zfs get compression Extern
NAME    PROPERTY     VALUE     SOURCE
Extern  compression  off       default
root@Celsius:/home/pit # zfs set compression=lz4 Extern
root@Celsius:/home/pit # zfs set checksum=fletcher4 Extern
root@Celsius:/home/pit # zfs set atime=off Extern
root@Celsius:/home/pit # zfs send -R PitPool@07032018 | zfs recv -Fduv Extern
receiving full stream of PitPool@07032018 into Extern@07032018
received 46,6KB stream in 1 seconds (46,6KB/sec)
receiving full stream of PitPool/var@07032018 into Extern/var@07032018
received 46,6KB stream in 1 seconds (46,6KB/sec)
receiving full stream of PitPool/ROOT@07032018 into Extern/ROOT@07032018
received 46,6KB stream in 1 seconds (46,6KB/sec)
receiving full stream of PitPool/ROOT/default@07032018 into Extern/ROOT/default@07032018
.....

root@Celsius:/home/pit # zfs get mountpoint Extern
NAME    PROPERTY    VALUE                SOURCE
Extern  mountpoint  /tmp/Extern/PitPool  received
/tmp/Extern existierte:
root@Celsius:/home/pit # zfs mount Extern/ROOT/default
edit rc.conf
edit loader.conf

root@Celsius:/home/pit # zfs umount Extern/ROOT/default
root@Celsius:/home/pit # zpool export Extern
Das ist eine Mischung von Befehlen und Ausgaben der Konsole mit meinen Kommentaren dazu, die ich nicht kenntlich gemacht habe!
Auch ist das edit rc.conf... natürlich nur ein Hint. Wer eine xorg.conf benutzt, muss sich auch darum kümmern usw.

Weil ich es als wichtig erlebte nochmal der Hinweis: wer bei dieser Methode gleiche Namen für alten und neuen Pool verwendet, wird Probleme bekommen. Man sieht, dass der Name des alten Pools in meinem Beispiel PitPool ist und dass ich einen Snap vom März 2018 übertragen hatte (zu einem Pool Extern). Mein derzeitiger Pool heißt PitsPool und wurde etwas später ganz ähnlich etabliert. Also, immer eindeutige Namen und niemals die gleichen Namen für unterschiedliche Pools, das macht das Leben einfacher!

Dass ich in dem Beispiel oben nicht nur den einfachen Befehl zum Übertragen kopierte, sondern die komplette Einrichtung des neuen Pools (Extern) zeige, erscheint mir einfach sinnvoll. In den meisten Fällen dürfte dies ja die Aufgabe sein und dann hat man das alles an einem Platz.
Aber nochmal: das ist ein Beispiel, es ist über zwei Jahre alt und ich habe mir die einzelnen Parameter angelesen und für mich so gewählt. Das sollte man nicht einfach per Copy and Paste übernehmen.