Filesystem-Copy via Netzwerk

Filesystem-Copy via Netzwerk

In meinem zfs Dateisystem befindet sich ein Bereich in dem ich ISO-Dateien und andere Installationsmedien abgelegt habe. Dieser Bereich umfasst ca. 71 GByte. Nun habe ich auf meinem Notebook ein FreeBSD 9.1 Installation mit zfs vorgenommen und wollte auf diesem ebenfalls diese Datein vorhalten. In der Regel nimmt man sich das TAR Kommando oder RSYNC oder oder und überträgt per FTP, SCP, SFTP, SMB oder NFS seine Dateien vom Quell- zum Zielssystem. So habe ich das in der Vergangenheit immer gemacht.

In zfs gibt es jedoch einen schönen Mechanismus um ganze Dateisysteme zu kopieren. Dieser Mechanismus nutzt eine PIPE (z.B. stdin / stdout). Im folgenden werde ich demonstrieren wie zfs ein komplettes Dateisystem über das Netzwerk übertragen kann. Die beiden Computer waren über 1 GBit/s im Netzwerk miteinander verbunden.

Auf dem Zielcomputer (das Notebook) habe ich den Kopiervorgang wie folgt vorbereitet:

/usr/bin/nc -l 6666 | zfs receive -v storage1/software

Mit dem Befehl „nc“ (aka netcat) erstelle ich einen TCP-basierten Listener auf Port 6666. Alle Daten die über diese Netzwerkverbindung eintreffen werden an das „zfs receive“ Kommando weitergeleitet (pipe).

Auf dem Quellcomputer (mein Server) wird nun mit folgenden Befehl die eigentliche Datenübertragung eingeleitet (initiert). Dazu nutzen wir folgende Befehlszeile:

zfs snapshot ztemp/software@tempsnapshot
zfs send -p ztemp/software@tempsnapshot | /usr/bin/nc 10.0.0.1 6666

Anschließend erscheint auf dem Notebook eine fortlaufende Statusmeldung (weil ich die Option -v gewählt habe) über die Menge an übertragenden Daten. Der gesamte Kopiervorgang dauerte gerade einmal 20 Minuten. Das Netzwerk war dabei eher unterfordert, weil die im Notebook verbaute Festplatte im CD-ROM Steckplatz keine Höchstleistung bringen kann (ca. 20-30 MByte/s). Das Dateisystem wurde mit allen Properties an den Zielcomputer übertragen. Einfacher geht es nicht. Und durch den Einsatz von Snapshots ist sogar sichergestellt, daß während des Kopiervorganges (der dann auch mal länger dauern darf) alle Daten in einem konsistenten Zustand vorliegen.

[notebook~]$ zpool status
  pool: storage0
 state: ONLINE
  scan: none requested
config:

        NAME             STATE     READ WRITE CKSUM
        storage0         ONLINE       0     0     0
          mirror-0       ONLINE       0     0     0
            label/disk1  ONLINE       0     0     0
            gpt/disk2    ONLINE       0     0     0
        logs
          gpt/zfs-zil    ONLINE       0     0     0
        cache
          gpt/zfs-l2arc  ONLINE       0     0     0

errors: No known data errors

  pool: storage1
 state: ONLINE
  scan: none requested
config:

        NAME           STATE     READ WRITE CKSUM
        storage1       ONLINE       0     0     0
          gpt/zfs-big  ONLINE       0     0     0

errors: No known data errors

[notebook~]$ zfs list
NAME                 USED  AVAIL  REFER  MOUNTPOINT
storage0            32.0G   125G    31K  /storage0
storage0/data       4.32M   125G  4.32M  /data
storage0/XXXXXXX    71.5K   157G  71.5K  /home/XXXXXXXXXX
storage1            76.3G   593G    31K  /storage1
storage1/backup       40K   593G    40K  /backup
storage1/distfiles  1.80G  3.20G  1.80G  /usr/ports/distfiles
storage1/misc       2.82G   593G  2.82G  /misc
storage1/software   71.7G  28.3G  71.7G  /software

Letzte Beiträge