{"id":328,"date":"2018-10-05T10:08:51","date_gmt":"2018-10-05T10:08:51","guid":{"rendered":"http:\/\/192.168.2.32:8082\/?p=328"},"modified":"2019-07-20T11:25:58","modified_gmt":"2019-07-20T11:25:58","slug":"hot-backup-von-esxi-vms","status":"publish","type":"post","link":"https:\/\/www.dev-metal.ch\/?p=328","title":{"rendered":"Hot-Backup von ESXi VMs"},"content":{"rendered":"<p>Um Backups von ESXi VMs im laufenden Zustand machen zu k\u00f6nnen, braucht es<\/p>\n<ul>\n<li>Verst\u00e4ndnis was VmWare unter einem Snapshot versteht<\/li>\n<li>Das Scipt ghettoVCB.sh =&gt; \u00a0<a href=\"https:\/\/github.com\/lamw\/ghettoVCB\" target=\"_blank\" rel=\"noopener noreferrer\">ghettoVCB<\/a><\/li>\n<\/ul>\n<h1>Exkurs VMWare-Snapshot<\/h1>\n<p>Bei einem VMware Snapshot wird eine weitere Festplattendatei erstellt welche ab Zeitpunkt des Snapshots alle ge\u00e4nderten Bl\u00f6cke aufnimmt. Gleichzeitig wird der Exklusiv Zugriff auf die Basis Festplatte aufgehoben so das andere Prozesse lesen koennen.<\/p>\n<p>Dieses &#8222;lesen&#8220; kann ein Kopierbefehl einens Backupprogramms sein. Da keine Schreibzugriffe mehr in die Datei erfolgen ist der Zustand also konsistent. Snapshots sind also keine Backups. Ein Snapshot &#8222;friert&#8220; lediglich einen Zustand ein (Basis Festplatte) und schreibt alle ab diesem Zeitpunkt anfallenden \u00c4nderungen in eine neue Snapshot Datei (Delta).<\/p>\n<p>&nbsp;<\/p>\n<ul>\n<li>Die Basisplatte und der bzw. die Snapshots zusammen ergeben den akt. Stand. Fehlt ein Element in der Kette ist kein vollstaendiges Restore mehr moeglich. Beides muss zur gleichen Zeiten fuer den HOST zugaenglich sein.<\/li>\n<li>Snapshots wachsen bis zur max. konfigurierten Festplattengroesse heran. Die Groesse des Datastores ist also zu ueberwachen.<\/li>\n<li>Beim l\u00f6eschen von mehr als 2 Snapshots ist zu bedenken das ein Helper angelegt wird und immer die Groesse der zusammen zufuehrenden Snaps benoetigt wird.<\/li>\n<li>Laufende Snaps kosten ein wenig Performance. Die Gefahr von Fragmentierierung ignorieren wir da die Snaps immer in 16MB Bloecken wachsen.<\/li>\n<li>Grosse Snaps loeschen, hier versteht VMware das einpflegen der Aenderungen, dauert lange<\/li>\n<\/ul>\n<h2>Beispiel:<\/h2>\n<ul>\n<li>Basisplatte<\/li>\n<li>Snapshot1<\/li>\n<li>Snapshot2<\/li>\n<li>Snapshot3<\/li>\n<li>Snapshotx<\/li>\n<\/ul>\n<p>L\u00f6scht man jetzt Snapshotx wird dieser (und damit alle davorigen Snapshots) in die Basisplatte eingepflegt.<br \/>\nL\u00f6scht man Snapshot2 wird dessen Zustand und der von Snapshot1 in die Basisplatte eingepflegt und Snapshot3 usw. werden zu Snapshot1 usw,<\/p>\n<p>Die .VMDK-Files (Virtuell Maschine Disk Files) k\u00f6nnen im laufenden Betrieb nicht kopiert oder verschoben werden, da sie ja in Gebrauch sind. Dies sieht aber nach einem Snapshot anders aus. Bei einem Snapshot werden die .VMDK-Files im Prinzip gekappt und neue Files (VMSN und VMSD) angelegt, in welche die kompletten \u00c4nderungen des Snapshots geschrieben werden. Wenn man ein Snapshot der VM macht, wird die Basis-Festplatte in den Read-Only Modus gesetzt, wordurch diese nun, da konsisten, kopiert werden kann. Das Verhalten von Snapshots kann also ausgenutzt werden um Backups im laufenden System erstellen zu k\u00f6nnen (Hilfsmittel zum Backup):<\/p>\n<h2>Komplettbackup 1<\/h2>\n<ol>\n<li>Das Konfigurations-File der VM sichern\/kopieren (VMX-File)-&gt; nach dem Snaphsot der vituellen Maschine \u00e4ndern sich die Verweise in der Konfiguration.<\/li>\n<li>Man erstellt einen <strong>ersten<\/strong> Snapshot einer VM. Es bestehen anonsten keine Snapshots dieser VM. Der Snapshot wird also gemacht, und die Basis-Festplatte kopiert. Anschliessend den Snapshot wieder loeschen. Dieses Vorgehen ben\u00f6tigt entsprechend viel Platz, wenn mehrere Backups der gleichen VM notwendig sind.<\/li>\n<\/ol>\n<h2>Komplettbackup 2<\/h2>\n<ol>\n<li>Man macht t\u00e4glich einen Snapshot und sicherst den Snapshot des Vortages. Bedeutet weniger Platz da quasi nur Aenderungen dann noch anfallen. Aber ein Restore erfordert Knowhow und dein ESX wird mehr belastet.<\/li>\n<\/ol>\n<p>Soweit der Exkurs&#8230; Um ein Backup zu erstellen, k\u00f6nnen wir das mit den Snapshots manuell machen oder aber mit dem ghettoVCB-Script arbeiten. Das macht n\u00e4mlich genau das oben beschriebene.<\/p>\n<h1>Installation von ghettoVCB<\/h1>\n<p>Die Installation ist simple. Einfach ein Verzeichnis auf dem ESXi-Datastore erstellen und die ghettoVCB-Scripts hineinkopieren. Das wird ganz sch\u00f6n auf Youtube gezeigt: <a href=\"http:\/\/www.youtube.com\/watch?v=mVrjxzKEEu4\" target=\"_blank\" rel=\"noopener noreferrer\">http:\/\/www.youtube.com\/watch?v=mVrjxzKEEu4<\/a><\/p>\n<h1>ghettoVCB konfigurieren und Backup durchf\u00fchren<\/h1>\n<p>Die Konfigurationsm\u00f6lgichkeiten findet man hier: <a href=\"http:\/\/communities.vmware.com\/docs\/DOC-8760\" target=\"_blank\" rel=\"noopener noreferrer\">http:\/\/communities.vmware.com\/docs\/DOC-8760<\/a><\/p>\n<h2>ghettoVCB.conf File<\/h2>\n<p>Ich habe mein ghettoVCB.conf File folgendermassen konfiguriert (ist eingentlich alles Standard):<\/p>\n<pre class=\"lang:sh decode:true\">VM_BACKUP_VOLUME=\/vmfs\/volumes\/65d7a6db-6bc8d65a\/VmBackups\r\nDISK_BACKUP_FORMAT=thin\r\nVM_BACKUP_ROTATION_COUNT=1\r\nPOWER_VM_DOWN_BEFORE_BACKUP=0\r\nENABLE_HARD_POWER_OFF=0\r\nITER_TO_WAIT_SHUTDOWN=3\r\nPOWER_DOWN_TIMEOUT=5\r\nENABLE_COMPRESSION=0\r\nVM_SNAPSHOT_MEMORY=0\r\nVM_SNAPSHOT_QUIESCE=0\r\nSNAPSHOT_TIMEOUT=15<\/pre>\n<h2>VMs zum Backup<\/h2>\n<p>Habe ein File &#8222;vms_to_backup&#8220; erstellt, welches eine Liste der Namen der VMs beinhaltet. Bei den Namen handelt es sich um die Namen, welche auch im vSphereClient angezeigt werden:<\/p>\n<pre class=\"lang:sh decode:true\">TestVM32Bit<\/pre>\n<h2>Backup run<\/h2>\n<p>Nun kann die VM im laufenden Zustand gebackuped werden (Option -d dryrun f\u00fchrt einen Testlauf durch):<\/p>\n<pre class=\"lang:sh decode:true\">.\/ghettoVCB.sh -f vms_to_backup -g .\/ghettoVCB.conf -d dryrun<\/pre>\n<h1>Backup automatisch durchf\u00fchren (Cron-Tab)<\/h1>\n<p>Um das Backup automatisch durchzuf\u00fchren, kann dies in der Cron-Tab von ESXi konfiguriert werden:<\/p>\n<p>In Crontab registrieren, Job soll jeden Donnerstag um 17:00 Uhr durchgef\u00fchrt werden<\/p>\n<pre class=\"lang:sh decode:true \">echo \"0 17 * * 4 \/vmfs\/volumes\/4a6bb65f-eb654b7b-2525-d8d385ab5bd2\/ghettoVCB\/ghettoVCB.sh -f \/vmfs\/volumes\/4a6bb65f-eb654b7b-2525-d8d385ab5bd2\/ghettoVCB\/vms_to_backup -g \/vmfs\/volumes\/4a6bb65f-eb654b7b-2525-d8d385ab5bd2\/ghettoVCB\/ghettoVCB.conf &gt; \/tmp\/ghettoVCB.log\" &gt;&gt; \/var\/spool\/cron\/crontabs\/root\r\n<\/pre>\n<p>Wenn man dies Ausf\u00fchrt, wird der crontab automatisch an die richtige Datei angeh\u00e4ngt.<br \/>\nNun muss crond neu gestartet werden:<\/p>\n<h3>ESXi 4.1<\/h3>\n<pre class=\"lang:sh decode:true\">\/bin\/kill $(cat \/var\/run\/crond.pid)\r\n<\/pre>\n<pre class=\"lang:sh decode:true\">\/bin\/busybox crond<\/pre>\n<p>Die Cron-Tab von ESXi wird bei jedem Start wieder neu geschrieben. Um die Zeile deswegen bei jedem Start auszuf\u00fchren, muss diese noch in die \/etc\/rc.local eingetragen werden. Meine rc.local sieht anschliessend so aus:<\/p>\n<pre class=\"lang:sh decode:true\">vi \/etc\/rc.local\r\n<\/pre>\n<pre class=\"lang:sh decode:true\"> #! \/bin\/ash\r\nexport PATH=\/sbin:\/bin\r\n\r\nlog() {\r\necho \"$1\"\r\nlogger init \"$1\"\r\n}\r\n\r\n#execute all service retgistered in \/etc\/rc.local.d\r\nif [ -d \/etc\/rc.local.d ]; then\r\nfor filename in `find \/etc\/rc.local.d\/ | sort`\r\ndo\r\nif [ -f $filename ] &amp;&amp; [ -x $filename ]; then\r\nlog \"running $filename\"\r\n$filename\r\nfi\r\ndone\r\nfi\r\n\r\n\/bin\/kill $(cat \/var\/run\/crond.pid)\r\n\/bin\/echo \"0 17 * * 4 \/vmfs\/volumes\/4a6bb65f-eb654b7b-2525-d8d385ab5bd2\/ghettoVCB\/ghettoVCB.sh -f \/vmfs\/volumes\/4a6bb65f-eb654b7b-2525-d8d385ab5bd2\/ghettoVCB\/vms_to_backup -g \/vmfs\/volumes\/4a6bb65f-eb654b7b-2525-d8d385ab5bd2\/ghettoVCB\/ghettoVCB.conf &gt; \/tmp\/ghettoVCB.log\" &gt;&gt; \/var\/spool\/cron\/crontabs\/root\r\ncrond<\/pre>\n<h3>ESXi 5.5<\/h3>\n<pre class=\"lang:sh decode:true\">kill $(cat \/var\/run\/crond.pid)<\/pre>\n<pre class=\"lang:sh decode:true\">crond\r\n<\/pre>\n<p>Die Cron-Tab von ESXi wird bei jedem Start wieder neu geschrieben. Um die Zeile deswegen bei jedem Start auszuf\u00fchren, muss diese noch in die \/etc\/rc.local eingetragen werden. Meine rc.local sieht anschliessend so aus:<\/p>\n<pre class=\"lang:sh decode:true\">vi \/etc\/rc.local.d\/local.sh\r\n<\/pre>\n<pre class=\"lang:sh decode:true \">#!\/bin\/sh\r\n\r\n# local configuration options\r\n\r\n# Note: modify at your own risk! If you do\/use anything in this\r\n# script that is not part of a stable API (relying on files to be in\r\n# specific places, specific tools, specific output, etc) there is a\r\n# possibility you will end up with a broken system after patching or\r\n# upgrading. Changes are not supported unless under direction of\r\n# VMware support.\r\n\/bin\/kill $(cat \/var\/run\/crond.pid)\r\necho \"0 17 * * 4 \/vmfs\/volumes\/54016b12-54a601dc-1d3c-d43d7e942aae\/ghettoVCB\/ghettoVCB.sh -f \/vmfs\/volumes\/54016b12-54a601dc-1d3c-d43d7e942aae\/ghettoVCB\/vms_to_backup -g \/vmfs\/volumes\/54016b12-54a601dc-1d3c-d43d7e942aae\/ghettoVCB\/ghettoVCB.conf &gt; \/tmp\/ghettoVCB.log\" &gt;&gt; \/var\/spool\/cron\/crontabs\/root\r\ncrond\r\nexit 0<\/pre>\n<p>Nun nur noch autobackup durchf\u00fchren, das ganze in der ESXi Konfuguration zu speichern:<\/p>\n<pre class=\"lang:sh decode:true\">\/sbin\/auto-backup.sh<\/pre>\n<p>Das wars! Jetzt werden die VMs automatisch regelm\u00e4ssig gesichert.<\/p>\n<h1>Restore durchf\u00fchren<\/h1>\n<p>Um einen Restore druchzuf\u00fchren, habe ich ein file vms_to_restore erstellt, wobei dieses pro Linie einen Restore-Parameter mit folgendem Format enthalten muss:<\/p>\n<pre class=\"lang:sh decode:true \">\";;\"\r\n# DISK_FORMATS\r\n# 1 = zeroedthick\r\n# 2 = 2gbsparse\r\n# 3 = thin\r\n# 4 = eagerzeroedthick\r\n<\/pre>\n<p>z.B.:<\/p>\n<pre class=\"lang:sh decode:true\">\"\/vmfs\/volumes\/QnapTSDatastore\/VmBackups\/TestVM32Bit\/TestVM32Bit-2013-01-03_13-25-54;\/vmfs\/volumes\/ESXi Raid1\/TestVM;3\"\r\n<\/pre>\n<p>Anschliessend kann das Restore folgendermassen gestartet werden (Option -d 2 = Dryrun):<\/p>\n<pre class=\"lang:sh decode:true\">.\/ghettoVCB-restore.sh -c vms_to_restore -d 2\r\n<\/pre>\n<p>Dies stellt das von ghettoVCB erstellte Backup &#8222;TestVM32Bit-2013-01-03_13-25-54&#8220; unter dem Pfad &#8222;\/vmfs\/volumes\/ESXi Raid1\/TestVM&#8220; her bzw. kopiert diese dahin und registriert die VM neu beim ESXi-Host.<\/p>\n<h1>Die Fileformate<\/h1>\n<h2>zeroedthick (default)<\/h2>\n<p>vmdk wird in voller Groesse angelegt &#8211; dieser Typ wird bei der Erstellung nicht mit Nullen ueberschrieben &#8211; das passiert erst spaeter im Betrieb<\/p>\n<h2>eagerzeroedthick<\/h2>\n<p>vmdk wird in voller Groesse angelegt &#8211; dieser Typ wird bei der Erstellung mit Nullen ueberschrieben<\/p>\n<h2>thick<\/h2>\n<p>vmdk wird in voller Groesse angelegt &#8211; und nie genullt<\/p>\n<h2>thin<\/h2>\n<p>vmdk waechst nach Bedarf &#8211; dies ist ein Feature des VMFS dateisystems &#8211; und ist auf den meisten NFS-servern nicht moeglich<\/p>\n<h2>2gbsparsed<\/h2>\n<p>vmdk wird in maximal 2 Gb grosse Stuecke aufgeteilt &#8211; die jeweils nach Bedarf wachsen &#8211; dieses Format ist it Workstation kompatibel<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Um Backups von ESXi VMs im laufenden Zustand machen zu k\u00f6nnen, braucht es Verst\u00e4ndnis was VmWare unter einem Snapshot versteht Das Scipt ghettoVCB.sh =&gt; \u00a0ghettoVCB Exkurs VMWare-Snapshot Bei einem VMware Snapshot wird eine weitere Festplattendatei erstellt welche ab Zeitpunkt des Snapshots alle ge\u00e4nderten Bl\u00f6cke aufnimmt. Gleichzeitig wird der Exklusiv Zugriff auf die Basis Festplatte aufgehoben [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_lmt_disableupdate":"","_lmt_disable":"","footnotes":""},"categories":[8],"tags":[],"class_list":["post-328","post","type-post","status-publish","format-standard","hentry","category-vm-ware-esxi"],"modified_by":"ralph","_links":{"self":[{"href":"https:\/\/www.dev-metal.ch\/index.php?rest_route=\/wp\/v2\/posts\/328","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dev-metal.ch\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dev-metal.ch\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dev-metal.ch\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dev-metal.ch\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=328"}],"version-history":[{"count":9,"href":"https:\/\/www.dev-metal.ch\/index.php?rest_route=\/wp\/v2\/posts\/328\/revisions"}],"predecessor-version":[{"id":1278,"href":"https:\/\/www.dev-metal.ch\/index.php?rest_route=\/wp\/v2\/posts\/328\/revisions\/1278"}],"wp:attachment":[{"href":"https:\/\/www.dev-metal.ch\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=328"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dev-metal.ch\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=328"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dev-metal.ch\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=328"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}