{"id":1659,"date":"2022-07-27T06:35:47","date_gmt":"2022-07-27T06:35:47","guid":{"rendered":"https:\/\/www.dev-metal.ch\/?p=1659"},"modified":"2024-03-24T08:08:23","modified_gmt":"2024-03-24T08:08:23","slug":"odroid-hc4-nas","status":"publish","type":"post","link":"https:\/\/www.dev-metal.ch\/?p=1659","title":{"rendered":"Odroid HC4 \/ NAS"},"content":{"rendered":"<p>Da sich mein Qnap NAS verabschiedet hat, war dies die Gelegenheit ein NAS selber zu bauen.<\/p>\n<h2>Anforderungen an Services<\/h2>\n<p>Ein NAS bietet heutzutage, nebst dem Speichern von Daten, diverse Services an. Folgendes m\u00f6chte ich auch auf dem HC4 nutzen:<\/p>\n<ul>\n<li>Datenverwaltung (<a href=\"https:\/\/www.dev-metal.ch\/?p=1659#NAS-Strategie\">NAS Strategie<\/a>)<\/li>\n<li><a href=\"https:\/\/www.dev-metal.ch\/?p=1659#Samba\">Samba-Shares<\/a><\/li>\n<li><a href=\"https:\/\/www.dev-metal.ch\/?p=1659#FTP_Server\">FTP-Server<\/a><\/li>\n<li><a href=\"https:\/\/www.dev-metal.ch\/?p=1659#Video-Ueberwachung\">Video \u00dcberwachung<\/a><\/li>\n<li><a href=\"https:\/\/www.dev-metal.ch\/?p=1659#Bibliotheksverwaltung_fuer_eReader\">Bibliotheksverwaltung f\u00fcr eReader<\/a><\/li>\n<\/ul>\n<h3>NAS-Strategie<\/h3>\n<p>Als erstes ist es eine gute Idee zu kl\u00e4ren, was man mit dem NAS \u00fcberhaupt erreichen m\u00f6chte. Hier meine Kriterien:<\/p>\n<ul>\n<li>Datenverlust: Die Daten sollen bestm\u00f6glich vor Verlust gesch\u00fctzt werden.<\/li>\n<li>Verf\u00fcgbarkeit: Die Daten k\u00f6nnen auch mal 1-2 Tage nicht verf\u00fcgbar sein. Mehr als 2 Tage Ausfall sollten es aber nicht sein.<\/li>\n<\/ul>\n<h4>Massnahmen Datenverlust<\/h4>\n<ul>\n<li>Das NAS soll in einem RAID-1 Verbund laufen. Damit werden die Daten gespiegelt abgespeichert, so dass ein Festplatten-Ausfall einfach abgefedert werden kann.<\/li>\n<li>Gleichzeitig werden die &#8222;Core-Daten&#8220; (alles ausser Musik, Filme etc.) regelm\u00e4ssig zus\u00e4tzlich auf ein zweites Ger\u00e4t gespeichert (rsync).<\/li>\n<\/ul>\n<h4>Massnahmen Verf\u00fcgbarkeit<\/h4>\n<ul>\n<li>RAID-1 hilft hier ebenfalls, die Daten bleiben bei einem Ausfall einer der beiden Festplatten weiterhin verf\u00fcgbar.<\/li>\n<li>Es kann aber auch sein, dass die Hardware (SD-Karte oder HC4) ausf\u00e4llt. Die SD-Karte klone ich zu diesem Zweck. So kann ich bei einem Ausfall die SD-Karte einfach austauschen. Beim HC4 wird es aber etwas schwieriger. Ich habe mir zwei HC4 Ger\u00e4te besorgt. Bei einem Ausfall kann ich entsprechend auch den HC4 sofort ersetzen.<\/li>\n<\/ul>\n<h2>Hardware<\/h2>\n<ul>\n<li><a href=\"https:\/\/www.hardkernel.com\/shop\/odroid-hc4\/\" target=\"_blank\" rel=\"noopener\">Odroid HC4<\/a> \u00a0 \/ Case: <a href=\"https:\/\/forum.odroid.com\/viewtopic.php?t=43948\" target=\"_blank\" rel=\"noopener\">SBC Case Builder<\/a><\/li>\n<li><a href=\"https:\/\/secure.reichelt.com\/ch\/en\/desktop-power-supply-60-w-15-v-4-a-mw-gst60a15-p171054.html?&amp;nbc=1\" target=\"_blank\" rel=\"noopener\">Power Supply<\/a><\/li>\n<li>2x <a href=\"https:\/\/www.reichelt.com\/ch\/en\/wd-red-plus-8-tb-nas-festplatte-2022--wd80efzz-p327296.html?search=wd+red+8tb&amp;&amp;r=1\" target=\"_blank\" rel=\"noopener\">8TB WD Red Pro<\/a><\/li>\n<li>1x zus\u00e4tzlicher <a href=\"https:\/\/de.aliexpress.com\/item\/1005003779722996.html?spm=a2g0o.order_list.0.0.3af55c5f9FolM5&amp;gatewayAdapt=glo2deu\" target=\"_blank\" rel=\"noopener\">L\u00fcfter<\/a><\/li>\n<li>1x <a href=\"https:\/\/de.aliexpress.com\/item\/4000313336961.html?spm=a2g0o.order_list.0.0.3af55c5f9FolM5&amp;gatewayAdapt=glo2deu\" target=\"_blank\" rel=\"noopener\">L\u00fcftungsregulierer<\/a><\/li>\n<\/ul>\n<p>Ich habe bereits mit dem Odroid HC2 sehr gute Erfahrungen gemacht. HC4 ist der Nachfolger und bietet neu mehr CPU Leistung, einen 64Bit Prozessor, 4Gb RAM, etc.<\/p>\n<h3>Das HC4 Geh\u00e4use<\/h3>\n<p><em>Update 2024: Sie scheinen mittlerweile verstanden zu haben, dass das Originale Case nix bringt. Es gibt mittlerweile von odroid ein <a href=\"https:\/\/www.hardkernel.com\/shop\/odroid-hc4-p-kit\/\" target=\"_blank\" rel=\"noopener\">HC4 Case Kit<\/a>, mit welchem man sich ein vern\u00fcnftiges Case selber zusammenschrauben kann.<\/em><\/p>\n<p>Das Geh\u00e4use vom HC4 ist meines Erachtens nicht gelungen. Die Festplatten werden vertikal in den SATA-Anschluss des HC4 eingeschoben. Das ganze ist mir viel zu wackelig. &#8222;Serverschrank-Ready&#8220; ist dieses Ding so definitiv nicht. Auch frage ich mich, ob es sinnvoll ist, SATA Stecker so zu verwenden. Ich kann mir nicht vorstellen, dass die SATA Stecker des HC4 solide genug sind um h\u00e4ufiges wechseln von Festplatten zu \u00fcberstehen:<\/p>\n<h3><a href=\"https:\/\/www.dev-metal.ch\/wp-content\/uploads\/2022\/07\/HC4_Case.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-1845 size-large\" src=\"https:\/\/www.dev-metal.ch\/wp-content\/uploads\/2022\/07\/HC4_Case-711x1024.jpg\" alt=\"\" width=\"654\" height=\"942\" srcset=\"https:\/\/www.dev-metal.ch\/wp-content\/uploads\/2022\/07\/HC4_Case-711x1024.jpg 711w, https:\/\/www.dev-metal.ch\/wp-content\/uploads\/2022\/07\/HC4_Case-208x300.jpg 208w, https:\/\/www.dev-metal.ch\/wp-content\/uploads\/2022\/07\/HC4_Case-768x1106.jpg 768w, https:\/\/www.dev-metal.ch\/wp-content\/uploads\/2022\/07\/HC4_Case-1x1.jpg 1w, https:\/\/www.dev-metal.ch\/wp-content\/uploads\/2022\/07\/HC4_Case.jpg 1000w\" sizes=\"auto, (max-width: 654px) 100vw, 654px\" \/><\/a>Das SBC Case Builder Geh\u00e4use<\/h3>\n<p>Ich drucke mir mit dem 3D Drucker, basierend auf dem Design von <a href=\"https:\/\/forum.odroid.com\/viewtopic.php?t=43948\" target=\"_blank\" rel=\"noopener\">SBC Case Builder<\/a> mein eigenes Geh\u00e4use. Ziel soll es sein, ein Geh\u00e4use zu produzieren, welches auch mit gutem Gewissen in einem Server- oder Netzwerkschrank platziert werden kann:<a href=\"https:\/\/www.dev-metal.ch\/wp-content\/uploads\/2022\/07\/SBC_Gehause1.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-1846 size-large\" src=\"https:\/\/www.dev-metal.ch\/wp-content\/uploads\/2022\/07\/SBC_Gehause1-839x1024.jpg\" alt=\"\" width=\"654\" height=\"798\" srcset=\"https:\/\/www.dev-metal.ch\/wp-content\/uploads\/2022\/07\/SBC_Gehause1-839x1024.jpg 839w, https:\/\/www.dev-metal.ch\/wp-content\/uploads\/2022\/07\/SBC_Gehause1-246x300.jpg 246w, https:\/\/www.dev-metal.ch\/wp-content\/uploads\/2022\/07\/SBC_Gehause1-768x938.jpg 768w, https:\/\/www.dev-metal.ch\/wp-content\/uploads\/2022\/07\/SBC_Gehause1-1x1.jpg 1w, https:\/\/www.dev-metal.ch\/wp-content\/uploads\/2022\/07\/SBC_Gehause1.jpg 1000w\" sizes=\"auto, (max-width: 654px) 100vw, 654px\" \/><\/a><\/p>\n<p>Der SBC-Build hat aber leider eine kleine Schw\u00e4che. Auf der einen Seite, wo sich das Board befindet, kann der Deckel nicht angeschraubt werden. Daraus resultiert, dass beim Stromanschluss ein Spalt von ca 2mm entsteht. Dem habe ich einfach mit einem Kabelbinder entgegengewirkt. Ist nicht sch\u00f6n, aber f\u00fcr den Serverschrankt tut es das allemal:<a href=\"https:\/\/www.dev-metal.ch\/wp-content\/uploads\/2022\/07\/SBC_Gehause2.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-1847 size-medium\" src=\"https:\/\/www.dev-metal.ch\/wp-content\/uploads\/2022\/07\/SBC_Gehause2-300x251.jpg\" alt=\"\" width=\"300\" height=\"251\" srcset=\"https:\/\/www.dev-metal.ch\/wp-content\/uploads\/2022\/07\/SBC_Gehause2-300x251.jpg 300w, https:\/\/www.dev-metal.ch\/wp-content\/uploads\/2022\/07\/SBC_Gehause2-768x643.jpg 768w, https:\/\/www.dev-metal.ch\/wp-content\/uploads\/2022\/07\/SBC_Gehause2-1x1.jpg 1w, https:\/\/www.dev-metal.ch\/wp-content\/uploads\/2022\/07\/SBC_Gehause2.jpg 1000w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>Alles in allem kann man den HC4 nun mit gutem Gewissen in den Serverschrank stellen:<\/p>\n<ul>\n<li>Die Festplatten sind sehr gut fixiert und es wackelt rein gar nichts.<\/li>\n<li>Der zweite L\u00fcfter, den ich \u00fcber den USB-Port betreibe, sorgt f\u00fcr zus\u00e4tlich gute Bel\u00fcftung.<\/li>\n<li>Der Stock-L\u00fcfter befindet sich \u00fcbrigens unterhalb des HC4-Boards. Ein L\u00fcfter wurde so montiert, dass er die Luft nach aussen bl\u00e4st und einer zieht die Luft an.<\/li>\n<li>Der L\u00fcftungsregulierer erlaubt es die Touren des L\u00fcfters einzustellen. Ich habe ihn auf ca. 50% eingestellt. Damit wird immer noch gut bel\u00fcftet und der L\u00e4rmpegel h\u00e4lt sich in Grenzen. =&gt; Serverschrank-Ready.<\/li>\n<li>Ist es sch\u00f6n? =&gt; NEIN \ud83d\ude00<\/li>\n<\/ul>\n<h2>Betriebssystem<\/h2>\n<p>Der HC4 bietet neu (im Gegensatz noch zum HC2) die M\u00f6glichkeit das Betriebssystem auf der SATA-Disk zu installieren. Hardkernel hat daf\u00fcr den Petitboot Bootloader vorinstalliert. Dieser Bootloader erm\u00f6glicht den HC4 Start ohne eingelegte Disk oder SD-Karte. Anschliessend kann \u00fcber netboot ein Betriebssystem direkt auf einer Disk installiert werden. Ich habe aber f\u00fcr die Installation das Image auf die SD Karte geschreiben und dabei folgende zwei Images getestet:<\/p>\n<ul>\n<li><a href=\"https:\/\/www.armbian.com\/odroid-hc4\/\" target=\"_blank\" rel=\"noopener\">Armbian<\/a><\/li>\n<li><a href=\"https:\/\/de.eu.odroid.in\/ubuntu_22.04lts\/C4_HC4\/\" target=\"_blank\" rel=\"noopener\">Ubuntu 22.04 minimal Odroid<\/a><\/li>\n<\/ul>\n<p>Die Ubuntu-Version stammt von Hardkernel und ist mit Petitboot kompatibel. Das bedeutet, dass das Betriebssystem (nach 10s wartezeit) von Petitboot erkannt und gebootet wird. Dieses Ubuntu k\u00f6nnte damit z.B. auf einer SATA SSD Disk installiert werden. Das Betriebssystem wird damit dann direkt von der SSD betrieben und nicht auf der SD-Karte.<\/p>\n<p>Armbian hingegen wird von Petitboot nicht erkannt. bei Armbian muss Petitboot komplett entfernt werden. Mit gel\u00f6schtem Petitboot versucht der HC4 auf der SD-Karte ein Betriebssystem zu finden und startet dieses dann direkt. Dies hat den Vorteil, dass der Start sofort durchgef\u00fchrt wird (ohne 10s) Wartezeit. Daf\u00fcr aber auch den Nachteil, dass das Betriebssystem auf der SD-Karte liegt. SD-Karten sind bekanntlich nicht daf\u00fcr geeignet ein Betriebssystem (mit vielen writes) zu betreiben.<\/p>\n<p>Ich entscheide mich f\u00fcr eine Installation mit Armbian. Armbian ist leichtgewichtiger als die Hardkernel Ubuntu-Version und auf den HC4 abgestimmt. Armbian ist mir deswegen etwas sympatischer &#8211; ist aber eher ein Bauchentscheid als wirklich mit harten Fakten begr\u00fcndet&#8230;<\/p>\n<h3>Installation Armbian<\/h3>\n<ul>\n<li>Download Armbian: <a href=\"https:\/\/redirect.armbian.com\/odroidhc4\/Jammy_current\" target=\"_blank\" rel=\"noopener\">https:\/\/redirect.armbian.com\/odroidhc4\/Jammy_current<\/a><\/li>\n<li>Flash Image auf SD-Karte (z.B. mit Etcher)<\/li>\n<li>L\u00f6schen von Petitboot\n<ul>\n<li>Starten HC4 ohne eingelegte SD Karte =&gt; Petitboot startet<\/li>\n<li>W\u00e4hle &#8222;Exit to shell&#8220;<\/li>\n<li>F\u00fchre aus:<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<pre># flash_eraseall \/dev\/mtd0\n# flash_eraseall \/dev\/mtd1\n# flash_eraseall \/dev\/mtd2\n# flash_eraseall \/dev\/mtd3<\/pre>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li>=&gt; Dadurch wird der SPI-Flash-Speicher gel\u00f6scht und der HC4 startet ab sofort direkt von der SD Karte.<\/li>\n<\/ul>\n<\/li>\n<li>HC4 mit eingelegter Armbian SD-Karte starten<\/li>\n<li>Installations-Anweisungen befolgen<\/li>\n<\/ul>\n<p>Grund-Installation Armbian ist damit abgeschlossen<\/p>\n<h4>L\u00fcfter-Support aktivieren:<\/h4>\n<pre>vi \/etc\/fancontrol<\/pre>\n<p>Inhalt einf\u00fcgen:<\/p>\n<pre>INTERVAL=10\nDEVPATH=hwmon0=devices\/virtual\/thermal\/thermal_zone0 hwmon2=devices\/platform\/pwm-fan\nDEVNAME=hwmon0=cpu_thermal hwmon2=pwmfan\nFCTEMPS=hwmon2\/pwm1=hwmon0\/temp1_input\nFCFANS= hwmon2\/pwm1=hwmon2\/fan1_input\nMINTEMP=hwmon2\/pwm1=50\nMAXTEMP=hwmon2\/pwm1=60\nMINSTART=hwmon2\/pwm1=20\nMINSTOP=hwmon2\/pwm1=28\nMINPWM=hwmon2\/pwm1=0\nMAXPWM=hwmon2\/pwm1=255<\/pre>\n<p>Restart fancontrol<\/p>\n<pre>sudo systemctl restart fancontrol<\/pre>\n<p><strong>Wichtig:<\/strong> Wenn man den Kernel 5.15.x einsetzt, muss die Zeile FCFANS=hwmon2\/pwm1=hwmon2\/fan1_input entfernt werden.<\/p>\n<h4>Reboot Issue<\/h4>\n<p>Ein soft reboot (sudo reboot) funktionierte in diesem Zustand nicht. Die L\u00f6sung ist <a href=\"https:\/\/forum.armbian.com\/topic\/19340-odroid-c4-will-not-reboot-after-any-sort-of-kernel-update-have-tried-running-nand-sata-install\/#comment-137689\" target=\"_blank\" rel=\"noopener\">hier<\/a> zu finden:<\/p>\n<pre class=\"ipsCode prettyprint lang-html prettyprinted\"><span class=\"pln\">armbian-config ---&gt; System -&gt; Install -&gt; Install\/Update the bootloader on SPI\/Flash<\/span><\/pre>\n<p>Danach bootet armbian sauber nach einem &#8222;sudo reboot&#8220;.<\/p>\n<h4>Wiederherstellen\/Update Petitboot<\/h4>\n<p>Es besteht die M\u00f6glichkeit Petitboot zu aktualisieren bzw. \u00fcber das gleiche Vorgehen, nach einer L\u00f6schung, wieder zu installieren.<\/p>\n<p>Daf\u00fcr stellt Hardkernel ein Image zur Vef\u00fcgung:<\/p>\n<ul>\n<li>Download aktuelles spiupdate-image unter <a href=\"http:\/\/ppa.linuxfactory.or.kr\/images\/petitboot\/odroidhc4\/\" target=\"_blank\" rel=\"noopener\">http:\/\/ppa.linuxfactory.or.kr\/images\/petitboot\/odroidhc4\/<\/a> =&gt; Die heute aktuelle Version ist &#8222;spiupdate_odroidhc4_20201112.img&#8220;<\/li>\n<li>Optional:\n<ul>\n<li>Download letzte Firmware &#8222;<a href=\"http:\/\/ppa.linuxfactory.or.kr\/images\/petitboot\/odroidhc4\/spiboot-20220317.img\">spiboot-20220317.img<\/a>&#8222;<\/li>\n<li>Auf der geflashten SD-Karte das File &#8222;spiboot.img&#8220; durch die neue heruntergeladene Variante ersetzen. Das File muss nat\u00fcrlich nach spiboot.img umbenannt werden.<\/li>\n<\/ul>\n<\/li>\n<li>Den HC4 mit dieser SD-Karte booten. Das Firmware-Update wird automatisch durchgef\u00fchrt.<\/li>\n<\/ul>\n<h5><strong>Hint:<\/strong> Boot ohne Petitboot<\/h5>\n<p>Gut zu Wissen ist, dass der HC4 auch ohne das entfernen von Petitboot die M\u00f6glichkeit bietet ohne Petitboot zu starten. Daf\u00fcr muss man einfach den schwarzen Reset-Knopf dr\u00fccken und gleichzeitig den Stromstecker einstecken. Dann warten, bis der HC4 blau zu blinken beginnt. Damit startet HC4 ohne Petitboot. =&gt; Das ist aber nat\u00fcrlich f\u00fcr den t\u00e4glichen Gebrauch nicht wirklich zu empfehlen.<\/p>\n<h2>Installation Festplatten \/ RAID1<\/h2>\n<h3>Partition erstellen<\/h3>\n<p>Als erstes schliesse ich eine der beiden 8TB Festplatten an und boote das System neu. Nun eine Partition erstellen:<\/p>\n<pre>sudo fdisk \/dev\/sda\n<strong>g<\/strong><\/pre>\n<p>Dies erstellt eine gpt-Partitionstabelle und wir erhalten das Disk-Label (GUID) =&gt; Dieses notieren<\/p>\n<ul>\n<li>Nun mit <strong>n<\/strong> eine Partition erstellen und alle vorgeschlagenen Standardwerte \u00fcbernehmen.<\/li>\n<li>Am Schluss mit <strong>w<\/strong> die \u00c4nderungen auf die Platte schreiben.<\/li>\n<\/ul>\n<pre>sudo fdisk -l<\/pre>\n<ul>\n<li>Zeigt nun die partitionierte Festplatte an<\/li>\n<li>\n<h3>Filesystem erstellen<\/h3>\n<\/li>\n<li>Wir erstellen ein Btrfs Filesystem, \u00fcber welches dann Raid1 umgesetzt wird.<\/li>\n<\/ul>\n<pre>mkfs.btrfs \/dev\/sda1<\/pre>\n<p>Dies erstellt das Filesystem und weist eine UUID zu (UUID notieren).<\/p>\n<p>Die notierten GUID und UUID habe ich mir mit einem P-Touch auf ein Label ausgedruckt und auf die Disk geklebt. Das erm\u00f6glicht im sp\u00e4teren Betrieb die Disk einwandfrei zu identifizieren.<\/p>\n<p>Der Disk Identifier kann folgendermassen ermittelt werden<\/p>\n<pre>fdisk -l \/dev\/sda<\/pre>\n<h3>Subvolumes einrichten<\/h3>\n<p>Btrfs unterst\u00fctzt <a href=\"https:\/\/btrfs.wiki.kernel.org\/index.php\/SysadminGuide#Subvolumes\" target=\"_blank\" rel=\"noopener\">Subvolumes<\/a>. Btrfs hat ein unabh\u00e4ngiges einh\u00e4ngbares Root-Verzeichnis f\u00fcr das Volume (Subvolume der obersten Ebene) und f\u00fcr jedes Subvolume. Ein Btrfs-Volume kann also mehr als einen einzelnen Dateibaum enthalten. Einen ganze Tree\u00a0 von Dateib\u00e4umen enthalten. Ein Btrfs-Subvolume kann man sich als POSIX-Dateinamensraum vorstellen.<\/p>\n<p>Es ist zum empfehlen Subvolumes f\u00fcr voneinander unabh\u00e4ngige Datenablagen zu verwenden (z.B. Backup, Filme, Musik, etc.)<\/p>\n<p>Als erstes h\u00e4ngen wir das Btrfs Root-Subvolume ein:<\/p>\n<pre>sudo mount \/dev\/sda1 \/mnt<\/pre>\n<p>Ich erstelle f\u00fcr mich ein Subvolume, welches alle Multimedia-Daten beinhalten soll (Filme, Musik, B\u00fccher, etc.):<\/p>\n<pre>btrfs subvolume create \/mnt\/@backup<\/pre>\n<p>Nun das Root-Subvolume wieder aush\u00e4ngen<\/p>\n<pre>sudo umount \/dev\/sda1<\/pre>\n<p>Jetzt kann man das erstellte Subvolume direkt in das Filesystem einh\u00e4ngen:<\/p>\n<pre>sudo mkdir \/mnt\/multimedia\nsudo vi \/etc\/fstab\n\/dev\/sda1 \/mnt\/multimedia btrfs defaults,nofail,noatime,compress=zstd,subvol=<strong>@multimedia<\/strong> 0 0<\/pre>\n<p>Dieser fstab Eintrag kann anschliessend \u00fcber die CLI gemountet werden<\/p>\n<pre>sudo mount \/mnt\/multimedia<\/pre>\n<p>Komplette Rechte auf \/mnt\/multimedia setzen<\/p>\n<pre>chmod 0777 \/mnt\/multimedia<\/pre>\n<p>Auf diese Art und Weise kann man so viele Subvolumes erstellen wie man eben braucht.<\/p>\n<h3>Raid1<\/h3>\n<p>Bis jetzt haben wir nur eine HDD installiert. Nachdem das Filesystem angelegt ist funktioniert (an dieser Stelle habe ich auch bereits <a href=\"https:\/\/www.dev-metal.ch\/?p=1659#Samba\">Samba<\/a> eingerichtet und getestet), setzen wir die zweite Disk (nach einem shutdown und anschliessendem Neustart) ein und erstellen das Raid1.<\/p>\n<p>Hinweis 1: An dieser Stelle habe ich festgestellt, dass ich die erste HDD in Slot2 des HC4 gesteckt habe. Der SATA-Slot, der sich n\u00e4her am Stromanschluss\/Netzwerkanschluss befindet ist offensichtlich Slot Nr. 2 &#8211; Nach dem Restart hat n\u00e4mlich die zweite HDD \/dev\/sda zugewiesen bekommen und wodurch dann nat\u00fcrlich das vorhin erstellte Btrfs Filesystem nicht mehr verf\u00fcgbar war. Nach einem erneuten Stopp, wechsel der Festplatten und Neustart war dieses Problem behoben.<\/p>\n<p>Hinweis 2: Bei der Einrichtung von Raid1 habe ich mich gefragt, ob es denn m\u00f6glich ist, den Raid-level je nach subvolume zu setzen. Das ist offenbar nicht m\u00f6glich. Btrfs scheint dies als Feature offen zu haben, es ist aber offenbar seit fast 10 Jahren nichts mehr in diese Richtung gegangen. Also: Nein. \ud83d\ude42<\/p>\n<p>fdisk verr\u00e4t mir, wie die neue Festplatte erkannt wurde:<\/p>\n<pre>sudo fdisk -l<\/pre>\n<p>In meinem Falle ist die neue HDD das Device \/dev\/sdb.<\/p>\n<p>Nun wird f\u00fcr diese HDD (\/dev\/sdb) ebenfalls eine gpt-Partition und eine Partition \u00fcber die gesamte Platte erstellt siehe <a href=\"https:\/\/www.dev-metal.ch\/?p=1659#Partition_erstellen\">hier<\/a>.<\/p>\n<p>Nun teilen wir btrfs mit, dass die neue Platte als Raid-1 Verbund zur ersten Platte verwendet werden soll. Daf\u00fcr h\u00e4ngen wir alle gemounteten subvolumes erst aus.<\/p>\n<pre>sudo umount \/mnt\/&lt;subvolumes&gt;<\/pre>\n<p>Nun h\u00e4ngen wir die gesamte erste Festplatte ein<\/p>\n<pre>sudo mount \/dev\/sda1 \/mnt<\/pre>\n<p>btrfs die neue Festplatte bekannt machen<\/p>\n<pre>sudo btrfs device add \/dev\/sdb1 \/mnt<\/pre>\n<p>\/dev\/sdb in einen Raid1-Verbund aufnehmen. Erkl\u00e4rung:<\/p>\n<ul>\n<li>-mconvert= Option, ein neues Profil &#8222;raid1&#8220; auf die Metadaten des Diskarrays anzuwenden<\/li>\n<li>-dconvert = Neues Profil &#8222;raid1&#8220; auf die Nutzdaten des Diskarrays zu legen<\/li>\n<li><\/li>\n<\/ul>\n<pre># sudo btrfs balance start -dconvert=raid1 -mconvert=raid1 \/mnt\n# Done, had to relocate 5 out of 5 chunks<\/pre>\n<p>Damit wurde der Raid1 Verbund erstellt. Wenn die zweite HDD\u00a0 (wie bei mir zu Testzwecken) kleiner als die erste HDD ist, dann wird der Gesamtspeicherplatz neu maimal die Gr\u00f6sse der kleineren Festplatte betragen. Was bei mir auch so korrekt funktioniert hat.<\/p>\n<p>Nun die ganze Festplatte wieder aush\u00e4ngen und die zuvor angelegten subvolumes einh\u00e4ngen (z.B. durch reboot, so dass die fstab Eintr\u00e4ge geladen werden).<\/p>\n<pre>sudo umount \/mnt\nsudo reboot<\/pre>\n<h4>Test \/ weitere Befehle<\/h4>\n<p>\u00dcberblick \u00fcber das Raid<\/p>\n<pre># btrfs fi usage \/mnt\/&lt;subvolume&gt;\n\nOverall:\nDevice size: 14.55TiB\nDevice allocated: 10.06GiB\nDevice unallocated: 14.54TiB\nDevice missing: 0.00B\nUsed: 4.51GiB\nFree (estimated): 7.27TiB (min: 7.27TiB)\nFree (statfs, df): 7.27TiB\nData ratio: 2.00\nMetadata ratio: 2.00\nGlobal reserve: 6.11MiB (used: 0.00B)\nMultiple profiles: no\n\nData,RAID1: Size:3.00GiB, Used:2.25GiB (74.92%)\n\/dev\/sda1 3.00GiB\n\/dev\/sdb1 3.00GiB\n\nMetadata,RAID1: Size:2.00GiB, Used:8.55MiB (0.42%)\n\/dev\/sda1 2.00GiB\n\/dev\/sdb1 2.00GiB\n\nSystem,RAID1: Size:32.00MiB, Used:16.00KiB (0.05%)\n\/dev\/sda1 32.00MiB\n\/dev\/sdb1 32.00MiB\n\nUnallocated:\n\/dev\/sda1 7.27TiB\n\/dev\/sdb1 7.27TiB<\/pre>\n<p>Pr\u00fcfen der Devices<\/p>\n<pre>sudo btrfs fi show \/mnt\/&lt;subvolume&gt;\n\nLabel: none uuid: 0edb47d3-ea4a-4667-b609-223212ec41b1\nTotal devices 2 FS bytes used 2.26GiB\ndevid 1 size 7.28TiB used 5.03GiB path \/dev\/sda1\ndevid 2 size 7.28TiB used 5.03GiB path \/dev\/sdb1<\/pre>\n<h3>Raid 1 &#8211; Festplattenwechel<\/h3>\n<p>Es ist eine Frage der Zeit, bis eine Festplatte den Geist aufgeben wird. Da wir ein Raid1 haben, sollte dies kein grossen Problem darstellen. Ob das aber funktioniert, muss getestet werden.<\/p>\n<p>Das Vorgehen<\/p>\n<ol>\n<li>System herunterfahren<\/li>\n<li>Defekte HDD entfernen und stattdessen neue HDD in den Slot stecken.<br \/>\nAls Simulation ersetzte ich die zweite (kleinere) HDD nun mit einer neuen gleichgrossen HDD (8TB)<\/li>\n<li>System hochfahren.<br \/>\nNach dem reboot wurden die subvolumes, wie erwartet, nicht mehr gemountet. Ich habe aber auch nirgends einen Hinweis erhalten, dass es ein Problem mit BTRFS gibt (auch nicht in dmesg). An dieser Stelle kann man \u00fcber fdisk die Devices identifizieren.<\/p>\n<pre>sudo fdisk -l<\/pre>\n<p>Anhand der auf der HDD gekenntzeichneten GUID stelle ich fest, dass die noch funktionierende HDD als \/dev\/sda und die neue als \/dev\/sdb erkannt wurde.<\/li>\n<li>RAID im degraded mode mounten.<br \/>\nDamit die noch funktionierende Festplatte eingeh\u00e4ngt werden kann, muss das Raid mit der Option -o degraded eingeh\u00e4ngt werden<\/p>\n<pre>sudo mkdir \/mnt\/temp\nsudo mount -o degraded \/dev\/sda1 \/mnt\/temp<\/pre>\n<p>Nun kann \u00fcberpr\u00fcft werden, welche Festplatte fehlt (in diesem Falle ID2):<\/p>\n<pre># sudo btrfs device usage \/mnt\/temp\n\n\/dev\/sda1, ID: 1\nDevice size: 7.28TiB\nDevice slack: 3.50KiB\nData,RAID1: 3.00GiB\nMetadata,RAID1: 1.00GiB\nSystem,RAID1: 32.00MiB\nUnallocated: 7.27TiB\n\nmissing, ID: 2\nDevice size: 0.00B\nDevice slack: 0.00B\nData,RAID1: 3.00GiB\nMetadata,RAID1: 1.00GiB\nSystem,RAID1: 32.00MiB\nUnallocated: 1.81TiB<\/pre>\n<\/li>\n<li>Die neue Festplatte partitionieren<br \/>\nDie neue Festplatte (hier \/dev\/sdb) muss nun wie <a href=\"https:\/\/www.dev-metal.ch\/?p=1659#Partition_erstellen\">her beschrieben<\/a> partitioniert werden.<\/li>\n<li>RAID wiederherstellen (`btrfs replace`).<br \/>\nNun kann die neue Festtplatte in den Raid1 Verbund aufgenommen werden. Hier wird das vermisste Device mit der ID 2, welches sich an \/dev\/sdb1 in das Raid1, welches an \/mnt\/temp eingebunden wurde, aufgenommen (siehe auch <a href=\"https:\/\/btrfs.readthedocs.io\/en\/latest\/btrfs-replace.html\" target=\"_blank\" rel=\"noopener\">btrfs Doku<\/a>).<\/p>\n<pre>sudo btrfs replace start 2 \/dev\/sdb1 \/mnt\/temp<\/pre>\n<p>Der replace-Prozess wird im Hintergrund durchgef\u00fchrt. Das kann einige Stunden dauern. Der Status des replace kann folgendermassen abgerufen werden<\/p>\n<pre>sudo btrfs replace status \/mnt\/temp\/<\/pre>\n<p>Sobald der replace-Prozess beendet wurde (zu \u00fcberpr\u00fcfen mit status) kann die neue disk angezeigt werden:<\/p>\n<pre># sudo btrfs device usage \/mnt\/temp\n\n\/dev\/sda1, ID: 1\nDevice size: 7.28TiB\nDevice slack: 3.50KiB\nData,single: 3.00GiB\nData,RAID1: 3.00GiB\nMetadata,single: 2.00GiB\nMetadata,RAID1: 1.00GiB\nSystem,single: 64.00MiB\nSystem,RAID1: 32.00MiB\nUnallocated: 7.27TiB\n\n\/dev\/sdb1, ID: 2\nDevice size: 7.28TiB\nDevice slack: 5.46TiB\nData,RAID1: 3.00GiB\nMetadata,RAID1: 1.00GiB\nSystem,RAID1: 32.00MiB\nUnallocated: 1.81TiB<\/pre>\n<\/li>\n<li>Jetzt die Redundaz wieder herstellen\n<pre># sudo btrfs balance start -dconvert=raid1,soft -mconvert=raid1,soft \/mnt\/temp\n# Done, had to relocate 7 out of 12 chunks<\/pre>\n<\/li>\n<li>System rebooten<\/li>\n<\/ol>\n<p>Nach dem reboot ist das Raid1 mit der neuen Festplatte wieder hergestellt und alle subvolumes sollten wieder korrekt gemountet sein.<\/p>\n<h4>Raid1 vergr\u00f6ssern<\/h4>\n<p>Die alte Festplatte hatte in meinem Falle eine Gr\u00f6ssen von 2TB, die neue Festplatte hat eine Gr\u00f6sse von 8TB. Damit habe ich 2x 8TB verbaut. Das Raid1 hat aber zu diesem Zeitpunkt immer noch die Gr\u00f6sse der fr\u00fcheren kleineren Festplatte. Wir m\u00fcssen also nun noch die Gr\u00f6sse des Raids auf den maximal verf\u00fcgbaren Speicher anheben. Dies geschieht \u00fcber den resize Befehl:<\/p>\n<p>Dazu muss das Raid wieder als gesamtes unter \/mnt\/temp gemountet werden und alle subvolumes ausgeh\u00e4ngt sein.<\/p>\n<pre>sudo umount \/mnt\/&lt;subvolumes&gt;\nsudo mount \/dev\/sda1 \/mnt\/temp<\/pre>\n<p>Hier m\u00fcssen wir nun Device ID 2 auf deren maximal verf\u00fcgbare Gr\u00f6sse vergr\u00f6ssern<\/p>\n<pre># sudo btrfs filesystem resize 2:max \/mnt\/temp\nResize device id 2 (\/dev\/sdb1) from 1.82TiB to max<\/pre>\n<p>Nun zeigt btrfs device usage auch f\u00fcr das Device 2 die korrekte Gr\u00f6ssen an (unallocated):<\/p>\n<pre>#sudo btrfs device usage \/mnt\/temp\n\n\/dev\/sda1, ID: 1\nDevice size: 7.28TiB\nDevice slack: 3.50KiB\nData,RAID1: 3.00GiB\nMetadata,RAID1: 2.00GiB\nSystem,RAID1: 32.00MiB\nUnallocated: 7.27TiB\n\n\/dev\/sdb1, ID: 2\nDevice size: 7.28TiB\nDevice slack: 3.50KiB\nData,RAID1: 3.00GiB\nMetadata,RAID1: 2.00GiB\nSystem,RAID1: 32.00MiB\nUnallocated: 7.27TiB<\/pre>\n<p>Damit stehen nun die gesamten 8TB als Raid zur Verf\u00fcgung.<\/p>\n<p>\u00dcber diesen Prozess kann \u00fcbrigens das Raid durch neuere gr\u00f6ssere Festplatten ersetzt werden. Der HC4 unterst\u00fctz bis zu 12 TB grosse Festplatten. Es besteht also noch Luft nach oben \ud83d\ude42<\/p>\n<h3>Btrfs Wartung<\/h3>\n<p>Damit das Btrfs-Filesystem gut &#8222;in Schuss&#8220; bleibt, ist es notwendig etwas in die Wartung dessen zu investieren.\u00a0 Wartungsaufgaben k\u00f6nnen mit <a href=\"https:\/\/github.com\/kdave\/btrfsmaintenance\" target=\"_blank\" rel=\"noopener\">dieser Script-Sammlung<\/a> automatisiert werden (Scrubben, Ausbalancieren, Trimmen oder Defragmentieren).<\/p>\n<h4>Installation btrfsmaintenance<\/h4>\n<pre>sudo apt-get update\nsudo apt-get install btrfsmaintenance<\/pre>\n<p>Dies installiert btrfsmaintenance<\/p>\n<ul>\n<li>Skripte unter \/usr\/share\/btrfsmaintenance<\/li>\n<li>Konfig-File unter \/etc\/default\/btrfsmaintenance<\/li>\n<\/ul>\n<p>Anpassen Konfig-File<\/p>\n<pre>sudo vi \/etc\/default\/btrfsmaintenance\n\n=&gt; Setze auto um alle btfrs subvolumes abzudecken.\nBTRFS_BALANCE_MOUNTPOINTS=\"auto\"\nBTRFS_SCRUB_MOUNTPOINTS=\"auto\"<\/pre>\n<p>Installieren der cron-job Skripte.<\/p>\n<pre>sudo \/usr\/share\/btrfsmaintenance\/btrfsmaintenance-refresh-cron.sh\nRefresh script btrfs-scrub.sh for monthly\nRefresh script btrfs-defrag.sh for none\nRefresh script btrfs-balance.sh for weekly\nRefresh script btrfs-trim.sh for none<\/pre>\n<h2>Samba<\/h2>\n<p>Damit das NAS Files im Netzwerk bereitstellen kann, ben\u00f6tigt es nat\u00fcrlich den entsprechenden Dienst. Mit Armbian k\u00f6nnten wir hier nat\u00fcrlich aus den vollen sch\u00f6pfen. Aber ich begn\u00fcge mich mit Samba:<\/p>\n<pre>sudo apt-get install samba<\/pre>\n<p>Die einzelnen subvolumes sollen mittles Samba im Netzwerk verf\u00fcgbar gemacht werden. Pro Subvolume muss entsprechend ein Linux-User erstellt werden, der sich aber nicht am System selber anmelden kann:<\/p>\n<pre>sudo useradd -s \/bin\/false multimedia\nsudo smbpasswd -a multimedia<\/pre>\n<p>Gruppe erstellen und user multimedia zuweisen<\/p>\n<pre>sudo groupadd multimedia\nsudo usermod -a -G multimedia multimedia<\/pre>\n<p>Nun die Samba Konfiguration durchf\u00fchren<\/p>\n<pre>sudo mv \/etc\/samba\/smb.conf \/etc\/samba\/smb.orig\nsudo vi \/etc\/samba\/smb.conf<\/pre>\n<p>Inhalt<\/p>\n<pre>[global]\nworkgroup = WORKGROUP\nserver string = %h server (Samba, HC4_NAS)\nsecurity = user\nmap to guest = never\n\n[multimedia]\npath = \/mnt\/multimedia\npublic = yes\nwritable = yes\ncomment = hc4 nas: multimedia share\nprintable = no\nguest ok = no\nforce group = multimedia\nvalid users = multimedia\ncreate mask = 0660\ndirectory mask = 0770<\/pre>\n<p>Nun Samba Dienste neu starten. Anschliessend steht das Sama-Share &#8218;multimedia&#8216; zur Verf\u00fcgung:<\/p>\n<pre>sudo systemctl restart smbd.service\nsudo systemctl restart nmbd.service<\/pre>\n<p>Das Share kann nun z.B. unter Ubuntu in Dateibrowser mit<\/p>\n<pre>smb:\/\/&lt;ip&gt;\/multimedia\/<\/pre>\n<p>unter Verwendung des Users &#8218;multimedia&#8216; &amp; Passwort verbunden werden.<\/p>\n<h2>FTP Server<\/h2>\n<p>HC4 soll auch einen FTP Server bereitstellen. Ich installier daf\u00fcr <a href=\"https:\/\/www.pureftpd.org\/project\/pure-ftpd\/\" target=\"_blank\" rel=\"noopener\">PureFTPd.<\/a> Die Installation habe ich <a href=\"https:\/\/www.dev-metal.ch\/?p=309\" target=\"_blank\" rel=\"noopener\">hier<\/a> bereits einmal beschrieben.<\/p>\n<h2>Video-\u00dcberwachung<\/h2>\n<p>F\u00fcr die Video \u00dcberwachung setzte ich Shinoi ein. Die Installation wird <a href=\"https:\/\/www.dev-metal.ch\/?p=1576\" target=\"_blank\" rel=\"noopener\">hier<\/a> beschrieben.<\/p>\n<h2>Bibliotheksverwaltung f\u00fcr eReader<\/h2>\n<p>F\u00fcr die Bibliotheksverwaltung setze ich Calibre ein. <a href=\"https:\/\/www.dev-metal.ch\/?p=1812\" target=\"_blank\" rel=\"noopener\">Hier<\/a> wird die Installation beschrieben.<\/p>\n<h2>Fazit<\/h2>\n<p>Wenig \u00fcberraschend lassen sich alle Services eines Standard-NAS nachbauen.<\/p>\n<h3>Daten-Transfer Performance<\/h3>\n<p>Das Kopieren von sehr grossen Files (20 \u00e0 ca. 10GB) oder auch gleichzeitig vielen kleineren Files ( 300 \u00e0 10MB) ergeben eine Durchschnittsgeschwindigkeit von 55-57MB\/s. Damit befinden wir uns in dem, f\u00fcr die eingesetzten HDDs, erwarteten Rahmen. Hardkernel verspricht beim Einsatz von SSDs Werte von bis zu 100MB\/s. Wer das notwendige Budget hat =&gt; go4it \ud83d\ude09<\/p>\n<h3>Festplattenwechsel<\/h3>\n<p>Ein <a href=\"https:\/\/www.dev-metal.ch\/?p=1659#Raid_1_8211_Festplattenwechel\">Festplattenwechsel<\/a> hat ohne Probleme und ohne Datenverlust funktioniert.<\/p>\n<h3>Performance allgemein<\/h3>\n<p>Die Performance des HC4 reicht f\u00fcr die von mir eingesetzten Services locker aus. F\u00fcr die Video-\u00dcberwachung habe ich 4 Neztwerk-Kameras installiert, welche alle durchwegs im recording Modus laufen, also Daueraufnahmen machen und gleichzeitig den Stream auch noch an diverse Clients weiterleiten. Trotzdem l\u00e4uft der HC4 ziemlich unbeeindruckt auf rund 5-10% CPU und ca 20% RAM-Auslastung. Die Temperaturen belaufen sich auf rund 55\u00b0C (CPU) und 45\u00b0C (Storage).<\/p>\n<h3>Systemd Startreihenfolge der Services<\/h3>\n<p>Nach einigen Monaten Laufzeit ist aufgefallen, dass das System \u00f6fters nach einem Reboot nicht mehr korrekt funktioniert hat. Zum einen musste ich die korrektur des <a href=\"https:\/\/www.dev-metal.ch\/?p=1659#Reboot_Issue\" target=\"_blank\" rel=\"noopener\">&#8222;Reboot Issues&#8220;<\/a> wieder durchf\u00fchren. Diese Anpassung ging wohl nach einem apt-get upgrade verloren.<\/p>\n<p>Das andere Problem war dass das Mounten der btrfs Verzeichnisse teilweise l\u00e4nger dauerte, als das starten der systemd Services. Das f\u00fchrte zur unsch\u00f6nen Situation, dass das System nach einem Reboot im Status \u201cdegraded\u201d h\u00e4ngen blieb, weil ben\u00f6tigte Verzeichnisse noch nicht gemountet waren. <a href=\"https:\/\/www.dev-metal.ch\/?p=1913\" target=\"_blank\" rel=\"noopener\">Hier habe ich beschrieben<\/a>, wie ich diese Problematik gel\u00f6st habe.<\/p>\n<h2>Links<\/h2>\n<ul>\n<li><a href=\"https:\/\/gnulinux.ch\/serie-nas-mit-odroid-hc4-teil-1-basis\" target=\"_blank\" rel=\"noopener\">https:\/\/gnulinux.ch\/serie-nas-mit-odroid-hc4-teil-1-basis<\/a><\/li>\n<li><a href=\"https:\/\/gnulinux.ch\/nas-mit-odroid-hc4-nachlese\" target=\"_blank\" rel=\"noopener\">https:\/\/gnulinux.ch\/nas-mit-odroid-hc4-nachlese<\/a><\/li>\n<li><a href=\"https:\/\/forum.odroid.com\/viewtopic.php?f=201&amp;t=44315\" target=\"_blank\" rel=\"noopener\">https:\/\/forum.odroid.com\/viewtopic.php?f=201&amp;t=44315<\/a><\/li>\n<li><a href=\"https:\/\/blog.bmarwell.de\/2017\/10\/30\/zwei-festplatten-in-einem-btrfs-raid1-zusammenfuehren.html\" target=\"_blank\" rel=\"noopener\">https:\/\/blog.bmarwell.de\/2017\/10\/30\/zwei-festplatten-in-einem-btrfs-raid1-zusammenfuehren.html<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/kdave\/btrfsmaintenance\" target=\"_blank\" rel=\"noopener\">https:\/\/github.com\/kdave\/btrfsmaintenance<\/a><\/li>\n<li><a href=\"https:\/\/wiki.debianforum.de\/Btrfs#btrfsmaintenance\" target=\"_blank\" rel=\"noopener\">https:\/\/wiki.debianforum.de\/Btrfs#btrfsmaintenance<\/a><\/li>\n<\/ul>\n<div class=\"notranslate\" style=\"all: initial;\"><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Da sich mein Qnap NAS verabschiedet hat, war dies die Gelegenheit ein NAS selber zu bauen. Anforderungen an Services Ein NAS bietet heutzutage, nebst dem Speichern von Daten, diverse Services an. Folgendes m\u00f6chte ich auch auf dem HC4 nutzen: Datenverwaltung (NAS Strategie) Samba-Shares FTP-Server Video \u00dcberwachung Bibliotheksverwaltung f\u00fcr eReader NAS-Strategie Als erstes ist es eine [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_lmt_disableupdate":"no","_lmt_disable":"","footnotes":""},"categories":[3,10],"tags":[],"class_list":["post-1659","post","type-post","status-publish","format-standard","hentry","category-linux","category-techdocs"],"modified_by":"ralph","_links":{"self":[{"href":"https:\/\/www.dev-metal.ch\/index.php?rest_route=\/wp\/v2\/posts\/1659","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=1659"}],"version-history":[{"count":110,"href":"https:\/\/www.dev-metal.ch\/index.php?rest_route=\/wp\/v2\/posts\/1659\/revisions"}],"predecessor-version":[{"id":2042,"href":"https:\/\/www.dev-metal.ch\/index.php?rest_route=\/wp\/v2\/posts\/1659\/revisions\/2042"}],"wp:attachment":[{"href":"https:\/\/www.dev-metal.ch\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1659"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dev-metal.ch\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1659"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dev-metal.ch\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1659"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}