cyclic
Diskussionsleiter
Profil anzeigen
Private Nachricht
Link kopieren
Lesezeichen setzen

beschäftigt
dabei seit 2019
dabei seit 2019
Profil anzeigen
Private Nachricht
Link kopieren
Lesezeichen setzen
SD-Karte Filesystem Block/Cluster-Versuche
09.03.2025 um 21:11SX2070 HS auf 2GB SD-Karte:
Original:
Dateianhang: Original_2025-03-12.txt (18 KB)
Formatiert:
Formatierungshinweise/-hilfe:
Spoiler
Folgende Regexp ist hilfreich um den Output von
Graph:

Matlab/Octave-Skript:
Dateianhang: Filefrag.m (9 KB)
Zum Vergleich S120 32GB SD-Karte:
Original:
Dateianhang: Original_S120.txt (1 KB)
Formatiert:
Ergebnisse:
Anmerkungen:
Original:
Dateianhang: Original_2025-03-12.txt (18 KB)
Formatiert:
FILENAME START END
M0239.CTG 280.. 280: <- catalog file probably create / updated when switching into the viewer mode
IMG_2969.JPG 10.. 111:
IMG_2970.JPG 112.. 202:
IMG_2971.JPG 203.. 278:
<- gap: 2 blocks - probably because the CFG file was created in viewer mode
MVI_2972.MP4 281.. 537:
538.. 540:
IMG_2973.JPG 541.. 625:
IMG_2974.JPG 626.. 723:
(IMG_2975.JPG 724.. 817: <- Before changing timestamps with exiftool - size: 94 blocks)
IMG_2976.JPG 818.. 908:
IMG_2977.JPG 909.. 992:
MVI_2978.MP4 993.. 1271:
1272.. 1274:
IMG_2979.JPG 1275.. 1355:
IMG_2980.JPG 1356.. 1427:
IMG_2981.JPG 1428.. 1520:
(VIDEO 2982 DELETED BEFORE IMAGE 2983) <- gap: 260 blocks!
IMG_2983.JPG 1781.. 1883:
IMG_2984.JPG 1521.. 1608: <- filled in gap between 2981 and 2983
(IMAGE 2985 DELETED BEFORE IMAGE 2986) <- gap: 62 blocks (was <- filled in gap between 2981 and 2983)
IMG_2986.JPG 1671.. 1772: <- filled in gap between 2981 and 2983
IMG_2987.JPG 1609.. 1670: <- filled in gap between 2981 and 2983
1773.. 1780: <- filled in gap between 2981 and 2983 (+Discontinuity in 1774)
1884.. 1884: <- next free after 2983
IMAGE 2988 DELETED BEFORE IMAGE 2989 (SHUTTING CAM DOWN BEFORE 2989) <- no gap
IMG_2989.JPG 1885.. 1953:
IMG_2990.JPG 1954.. 2015:
IMG_2991.JPG 2016.. 2079:
IMAGE 2992 DELETED BEFORE IMAGE 2993 (SHUTTING CAM DOWN BEFORE 2993) <- no gap
IMG_2993.JPG 2080.. 2140:
IMG_2994.JPG 2141.. 2192:
IMG_2995.JPG 2193.. 2301:
VIDEO 2996 DELETED BEFORE IMAGE 2997 (SHUTTING CAM DOWN BEFORE 2997) <- no gap
IMG_2997.JPG 2302.. 2387:
IMG_2998.JPG 2388.. 2494:
IMG_2975.JPG 2495.. 2588: <- After changing timestamps with exiftool (still 94 blocks)
MVI_2999.MP4 2870.. 2872:
2589.. 2869:
<- gap: 3 blocks
IMG_3000.JPG 2873.. 2901: <- small 28 blocks image (mostly black) that would easily fit in every gap
IMG_3001.JPG 2902.. 3000:
IMAGES 3002, 3003, 3004 DELETED BEFORE 3005 (WITHOUT SHUTTING DOWN) <- gap 292 blocks (~3 images)
IMG_3005.JPG 3293.. 3390:
IMAGES 3006, 3007, 3008 DELETED BEFORE 3009 (SHUTTING CAM DOWN BEFORE 3009)
IMG_3009.JPG 3001.. 3094: <- filled in the previous gap between 3001 and 3005
IMG_3010.JPG 3095.. 3188: <- filled in the previous gap between 3001 and 3005
IMG_3011.JPG 3189.. 3282: <- filled in the previous gap between 3001 and 3005
IMG_3012.JPG 3283.. 3292: <- filled in the previous gap between 3001 and 3005 (first part)
3391.. 3474: <- second part starts after 3005
IMG_3013.JPG 3475.. 3567: <- no gap
IMAGES 3014, 3015, 3016, 3017 DELETED BEFORE 30018 (WITHOUT SHUTTING DOWN)
IMG_3018.JPG 3927.. 4005: <- gap 359 blocks (~4 images)
IMG_3019.JPG 4006.. 4083: <- no gap
IMG_3020.JPG 4084.. 4163: <- no gap
IMG_3021.JPG 4164.. 4238: <- no gap
IMAGES 3022, 3023, 3024, 3025 DELETED BEFORE 3026 (SHUTTING CAM DOWN BEFORE 3026)
IMG_3026.JPG 3568.. 3667: <- filled in the gap between 3013 and 3018
IMG_3027.JPG 3668.. 3765: <- filled in the gap between 3013 and 3018
IMG_3028.JPG 3766.. 3865: <- filled in the gap between 3013 and 3018
IMG_3029.JPG 3866.. 3926: <- filled in the gap between 3013 and 3018 (first part)
4239.. 4278: <- second part starts after 3021
SWICTHING OFF THE CAMERA ALWAYS -> no gaps
IMG_3030.JPG 4279.. 4378:
IMG_3033.JPG 4379.. 4485:
IMG_3034.JPG 4486.. 4591:
IMG_3035.JPG 4592.. 4705:
IMG_3039.JPG 4706.. 4815:
IMG_3040.JPG 4816.. 4923:
IMG_3041.JPG 4924.. 5037:
CREATING GAPS (NOT SWITCHING OFF THE CAM), THEN SWITCHING OFF AND TAKE PHOTOS TO SEE IF GAPS ARE FILLED -> yes (but no older gaps)
IMG_3042.JPG 5038.. 5144:
IMAGE 3044 DELETED (NOT SHUTTING DOWN) <- gap 74 blocks
IMG_3044.JPG 5219.. 5324:
IMAGES 3045, 3046 DELETED (NOT SHUTTING DOWN) <- gap 142 blocks
IMG_3047.JPG 5467.. 5560:
IMAGES 3048, 3049, 3050 DELETED (NOT SHUTTING DOWN) <- gap 220 blocks
IMG_3051.JPG 5781.. 5876:
IMAGES 3052, 3053, 3054, 3055 DELETED (NOT SHUTTING DOWN) <- gap 300 blocks
IMG_3056.JPG 6177.. 6275:
NEXT IMAGES TAKEN AFTER CAMERA WAS SWITCHED OFF (i.e. gaps can be filled now)
IMG_3057.JPG 5145.. 5218: <- filled in the gap between 3042 and 3044 (74 blocks)
5325.. 5375: <- filled in the gap between 3044 and 3047 (51 blocks, second part)
IMG_3058.JPG 5376.. 5466: <- filled in the gap between 3044 and 3047 (91 blocks)
5561.. 5577: <- filled in the gap between 3047 and 3051 (17 blocks)
IMG_3059.JPG 5578.. 5682: <- filled in the gap between 3047 and 3051 (115 blocks)
IMG_3060.JPG 5683.. 5780: <- filled in the gap between 3047 and 3051 (98 blocks)
5877.. 5890: <- filled in the gap between 3051 and 3056 (14 blocks)
IMAGES 3061, 3062 REMOVED <- gap 142 blocks
CHECK IF GAPS ARE ALSO FILLED IF SEVERAL IMAGES ARE MADE -> yes
IMG_3063.JPG 6033.. 6131:
IMG_3064.JPG 6132.. 6176:
6276.. 6332: <- after 3056 (second part)
IMG_3065.JPG 6333.. 6435:
IMG_3066.JPG 6436.. 6539:
IMG_3067.JPG 6540.. 6642:
IMG_3068.JPG 6643.. 6756:
IMG_3069.JPG 6757.. 6863:
IMG_3070.JPG 6864.. 6978:
IMG_3071.JPG 6979.. 7094:
IMG_3072.JPG 7095.. 7211:
IMG_3073.JPG 5891.. 5998: <- filled in the gap between 3051 and 3056
IMG_3074.JPG 5999.. 6032: <- filled in the gap between 3051 and 3056
7212.. 7283: <- after 3072
IMG_3075.JPG 7284.. 7389:
Formatierungshinweise/-hilfe:
Spoiler
Folgende Regexp ist hilfreich um den Output von
filefrag -e -b32768 *.* > filefrag_out.txt
zu formatieren:File size of ((?:IMG|MVI)_\d{4}\.(?:JPG|MP4)) is \d+ \(\d+ blocks of 32768 bytes\)\n\s*ext: logical_offset: physical_offset: length: expected: flags:\n((?:\s*\d+:\s+\d+\.\.\s+\d+:\s+\d+\.\.\s+\d+:\s+\d+:\s+(?:\d+:\s+)?merged(?:\,eof)?\n)+)(?:IMG|MVI)_\d{4}\.(?:JPG|MP4): \d+ extents? found\nDer Rest geht rel. einfach indem man die wenigen zusätzlichen Zeilen von "fragmentierten" Dateien von Hand einrückt und dann mit einem Editor mit Block-Selektions/Editier-Modus (z.B. Kate) die überflüssigen Spalten löscht.
Graph:

