Proxmox Container als NAS mit Intel Nuc8i5

Uha, da verstehe ich nichtmal die Hälfte von :). Kurz zu meinem Setup:

Ich habe jetzt einfach Samba in einem debian lxc Container installiert. Da werden aber nichtmal täglich Daten geschrieben/gelesen. Das ist quasi meine Ablage für Fotos/Videos. Hier kommen wenn überhaupt mal alle paar Wochen ein paar GB auf die Platte. Diese wird dann per rsync gesichert. Auch das Ansehen der Daten passiert dann eigentlich auf einem der (insgesamt) 2 Backups.

Mich würde noch interessieren, wie ich sowas ermitteln kann, wieviel GB beim Schreiben auf die SSD tatsächlich geschrieben werden, wie du beschrieben hast.

Ich gehe davon aus, dass man Discard bzw. Trim irgendwie konfigurieren muss, damit es in Proxmox genutzt wird?

Alles andere (auch wenn ich es nicht verstehe) ist wahrscheinlich für mein Setup nicht nötig, wie gesagt, da passiert nicht viel. Ansonsten nutze ich den NUC (und damit die SSD) noch als OpenVPN Server, einen Windows Client für das HomeOffice und ich wollte mir mal PiHole ansehen. Bei PiHole kann ich mir vorstellen wird viel geschrieben aufgrund der logs, muss ich mir aber erstmal ansehen.

Danke!
 
Uha, da verstehe ich nichtmal die Hälfte von :). Kurz zu meinem Setup:

Ich habe jetzt einfach Samba in einem debian lxc Container installiert. Da werden aber nichtmal täglich Daten geschrieben/gelesen. Das ist quasi meine Ablage für Fotos/Videos. Hier kommen wenn überhaupt mal alle paar Wochen ein paar GB auf die Platte. Diese wird dann per rsync gesichert. Auch das Ansehen der Daten passiert dann eigentlich auf einem der (insgesamt) 2 Backups.
Es passiert immer viel ;)
Alleine dein Proxmox schreibt pausenlos Logs, Metrics und die HA Config Dateien jede Minute auf die SSD. Ist nicht unüblich, dass da Proxmox selbst schon 30GB am Tag auf die SSD schreibt, einfach nur so im Leerlauf um zu funktionieren. Deshalb soll man Proxmox auch nicht auf USB-Sticks installieren, weil die im Null-Komma-Nichts kaputtgeschrieben wären.
Die 600GB die da bei mir am Tag auf den Flash der SSDs geschrieben werden sind zu 90% auch nur Logs und Metrics die im laufenden Betrieb entstehen und wo ich eigentlich selbst nicht richtiges auf die SSDs speichere.
Mich würde noch interessieren, wie ich sowas ermitteln kann, wieviel GB beim Schreiben auf die SSD tatsächlich geschrieben werden, wie du beschrieben hast.
Du kannst z.B. mal iostat auf dem Proxmox Host installieren:
apt update && apt install sysstat
Wenn du dann z.B. auf dem Host iostat 1200 2 ausführst und 20 Minuten wartest, dann kannst du sehen, was da innerhalb von 20 Minuten auf deine SSD geschrieben wurde.
Dann hast du aber immer noch nicht die Gesamtmenge die auf dem Flash landet, da das nur die Daten sind die auf die SSD geschrieben werden sollten, ohne aber die interne Write Amplification von der SSD. Für die echte Gesamtmenge an Writes musst du gucken, ob dir deine SSD da per SMART-Attribute etwas sagen kann. Also z.B. mal smartctl -a /dev/sda ausführen und dann gucken, ob da die SSD dir sagen kann, was da in der Summe wirklich auf den NAND Flash geschrieben wurde. Wenn du das dann nocheinmal nach 24 Stunden ausführst und die Werte subtrahierst, dann kannst du ja sehen was die SSD tatsächlich in 24 Stunden geschrieben hat.

Bei mir hat die SSD z.B. diese SMART-Werte:
Code:
241 Host_Writes_32MiB       0x0032   100   100   000    Old_age   Always       -   642965
243 NAND_Writes_32MiB       0x0032   100   100   000    Old_age   Always       -   1588571
Die kann man so interpretieren, dass da bis heute "Host_Writes_32MiB: 642965 * 32MiB = 19,62 TiB" vom Host auf die SSD geschrieben werden sollte. Interessanter ist aber der andere Wert. "NAND_Writes_32MiB: 1588571 * 32MiB = 48,48TiB" besagt, dass da 48,48TiB auf den Flash geschrieben wurden, um da die 19,62 TiB speichern zu können. Diese SSD hatte also im Schnitt eine interne Write Amplification von Faktor 2,47 (weil 48,48/19,62).
SMART ist aber leider nicht standardisiert, weshalb du nicht sicher sein kannst, ob dir deine SSD das überhaupt anzeigt, was die wirklich auf den Flash geschrieben hat oder die nur mitzählt, was da der Host auf die SSD schreiben wollte. Das hängt immer von dem jeweiligen SSD-Modell ab.

