Ich möchte den Inhalt eines Flash-Speichers (/dev/mmcblk0) regelmäßig komplett lesen, so ähnlich wie es dd if=/dev/mmcblk0 of=/dev/zero tut. Allerdings soll das im System als Last nicht negative bemerkbar machen. Warum? Der Controller findet potentielle Datenverluste / ECC Fehler nur, wenn die Daten gelesen wird. Und es gibt ja auch Bereiche im Flash die selten gelesen werden, daher so soll alles abgescannt werden. Zeit spielt keine Rolle, das kann ruhig dauern. Die Fehlerbehebung selbst geschieht dann intern, das ist kein Thema.
Das könnte man jetzt einfach mit einem open/fopen und read/fread machen. Wenn nebenbei darauf geschrieben würde wäre das kein Problem, da ja der gelesene Inhalt egal ist. Aber wie mache ich das sozusagen im Hintergrund, ohne Last?
Am Ende soll das entweder ein Script oder ein Binary sein, dass von einem Chronjob aufgerufen wird. Schätze mal die Prio niedrig zu halten geht nur mit einem Binary?
Wie würdet ihr das machen?
Hallo,
Arno Steffens schrieb:
Ich möchte den Inhalt eines Flash-Speichers (/dev/mmcblk0) regelmäßig komplett lesen, so ähnlich wie es dd if=/dev/mmcblk0 of=/dev/zero tut. Allerdings soll das im System als Last nicht negative bemerkbar machen. Warum? Der Controller findet potentielle Datenverluste / ECC Fehler nur, wenn die Daten gelesen wird. Und es gibt ja auch Bereiche im Flash die selten gelesen werden, daher so soll alles abgescannt werden. Zeit spielt keine Rolle, das kann ruhig dauern. Die Fehlerbehebung selbst geschieht dann intern, das ist kein Thema.
Das könnte man jetzt einfach mit einem open/fopen und read/fread machen. Wenn nebenbei darauf geschrieben würde wäre das kein Problem, da ja der gelesene Inhalt egal ist. Aber wie mache ich das sozusagen im Hintergrund, ohne Last?
Am Ende soll das entweder ein Script oder ein Binary sein, dass von einem Chronjob aufgerufen wird. Schätze mal die Prio niedrig zu halten geht nur mit einem Binary?
Ich hatte mal so eine ähnliche Situation und hab das mit dem GNU ddrescue gemacht, das kann sowas wie max read rate:
ddrescue --force -v -v --max-read-rate=1M /dev/sdb /dev/null
Das bleibt auch recht zuverlässig auf dem Wert.
Gruß, Thomas
Hallo Thomas, danke für den Tip! Das schaue ich mir mal an. Das wäre natürlich eine einfache Lösung. Aber wenn jemand weiß, wie man das generisch machen kann ... ich bleib interessiert. Könnten ja auch andere Sachen im Hintergrund gemacht werden. Gruß Arno
Gesendet: Mittwoch, 19. Dezember 2018 um 19:47 Uhr Von: "Thomas Vögtle" thomas@voegtle-clan.de An: "Arno Steffens" epsi@gmx.de Cc: flug flug@lug-freiburg.de Betreff: Re: Programm im Hintergrund (ohne Last zu erzeugen)
Hallo,
Arno Steffens schrieb:
Ich möchte den Inhalt eines Flash-Speichers (/dev/mmcblk0) regelmäßig komplett lesen, so ähnlich wie es dd if=/dev/mmcblk0 of=/dev/zero tut. Allerdings soll das im System als Last nicht negative bemerkbar machen. Warum? Der Controller findet potentielle Datenverluste / ECC Fehler nur, wenn die Daten gelesen wird. Und es gibt ja auch Bereiche im Flash die selten gelesen werden, daher so soll alles abgescannt werden. Zeit spielt keine Rolle, das kann ruhig dauern. Die Fehlerbehebung selbst geschieht dann intern, das ist kein Thema.
Das könnte man jetzt einfach mit einem open/fopen und read/fread machen. Wenn nebenbei darauf geschrieben würde wäre das kein Problem, da ja der gelesene Inhalt egal ist. Aber wie mache ich das sozusagen im Hintergrund, ohne Last?
Am Ende soll das entweder ein Script oder ein Binary sein, dass von einem Chronjob aufgerufen wird. Schätze mal die Prio niedrig zu halten geht nur mit einem Binary?
Ich hatte mal so eine ähnliche Situation und hab das mit dem GNU ddrescue gemacht, das kann sowas wie max read rate:
ddrescue --force -v -v --max-read-rate=1M /dev/sdb /dev/null
Das bleibt auch recht zuverlässig auf dem Wert.
Gruß, Thomas
Hallo,
On 12/19/18 7:15 PM, Arno Steffens wrote:
Ich möchte den Inhalt eines Flash-Speichers (/dev/mmcblk0) regelmäßig komplett lesen, so ähnlich wie es dd if=/dev/mmcblk0 of=/dev/zero tut. Allerdings soll das im System als Last nicht negative bemerkbar machen. Warum? Der Controller findet potentielle Datenverluste / ECC Fehler nur, wenn die Daten gelesen wird. Und es gibt ja auch Bereiche im Flash die selten gelesen werden, daher so soll alles abgescannt werden. Zeit spielt keine Rolle, das kann ruhig dauern. Die Fehlerbehebung selbst geschieht dann intern, das ist kein Thema.
Das könnte man jetzt einfach mit einem open/fopen und read/fread machen. Wenn nebenbei darauf geschrieben würde wäre das kein Problem, da ja der gelesene Inhalt egal ist. Aber wie mache ich das sozusagen im Hintergrund, ohne Last?
Am Ende soll das entweder ein Script oder ein Binary sein, dass von einem Chronjob aufgerufen wird. Schätze mal die Prio niedrig zu halten geht nur mit einem Binary?
Wie würdet ihr das machen?
Die CPU-Last klein halten geht mit der Scheduler Policy SCHED_IDLE. Dafür empfehle ich die Lektüre von sched(7). Um ein Programm damit laufen zu lassen, muss es kein "Binary" sein. Das geht auch mit chrt(1).
Wenn das aber IO-Last macht, kannst Du Dich (meines Wissens) da nicht gegen wehren. Vermutlich lohnt es sich die blocksize nicht größer zu wählen als die Hardware intern verwendet.
Liebe Grüße Uwe
Gesendet: Mittwoch, 19. Dezember 2018 um 22:50 Uhr Von: "Uwe Kleine-König" uwe@kleine-koenig.org An: flug@lug-freiburg.de Betreff: Re: Programm im Hintergrund (ohne Last zu erzeugen)
Hallo,
On 12/19/18 7:15 PM, Arno Steffens wrote:
Ich möchte den Inhalt eines Flash-Speichers (/dev/mmcblk0) regelmäßig komplett lesen, so ähnlich wie es dd if=/dev/mmcblk0 of=/dev/zero tut. Allerdings soll das im System als Last nicht negative bemerkbar machen. Warum? Der Controller findet potentielle Datenverluste / ECC Fehler nur, wenn die Daten gelesen wird. Und es gibt ja auch Bereiche im Flash die selten gelesen werden, daher so soll alles abgescannt werden. Zeit spielt keine Rolle, das kann ruhig dauern. Die Fehlerbehebung selbst geschieht dann intern, das ist kein Thema.
Das könnte man jetzt einfach mit einem open/fopen und read/fread machen. Wenn nebenbei darauf geschrieben würde wäre das kein Problem, da ja der gelesene Inhalt egal ist. Aber wie mache ich das sozusagen im Hintergrund, ohne Last?
Am Ende soll das entweder ein Script oder ein Binary sein, dass von einem Chronjob aufgerufen wird. Schätze mal die Prio niedrig zu halten geht nur mit einem Binary?
Wie würdet ihr das machen?
Die CPU-Last klein halten geht mit der Scheduler Policy SCHED_IDLE. Dafür empfehle ich die Lektüre von sched(7). Um ein Programm damit laufen zu lassen, muss es kein "Binary" sein. Das geht auch mit chrt(1).
Wenn das aber IO-Last macht, kannst Du Dich (meines Wissens) da nicht gegen wehren. Vermutlich lohnt es sich die blocksize nicht größer zu wählen als die Hardware intern verwendet.
Liebe Grüße Uwe
Hallo Uwe, sorry für die verspätete Antwort. Sieht aus als wenn das mit chrt prima funktioniert. Vielen Dank, liebe Grüße und überhaupt ein Gutes Neues Jahr! Arno