Matlab/Octave-Skript:
Dateianhang: Filefrag.m (9 KB)
Zum Vergleich S120 32GB SD-Karte:
Original:
Dateianhang: Original_S120.txt (1 KB)
Formatiert:
IMG_3083.JPG 284437.. 284488:
287151.. 287208: Discontinuity: Block 3328 is at 18377664 (was 18207296)
287340.. 287366:
IMG_3084.JPG REMOVED BEFORE 3085 (WITHOUT SHUTTING CAM OFF) gap: 117 blocks
IMG_3085.JPG 287474.. 287487:
287367.. 287472: Discontinuity: Block 896 is at 18391488 (was 18399232)
287488.. 287497:
IMG_3086.JPG REMOVED BEFORE 3086 (SHUTTING CAM OFF AND ON) no gap
IMG_3087.JPG 287498.. 287588:
IMG_3088.JPG 287589.. 287628: (black img. 40 blocks - not filling gap)
Ergebnisse:
- Eine Lücke (in der Größe der gelöschten Datei) bleibt wenn man letztes Bild/Video löscht aber Kamera nicht ausschaltet
- Keine Lücke wenn man letztes Bild löscht und dann Kamera aus und wieder anschaltet (Voriges Bild und nächstes liegen "Sektor an Sektor")
Lücken werden nicht gefüllt, obwohl nächstes Bild hineinpasst (selbst die rel. großen Lücken durch gelöschte Videos werden nicht gefüllt). Das muss sich eigentlich spätestens ändern wenn die SD-Karte sonst nicht mehr genug Platz hat, aber noch ausreichend Lücken frei sind.
Bestehende Lücken werden gefüllt, selbst wenn kein einziges Bild komplett hineinpasst (Datei "fragmentiert").
Anm.: Erst durch die grafische Ausgabe habe ich bemerkt, dass tatsächlich fast alle Lücken gefüllt wurden, was ich vorher übersehen hatte.Die einzige nicht wieder befüllte Lücke ist interessanter Weise durch die Änderungen der EXIF-Daten mit.exiftool
entstanden (Bild 2975)exiftool
benennt die Original-Datei um (hier in IMG_2975.JPG_original). Diese Datei hatte ich übersehen - sie belegt unverändert den originalen Bereich. Es gibt also keinerlei unbelegte Lücken.- Auch bei drei gelöschten Bildern bleibt die Lücke, wenn man direkt das nächste Bild macht ohne die Cam auszuschalten
- Mit Ausschalten passierte etwas merkwürdiges: das nächste Bild wurde in die zuvor entstandene drei Bild große Lücke gesetzt und liegt jetzt vor dem Bild früheren Bild (andere frühere, zT. deutlich größere Lücken wurden nicht genutz)
Anmerkungen:
- Auch wenn
filefrag
für SD-Karten wohl nur die logische Struktur wiedergeben kann, so scheint die dann aber doch nicht ganz so weit von der physikalischen Wirklichkeit entfernt zu sein - immerhin werden auch "Discontinuities" ausgegeben (wohl defekte Bereiche) und die entsprechend entstehenden Fragmente (das könnte die "logische Ebene" auch komplett verschleiern). - Auch Mini-Lücken von nur einem Block/Cluster Länge werden gefüllt:
Unten: vorher letzte Bild-Datei, Mitte: 1-Block-Datei deren 1-Block großer Vergänger gelöscht wurde, Oben neues Bild (1-Block-Lücke wird genutzt)
Allerdings bleiben auf der SD-Karte genauso viele 1-Block-Lücken wie es CTG-Katalog-Dateien gibt (die jeweils auch einen Block lang sind).
Vermutung: Beim Anlegen der Datei wird diese (bzw. evtl. zunächst eine Temp-Datei) so oft überschrieben/geändert, dass dieser Bereich wegen Wear-Leveling der SD-Karte später ungenutzt bleibt.