Ich gehe davon aus, dass man Discard bzw. Trim irgendwie konfigurieren muss, damit es in Proxmox genutzt wird?
Ja, sowohl in den Gästen selbst (z.B. per fstab in Linux) als auch in den Einstellungen zum virtuellen SCSI Controller falls du VMs verwendest. Und natürlich noch in Proxmox. Standardmäßig ist Discard in Proxmox und Debian z.B. deaktiviert, dass da die SSD nicht autoamtisch mitgeteilt bekommt, wann etwas auf der SSD gelöscht wurde. Wenn die SSD nicht weiß, ob etwas gelöscht wurde, dann läuft die irgendwann voll und hat keine leeren Flash-Zellen mehr, die z.B. für das Wear Leveling genutzt werden könnten. Auch bremst es die SSD dann aus, wenn alles voll ist, weil sie so schlechter interne Operationen zur Optimierung durchführen kann.
Alles andere (auch wenn ich es nicht verstehe) ist wahrscheinlich für mein Setup nicht nötig, wie gesagt, da passiert nicht viel. Ansonsten nutze ich den NUC (und damit die SSD) noch als OpenVPN Server, einen Windows Client für das HomeOffice und ich wollte mir mal PiHole ansehen. Bei PiHole kann ich mir vorstellen wird viel geschrieben aufgrund der logs, muss ich mir aber erstmal ansehen.
Danke!
Das du das nicht für dein Setup brauchst kann man so nicht sagen. Alle von mir genannten Punkte, bis auf das mit dem ZFS TXG Timeouts wenn du kein ZFS nutzt, kannst du auch bei dir anwenden, damit deine SSD länger lebt. Wenn du das alles ignorierst wird es trotzdem laufen, aber die SSD nutzt sich halt schneller ab. Ob sich für dich der zusätzliche Aufwand lohnt musst du dann selbst entscheiden. Am besten mal hochrechnen was deine SSD so im Jahr schreibt (über die Daten von den SMART-Attributen) und dann gucken wie lange die Leben würde. Wenn die 10 Jahre halten würde wäre es ziemlich unnötig da noch die Haltbarkeit zu optimieren. Wenn die wie bei mir kein Jahr halten würde, dann sollte man sich aber echt mit Optimierungen befassen, weil das sonst ziemlich teuer wird, wenn man jedes Jahr 1 oder 2 neue SSDs kaufen muss weil die so schnell verschleißen.

Besonders so Dinge wie das mit der "noatime" und "nodiratime" sind leicht zu erledigen und können viel bewirken. Nehmen wir mal an ein Programm von dir will eigentlich nichts schreiben, aber durchsucht alle Dateien, ob in einer von denen ein bestimmtes Wort steht. Hast du 1.000 Ordner und 100.000 Dateien auf der SSD, dann werden alle einmal geöffnet um zu gucken, was da in denen steht. Hast du atime und diratime aber nicht deaktiviert, dann muss Linux bei jedem Öffnen einer Datei mitloggen, wann genau die Datei oder der Ordner das letzte mal aufgerufen wurde. Da 100.000 Dateien geöffnet wurden muss dann automatisch 100.000 mal das neue Datum auf die SSD geschrieben werden.
Da hast du dann ungewollt 101.000 kleine Writes erzeugt, obwohl du nur etwas lesend öffnen wolltest. Sobald du noatime und nodiratime setzt versucht Linux nicht mehr das Datum des letztens Zugriffs mitzuloggen und du hast viel weniger Writes, da nicht jeder Lesevorgang auch automatisch einen Schreibvorgang verursacht.
Besonders bei SSDs kann das übel kommen, da SSDs nicht gut mit kleinen Writes umgehen können und die dann besonders schnell verschleißen.

Von solchen Optimierungen hast du halt echt unzählige in Linux, wo du ständig unwissend unnötige Schreibvorgänge erzeugst, obwohl du meinst, dass du ja eigentlich garnichts schreibst.
 
