{"id":665,"date":"2022-06-19T13:26:23","date_gmt":"2022-06-19T12:26:23","guid":{"rendered":"https:\/\/www.steve-meier.de\/?p=665"},"modified":"2022-06-19T13:30:30","modified_gmt":"2022-06-19T12:30:30","slug":"synology-hdd-upgrade-per-cli","status":"publish","type":"post","link":"https:\/\/www.steve-meier.de\/?p=665","title":{"rendered":"Synology HDD Upgrade (per CLI)"},"content":{"rendered":"\n<p>Wenn man lange genug ein NAS hat und es mit Daten f\u00fcttert, laufen die Festplatten zwangsl\u00e4ufig voll. Es gibt dann zwei M\u00f6glichkeiten: 1) aufr\u00e4umen oder 2) gr\u00f6\u00dfere Platten kaufen.<\/p>\n\n\n\n<p>Letzte Woche habe ich mich f\u00fcr die pragmatische, zweite L\u00f6sung entschieden.<\/p>\n\n\n\n<p>Dort drau\u00dfen gibt es eine Menge Tutorials und Videos, wie man nun ein solches Upgrade durchf\u00fchrt, wenn man ein RAID hat. In der Kurzform: Platte raus, neue Platte rein, synchronisieren, wiederholen, RAID erweitern, fertig.<\/p>\n\n\n\n<p>In meinem Fall verwende ich allerdings kein RAID, so dass ein anderer Prozess her musste. Da Synology nat\u00fcrlich auch auf Linux aufsetzt, bedarf es auch keiner gro\u00dfen Magie.<\/p>\n\n\n\n<p>Wie bei einem Geb\u00e4ude besteht die Speicherarchitektur bei Synology aus mehreren Ebenen: ganz unten, die Partition (bspw. \/dev\/sdb3), dar\u00fcber der Software-RAID-Layer (bspw. \/dev\/md3) und schlie\u00dflich das Dateisystem (bspw. \/volume2):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>|===========|\n| \/volume2  |\n|===========|\n| \/dev\/md3  |\n|===========|\n| \/dev\/sdb3 |\n|===========|<\/code><\/pre>\n\n\n\n<p>Diese drei Ebenen gilt es zu vergr\u00f6\u00dfern, von unten nach oben. Wir erweitern das Fundament (Partition\/RAID) und machen dann einen Anbau (erweitern das Dateisystem).<\/p>\n\n\n\n<p>Aber bevor es losgehen kann, klonen wir zun\u00e4chst die alte Platte auf die neue:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># time dd if=\/dev\/sdX of=\/dev\/sdY bs=32M<\/code><\/pre>\n\n\n\n<p>\u00dcber die ideale Blockgr\u00f6\u00dfe (bs=32M, also 32 MB) l\u00e4sst sich lange diskutieren, in meinem Fall konnte ich zwischen 32M und 64M keinen signifikanten Unterschied feststellen. F\u00fcr 4 TB dauerte die ganze Aktion circa 9,5 Stunden. <\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Partition erweitern<\/h2>\n\n\n\n<p>Mit <code>fdisk<\/code> k\u00f6nnen wir nun die Partitionstabelle auf der neuen Platte ansehen. Synology verwendet hier drei Partition: zwei f\u00fcr das System, eine f\u00fcr die Daten:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Device       Start        End    Sectors  Size Type\n\/dev\/sdb1      256    4980735    4980480  2.4G Linux RAID\n\/dev\/sdb2  4980736    9175039    4194304    2G Linux RAID\n\/dev\/sdb3  9437184 7814032064 7804594881  3.6T Linux RAID<\/code><\/pre>\n\n\n\n<p>Eventuell beschwert sich <code>fdisk<\/code> dar\u00fcber, dass es keine Backup GPT Tabelle finden kann, das Problem wird aber im gleichen Schritt gel\u00f6st. Wichtig ist hierbei darauf zu achten, dass die Partitionen nicht &#8220;b\u00fcndig&#8221; sind, das hei\u00dft es bleiben einige leere Sektoren.<\/p>\n\n\n\n<p>Die Partition zu erweitern ist recht einfach: Zun\u00e4chst l\u00f6schen wir die bestehende Partition 3 (d, 3) und legen dann eine neue an (n, 3). <code>fdisk<\/code> erkennt hier die bestehende RAID-Signatur, diese wollen wir allerdings behalten und l\u00f6schen sie daher nicht.<\/p>\n\n\n\n<p>Der Startsektor muss identisch sein (in diesem Fall 9437184), den letzten Sektor setzt <code>fdisk<\/code> automatisch so, um die volle Gr\u00f6\u00dfe der Platte zu nutzen.<\/p>\n\n\n\n<p>Abschlie\u00dfend setzen wir den Typ der Partition auf <code>29<\/code>, Linux RAID (t, 3, 29). Bevor wir <code>fdisk<\/code> beenden schreiben wir die neue Partitionstabelle auf die Platte (w).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">RAID erweitern<\/h2>\n\n\n\n<p>Ein Blick in <code>\/proc\/mdstat<\/code> zeigt uns, welche Software-RAIDs derzeit aktiv sind:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># cat \/proc\/mdstat\nPersonalities : &#91;raid1] &#91;linear] &#91;multipath] &#91;raid0] &#91;raid6] &#91;raid5] &#91;raid4] &#91;raid10]\nmd127 : active (auto-read-only) raid1 sdb3&#91;0]\n      3902296256 blocks super 1.2 &#91;1\/1] &#91;U]\n\nunused devices: &lt;none&gt;<\/code><\/pre>\n\n\n\n<p>In diesem Fall hat das System die ID 127 zugewiesen, erreichbar unter <code>\/dev\/md127<\/code>. Diese ID ist nicht fix, wir brauchen sie allerdings ohnehin nur tempor\u00e4r.<\/p>\n\n\n\n<p><code>mdadm<\/code> ist das Werkzeug um Software-RAIDs zu verwalten, wir schauen uns also zun\u00e4chst den Status an:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># mdadm -D \/dev\/md127\n\/dev\/md127:\n           Version : 1.2\n     Creation Time : ***\n        Raid Level : raid1\n        Array Size : 3902296256 (3721.52 GiB 3995.95 GB)\n     Used Dev Size : 3902296256 (3721.52 GiB 3995.95 GB)\n      Raid Devices : 1\n     Total Devices : 1\n       Persistence : Superblock is persistent\n\n       Update Time : Fri Jun 17 19:58:57 2022\n             State : clean\n    Active Devices : 1\n   Working Devices : 1\n    Failed Devices : 0\n     Spare Devices : 0\n\nConsistency Policy : resync\n\n              Name : DiskStation:3\n              UUID : ***\n            Events : 6\n\n    Number   Major   Minor   RaidDevice State\n       0       8       19        0      active sync   \/dev\/sdb3<\/code><\/pre>\n\n\n\n<p>Das RAID hat also, nach wie vor, eine Gr\u00f6\u00dfe von ca. 4 TB, obwohl es nun auf einer bereits vergr\u00f6\u00dferten Partition von fast 8 TB liegt. Das l\u00e4sst sich mit <code>mdadm<\/code>&#8216;s Grow-Funktion leicht \u00e4ndern:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># mdadm --grow \/dev\/md127 -z max\nmdadm: component size of \/dev\/md127 has been set to 7809306951K<\/code><\/pre>\n\n\n\n<p>In wenigen Sekunden nimmt so das Software-RAID den gesamten verf\u00fcgbaren Platz der nun vergr\u00f6\u00dferten Partition ein.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Dateisystem erweitern<\/h2>\n\n\n\n<p>Im letzten Schritt m\u00fcssen wir nun das Dateisystem erweitern, um den gesamten Platz des Software-RAIDs zu verwenden. Da Synylogy <code>ext4<\/code> als Dateisystem verwendet, kommt hier <code>resize2fs<\/code> zum Einsatz. Dieses Werkzeug kann ext2, 3 und 4 verwalten. Als Parameter braucht es lediglich die Angabe der Partition bzw. des Software-RAIDs, auf dem das zu vergr\u00f6\u00dfernde Dateisystem liegt:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># resize2fs \/dev\/md127\nresize2fs 1.44.5 (15-Dec-2018)\nPlease run 'e2fsck -f \/dev\/md127' first.<\/code><\/pre>\n\n\n\n<p><code>resize2fs<\/code> ist vorsichtig, und verlangt, dass wir das Dateisystem zun\u00e4chst einer Kontrolle durch <code>e2fsck<\/code> unterziehen. Das stellt sicher, dass das Dateisystem konsistent ist und vermeidet Probleme beim erweitern.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># e2fsck -f \/dev\/md127\ne2fsck 1.44.5 (15-Dec-2018)\nPass 1: Checking inodes, blocks, and sizes\nInode 18 has INDEX_FL flag set on filesystem without htree support.\nClear HTree index&lt;y&gt;? yes\nInode 20 has INDEX_FL flag set on filesystem without htree support.\nClear HTree index&lt;y&gt;? yes\nInode 8913957 has INDEX_FL flag set on filesystem without htree support.\nClear HTree index&lt;y&gt;? yes\nInode 104991253 has INDEX_FL flag set on filesystem without htree support.\nClear HTree index&lt;y&gt;? yes\nPass 2: Checking directory structure\nPass 3: Checking directory connectivity\nPass 4: Checking reference counts\nPass 5: Checking group summary information\n\n1.42.6-4482: ***** FILE SYSTEM WAS MODIFIED *****\n1.42.6-4482: 15180\/243900416 files (0.7% non-contiguous), 924041481\/975574064 blocks<\/code><\/pre>\n\n\n\n<p>In meinem Fall fand <code>e2fsck<\/code> sogar eine Handvoll Fehler. Man kann relativ bedenkenlos hier mit &#8220;Ja&#8221; auf die Vorschl\u00e4ge von <code>e2fsck<\/code> antworten, schlie\u00dflich wei\u00df dieses Werkzeug deutlich mehr \u00fcber Dateisystemstrukturen als wir. Der gesamte Check sollte nicht l\u00e4nger als 1-2 Minuten dauern.<\/p>\n\n\n\n<p>Jetzt, wo das Dateisystem \u00fcberpr\u00fcft und als &#8220;sauber&#8221; markiert ist, k\u00f6nnen wir einen zweiten Anlauf mit <code>resize2fs<\/code> starten:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># resize2fs \/dev\/md127\nresize2fs 1.44.5 (15-Dec-2018)\nResizing the filesystem on \/dev\/md127 to 1952326737 (4k) blocks.\nThe filesystem on \/dev\/md127 is now 1952326737 (4k) blocks long.<\/code><\/pre>\n\n\n\n<p>Auch diese Aktion braucht lediglich 1-2 Minuten und das Dateisystem hat nun die neue Gr\u00f6\u00dfe.<\/p>\n\n\n\n<p>Die neue Platte ist nun einsatzbereit und kann zur\u00fcck in die DiskStation. Wenn man alles richtig gemacht hat, sollte diese ohne Probleme booten und die Speicher-Manager App zeigt das vergr\u00f6\u00dferte Volume an.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Wenn man lange genug ein NAS hat und es mit Daten f\u00fcttert, laufen die Festplatten zwangsl\u00e4ufig voll. Es gibt dann zwei M\u00f6glichkeiten: 1) aufr\u00e4umen oder 2) gr\u00f6\u00dfere Platten kaufen. Letzte Woche habe ich&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[],"_links":{"self":[{"href":"https:\/\/www.steve-meier.de\/index.php?rest_route=\/wp\/v2\/posts\/665"}],"collection":[{"href":"https:\/\/www.steve-meier.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.steve-meier.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.steve-meier.de\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.steve-meier.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=665"}],"version-history":[{"count":4,"href":"https:\/\/www.steve-meier.de\/index.php?rest_route=\/wp\/v2\/posts\/665\/revisions"}],"predecessor-version":[{"id":670,"href":"https:\/\/www.steve-meier.de\/index.php?rest_route=\/wp\/v2\/posts\/665\/revisions\/670"}],"wp:attachment":[{"href":"https:\/\/www.steve-meier.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=665"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.steve-meier.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=665"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.steve-meier.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=665"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}