Last edited:
Habe heute mal zunächst ca. 447 GB an Daten auf mein Samba Share in den Container geschoben. Dabei wurden laut smartcl auf dem pve host nur 478 GB Daten geschrieben, und ich habe nebenbei noch ein bisschen an meinem openvpn Container gefummelt.

Ich werde mal beobachten (auch mit dem sysstat) wie sich das jetzt im laufenden Betrieb verhält.

Gruß,

jawr
 
Du kannst ja mal deine SMART-Attribute zeigen. Klingt für mich eher danach, dass da SMART dir nur das anzeigt was über das Interface an Writes reinkommt und nicht das, was die SSD intern wirklich auf den Flash schreibt.
 
Siehe hier :

Code:
root@pve:~# smartctl -x /dev/sda
smartctl 7.1 2019-12-30 r5022 [x86_64-linux-5.4.73-1-pve] (local build)
Copyright (C) 2002-19, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF INFORMATION SECTION ===
Device Model:     SanDisk SDSSDH3 2T00
Serial Number:    204088801827
LU WWN Device Id: 5 001b44 8bbcf365e
Firmware Version: 411040RL
User Capacity:    2,000,398,934,016 bytes [2.00 TB]
Sector Size:      512 bytes logical/physical
Rotation Rate:    Solid State Device
Form Factor:      2.5 inches
Device is:        Not in smartctl database [for details use: -P showall]
ATA Version is:   ACS-4 T13/BSR INCITS 529 revision 5
SATA Version is:  SATA 3.3, 6.0 Gb/s (current: 6.0 Gb/s)
Local Time is:    Tue Dec 22 21:12:34 2020 CET
SMART support is: Available - device has SMART capability.
SMART support is: Enabled
AAM feature is:   Unavailable
APM level is:     254 (maximum performance)
Rd look-ahead is: Enabled
Write cache is:   Enabled
DSN feature is:   Unavailable
ATA Security is:  Disabled, frozen [SEC2]
Wt Cache Reorder: Unavailable

=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED

General SMART Values:
Offline data collection status:  (0x00) Offline data collection activity
                                        was never started.
                                        Auto Offline Data Collection: Disabled.
Self-test execution status:      (   0) The previous self-test routine completed
                                        without error or no self-test has ever
                                        been run.
Total time to complete Offline
data collection:                (    0) seconds.
Offline data collection
capabilities:                    (0x11) SMART execute Offline immediate.
                                        No Auto Offline data collection support.
                                        Suspend Offline collection upon new
                                        command.
                                        No Offline surface scan supported.
                                        Self-test supported.
                                        No Conveyance Self-test supported.
                                        No Selective Self-test supported.
SMART capabilities:            (0x0003) Saves SMART data before entering
                                        power-saving mode.
                                        Supports SMART auto save timer.
Error logging capability:        (0x01) Error logging supported.
                                        General Purpose Logging supported.
Short self-test routine
recommended polling time:        (   2) minutes.
Extended self-test routine
recommended polling time:        (  10) minutes.

SMART Attributes Data Structure revision number: 4
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME          FLAGS    VALUE WORST THRESH FAIL RAW_VALUE
  5 Reallocated_Sector_Ct   -O--CK   100   100   ---    -    0
  9 Power_On_Hours          -O--CK   100   100   ---    -    460
12 Power_Cycle_Count       -O--CK   100   100   ---    -    18
165 Unknown_Attribute       -O--CK   100   100   ---    -    3145754
166 Unknown_Attribute       -O--CK   100   100   ---    -    0
167 Unknown_Attribute       -O--CK   100   100   ---    -    48
168 Unknown_Attribute       -O--CK   100   100   ---    -    1
169 Unknown_Attribute       -O--CK   100   100   ---    -    724
170 Unknown_Attribute       -O--CK   100   100   ---    -    0
171 Unknown_Attribute       -O--CK   100   100   ---    -    0
172 Unknown_Attribute       -O--CK   100   100   ---    -    0
173 Unknown_Attribute       -O--CK   100   100   ---    -    0
174 Unknown_Attribute       -O--CK   100   100   ---    -    3
184 End-to-End_Error        -O--CK   100   100   ---    -    0
187 Reported_Uncorrect      -O--CK   100   100   ---    -    0
188 Command_Timeout         -O--CK   100   100   ---    -    0
194 Temperature_Celsius     -O---K   074   032   ---    -    26 (Min/Max 24/32)
199 UDMA_CRC_Error_Count    -O--CK   100   100   ---    -    0
230 Unknown_SSD_Attribute   -O--CK   001   001   ---    -    21474836485
232 Available_Reservd_Space PO--CK   100   100   004    -    100
233 Media_Wearout_Indicator -O--CK   100   100   ---    -    639
234 Unknown_Attribute       -O--CK   100   100   ---    -    852
241 Total_LBAs_Written      ----CK   253   253   ---    -    810
242 Total_LBAs_Read         ----CK   253   253   ---    -    182
244 Unknown_Attribute       -O--CK   000   100   ---    -    0
                            ||||||_ K auto-keep
                            |||||__ C event count
                            ||||___ R error rate
                            |||____ S speed/performance
                            ||_____ O updated online
                            |______ P prefailure warning

General Purpose Log Directory Version 1
SMART           Log Directory Version 1 [multi-sector log support]
Address    Access  R/W   Size  Description
0x00       GPL,SL  R/O      1  Log Directory
0x01           SL  R/O      1  Summary SMART error log
0x02           SL  R/O      2  Comprehensive SMART error log
0x03       GPL     R/O      1  Ext. Comprehensive SMART error log
0x04       GPL,SL  R/O      8  Device Statistics log
0x06           SL  R/O      1  SMART self-test log
0x07       GPL     R/O      1  Extended self-test log
0x10       GPL     R/O      1  NCQ Command Error log
0x11       GPL     R/O      1  SATA Phy Event Counters log
0x24       GPL     R/O   2277  Current Device Internal Status Data log
0x25       GPL     R/O   2277  Saved Device Internal Status Data log
0x30       GPL,SL  R/O      9  IDENTIFY DEVICE data log
0x80-0x9f  GPL,SL  R/W     16  Host vendor specific log
0xde       GPL     VS       8  Device vendor specific log

SMART Extended Comprehensive Error Log Version: 1 (1 sectors)
No Errors Logged

SMART Extended Self-test Log Version: 1 (1 sectors)
No self-tests have been logged.  [To run self-tests, use: smartctl -t]

Selective Self-tests/Logging not supported

SCT Commands not supported

Device Statistics (GP Log 0x04)
Page  Offset Size        Value Flags Description
0x01  =====  =               =  ===  == General Statistics (rev 1) ==
0x01  0x008  4              18  ---  Lifetime Power-On Resets
0x01  0x010  4             460  ---  Power-on Hours
0x01  0x018  6      1700325732  ---  Logical Sectors Written
0x01  0x020  6        41457493  ---  Number of Write Commands
0x01  0x028  6       382879460  ---  Logical Sectors Read
0x01  0x030  6         2813435  ---  Number of Read Commands
0x07  =====  =               =  ===  == Solid State Device Statistics (rev 1) ==
0x07  0x008  1               0  N--  Percentage Used Endurance Indicator
                                |||_ C monitored condition met
                                ||__ D supports DSN
                                |___ N normalized value

Pending Defects log (GP Log 0x0c) not supported

SATA Phy Event Counters (GP Log 0x11)
ID      Size     Value  Description
0x0001  4            0  Command failed due to ICRC error
0x0002  4            0  R_ERR response for data FIS
0x0005  4            0  R_ERR response for non-data FIS
0x000a  4           12  Device-to-host register FISes sent due to a COMRESET

Dieser Wert

Code:
241 Total_LBAs_Written      ----CK   253   253   ---    -    810

sind wohl die GB Written in GB. Das entspricht
Code:
1700325732  ---  Logical Sectors Written

mal Sector Size von 512 bytes

Der Wert
Code:
241 Total_LBAs_Written      ----CK   253   253   ---    -    810

stand heute morgen auf 332. Die Platte ist eine Sandisk Ultra 2TB mit 500 TB TBW.
 
Last edited:
Die SSD scheint leider nicht in der DB von smartctl aufgeführt zu sein. Und ich finde da beim Hersteller auch keine Infos dazu, wie man die Smart-Attribute zu interpretieren hat. Da kann man dann echt nur raten, was die die Werte sein könnten.
 
Das stimmt.. Aber die Sectors Written Mal der Sectors Size müsste sich der richtige Wert sein. Denke schon dass diese Werte stimmen?!
 
SSD können eigentlich keine kleinen Blöcke schreiben und daher hat man eigentlich immer Write Amplification, gerade wenn die SSD voller/älter ist oder wenn es um Sync Writes geht, wo die SSD ihren internen RAM Cache nicht nutzen darf.

Sagen wir mal als Beispiel die interne Blockgröße ist 2MB. Sagen tut die dir es wären 512B LBA, aber intern ist das kleinste an Blöckgröße trotzdem 2MB oder so etwas.
Sagen wir dein Linux will eine 1KB große Datei schreiben. Dann versucht es 2 Blöcke je 512B auf die SSD zu schreiben. Die SSD kann aber nichts schreiben was kleiner als 2MB ist. Also wird der 2MB-Block in den Cache geladen, die 1KB werden hinzugefügt, der alte 2MB-Block wird gelöscht und der neue veränderte 2MB-Block wird wieder geschrieben. 1KB geht als Schreiboperation in die SSD rein, aber intern muss die SSD 2MB schreiben um diese 1KB-Datei zu speichern.
Damit die SSD länger hält nutzt die dann für Async Writes RAM Caching. Die wartet dann mit dem Schreiben bis sich mindestens 2MB angesammelt haben, welche geschrieben werden sollen und sobald genug da ist macht die dann alles in einem Rutsch. Hast du während dessen aber einen Stromausfall sind die Daten aus dessen RAM-Cache verloren. Daher kann die SSD keinen RAM Cache für Sync Writes nehmen. Wolltest du 1000x 1KB-Dateien per Sync Write schreiben, dann müsste die SSD 1000x 2MB intern schreiben und die SSD ist schnell kaputt.
Aber auch mit dem Caching von Async Writes kann das schreiben nie perfekt sein. Gerade wenn die SSD schon sehr voll oder alt ist hast du sehr viele "angebrochene" Blöcke. Sagen wir du willst 1MB Schreiben aber die SSD hat nur noch angebrochene Blöcke über. Dann sind da z.B. zwei 2MB-Blöcke die mit 1,5MB bereits gefüllt ist. Dann werden 0,5MB im einen Block und 0,5MB im anderen Block gespeichert. Schreiben muss die SSD dann aber trotz Caching 4MB um diese 1MB große Datei speichern zu können.

Wenn du da also 447GB auf die SSD schreibst und die nur 478GB als geschrieben anzeigt, dann kannst du der SSD keine brauchbaren Zahlen entnehmen. Rein technisch bedingt sollte da eigentlich ein mehrfaches intern auf den Flash geschrieben worden sein.

Aber die Write Amplification von VM zum Host scheint dann ja bei dir wenigstens gut zu sein. Die kannst du ja trotzdem per iostat überwachen.
 
Last edited:
OK, was bleibt? Die Hoffnung dass die Platte Mal in die Datenbank aufgenommen wird oder wird es dadurch auch nicht besser?

Ich frage mich übrigens gerade ob du im Bereich Entwicklung dieser Platten arbeitest oder Treiber für sowas programmierst... Das weiß doch kein Mensch was du alles weißt über die internen Vorgänge bei einer SSD :)
 
OK, was bleibt? Die Hoffnung dass die Platte Mal in die Datenbank aufgenommen wird oder wird es dadurch auch nicht besser?
Naja, im Zweifelsfall kannst du dich noch grob an an dem Wearout Indicator orientieren. Der geht von 100 langsam auf 0 runter. Lässt sich nur schlecht mit rechnen für Prognosen.
Ich frage mich übrigens gerade ob du im Bereich Entwicklung dieser Platten arbeitest oder Treiber für sowas programmierst... Das weiß doch kein Mensch was du alles weißt über die internen Vorgänge bei einer SSD :)
Nein, wie jede SSD genau intern funktioniert weiß leider niemand. Gibt auch keine Chance irgendwie zu recherchieren mit welcher Blockgröße eine bestimmte SSD nun wirklich arbeitet. Aber die Blockgröße ist weit über dem, was die SSD dir da als LBA vorgaukelt.
Wenn du dich dafür interessierst wie das mit TRIM, der Garbage Collection, Caching, Async- und Sync-Writes etc funktioniert oder wie NAND Flash im Detail beschreiben wird, dann findest du da massig Artikel und Wissenschaftliche Arbeiten im Internet. Da habe ich mir ein paar von durchgelesen, weil mich meine Write Amplification so genervt hat^^
 

About

The Proxmox community has been around for many years and offers help and support for Proxmox VE, Proxmox Backup Server, and Proxmox Mail Gateway.
We think our community is one of the best thanks to people like you!

Get your subscription!

The Proxmox team works very hard to make sure you are running the best software and getting stable updates and security enhancements, as well as quick enterprise support. Tens of thousands of happy customers have a Proxmox subscription. Get yours easily in our online shop.

Buy now!