GNU/Linux >> Tutoriels Linux >  >> Linux

CSI :Le cas des fichiers audio WAV manquants sur la carte SD FAT32

Attachez votre ceinture, car c'est un conte. Comme vous le savez peut-être, j'ai un joli podcast sur https://hanselminutes.com. Vous devriez écouter.

Récemment, grâce à un certain nombre d'événements aléatoires super cool, j'ai eu l'occasion d'interviewer l'acteur Chris Conner qui joue Poe sur Altered Carbon. Je suis un grand fan de la série mais surtout de Chris. Vous devriez regarder le spectacle parce que Poe est une joie et Chris possède chaque scène, et c'est avec un casting TRÈS fort.

Je fais habituellement mes interviews à distance pour le podcast, mais je voulais rencontrer Chris et passer du temps en personne, j'ai donc utilisé ma plate-forme de podcasting locale qui consiste en un enregistreur Zoom H6.

J'ai deux micros Shure XLR, un pied de micro et le Zoom. Le Zoom H6 est un très bon bourreau de travail et je l'ai utilisé plusieurs fois auparavant lors de l'enregistrement d'émissions. Ce n'est pas de la chirurgie de fusée, mais il faut toujours tester ses affaires.

Je ne voulais prendre aucun risque car j'ai acheté un pack de 5 cartes SD 32GIG de haute qualité. J'en ai mis un nouveau dans le Zoom, le Zoom a immédiatement reconnu la carte SD, j'ai donc fait un enregistrement local juste là et l'ai lu. Ça a l'air bien. Je l'ai lu localement sur le Zoom et j'ai pu entendre l'enregistrement du haut-parleur local du Zoom. Il enregistre le fichier en stéréo, une face pour chaque micro. Souvenez-vous en pour plus tard.

Je suis allé tôt à la rencontre et j'ai mis en place toute la configuration d'enregistrement. J'ai branché un moniteur local et testé à nouveau. Enregistre et lit localement. Cool. Chris se présente, nous avons enregistré une émission fantastique, il est fiancé et nous sommes maintenant meilleurs amis et nous allons à Chipotle, parler boutique, science-fiction, théâtre, IA, etc. Juste un après-midi de tueur tout autour.

Je rentre chez moi et je retire la carte SD et je la mets dans le PC et je vois ceci. Je vomis presque. Je deviens étourdi.

J'ai enregistré l'émission pendant plus de 730 épisodes sur 14 ans et je n'ai jamais perdu une émission. Je fais mes devoirs - comme vous devriez. Je suis sous le choc. D'accord, respire. Réglons le problème.

Cliquez avec le bouton droit sur le lecteur, vérifiez les propriétés. Respirer. Il s'agit d'un lecteur de 32 Go, mais Windows constate qu'il utilise 329 Mo . 300 mégas correspondent à la taille d'un fichier WAV à deux canaux de 30 minutes. Je le sais parce que j'ai regardé des fichiers de 300 Mo pour les dernières centaines d'émissions. Tout comme vous connaissez peut-être à peu près la taille d'un JPEG créé par votre appareil photo. C'est une chose que vous savez.

Temps de ligne de commande. Listez le répertoire racine. Vide. Vérifiez à nouveau mais "afficher tous les fichiers", bizarre, il y a un dossier Mac là-bas mais peut-être que la carte SD a été préformatée sur un Mac.

Point d'intrigue intéressant - Je n'ai pas formaté la carte SD. Je l'utilise tel qu'il est sorti de l'emballage d'Amazon. Il est venu préformaté et je l'ai accepté. Je l'ai testé et cela a fonctionné mais je n'ai pas "installé mon propre tapis". J'ai emménagé dans la maison telle quelle.

Que diriez-vous d'une petite action "montrez-moi tous les dossiers à partir d'ici" ? Identique à ce que j'ai vu dans l'Explorateur Windows. Le dossier racine a un autre sous-dossier qui est lui-même. C'est le dossier "Inception" sans Kick !

G:\>dir /a
Volume in drive G has no label.
Volume Serial Number is 0403-0201
Directory of G:\
03/12/2020 12:29 PM <DIR>
03/13/2020 12:44 PM <DIR> System Volume Information
0 File(s) 0 bytes
2 Dir(s) 30,954,225,664 bytes free
G:\>dir /s
Volume in drive G has no label.
Volume Serial Number is 0403-0201
Directory of G:\
03/12/2020 12:29 PM <DIR>
0 File(s) 0 bytes
Directory of G:\
03/12/2020 12:29 PM <DIR>
0 File(s) 0 bytes
IT GOES FOREVER

Ok, le lecteur pense qu'il y a des données mais je ne peux pas les voir. Je remets la carte SD dans le Zoom et j'essaie de la lire.

Le Zoom peut voir les dossiers et les fichiers ET l'interview elle-même. Et le Zoom peut le lire. Le Zoom est un appareil intégré avec une implémentation du système de fichiers FAT32 et il peut le lire, mais Windows ne le peut pas. Linux peut-il ? Un Mac peut-il ?

Réponse courte. Non.

Remarque : Étant donné que le Zoom peut voir et lire le fichier et qu'il dispose d'une prise casque/moniteur, je peux toujours brancher un câble de casque analogique 1/8" à une entrée 1/4" sur mon mélangeur Peavy PV6 et sauver l'audio avec de l'analogique. perte de qualité. Pourquoi ne pas utiliser la fonction de sortie audio USB du Zoom H6 et lire le fichier via un câble numérique, demandez-vous ? Parce que le lecteur audio Zoom ne le prend pas en charge. Il prend en charge trois modes - lecteur de carte SD (qui est un passage vers Windows et me montre les répertoires récursifs et aucun fichier), un passage audio qui permet au zoom de ressembler à un périphérique audio pour Windows mais n'affiche pas le SD comme lecteur ou permettre à la carte SD d'être lue sur l'interface numérique, ou son mode principal où elle enregistre localement.

C'est l'heure de la médecine légale, les enfants.

Nous avons une carte SD 32 - un lecteur de disque pour ainsi dire - qui est formatée en FAT32 standard, qui contient 300 à 400 Mo d'un fichier WAV à deux canaux (Chris et moi avions deux micros) qui a été enregistré localement par le Zoom H6 audio commander à nouveau et je ne veux pas trop le perdre ou le gâcher.

J'ai besoin de prendre une image octet par octet de ce qu'il y a sur la carte SD afin que je puisse la fouiller et "virtuellement" jouer avec, la changer, la réparer, réessayer, sans changer le physique.

"dd" est un utilitaire de ligne de commande avec une histoire riche et riche en histoire remontant à 45 ans. Même si cela signifie "Définition des données", ce sera toujours "lecteur de disque" dans ma tête.

Comment cloner une clé USB ou une carte SD dans un fichier IMG sous Windows

J'ai une copie de dd pour Windows qui me permet d'obtenir un flux/fichier octet par octet qui représente cette carte SD. Par exemple, je pourrais obtenir un appareil en USD entier :

dd if=\\?\Device\Harddisk1\Partition0 of=c:\temp\usb2.img bs=1M --size --progress

J'ai besoin de connaître le numéro de disque dur et le numéro de partition comme vous pouvez le voir ci-dessus. J'utilise habituellement diskpart pour cela.

>diskpart

Microsoft DiskPart version 10.0.19041.1

Copyright (C) Microsoft Corporation.
On computer: IRONHEART

DISKPART> list disk

Disk ### Status Size Free Dyn Gpt
-------- ------------- ------- ------- --- ---
Disk 0 Online 476 GB 0 B *
Disk 1 Online 1863 GB 0 B *
Disk 2 Online 3725 GB 0 B
Disk 3 Online 2794 GB 0 B *
Disk 8 Online 29 GB 3072 KB

DISKPART> select disk 8

Disk 8 is now the selected disk.

DISKPART> list part

Partition ### Type Size Offset
------------- ---------------- ------- -------
Partition 1 Primary 29 GB 4096 KB

On dirait que c'est la partition 1 du disque 8 sur mon système. Allons-y avant que je panique.

dd if=\\?\Device\Harddisk8\Partition1 of=c:\temp\ZOMG.img bs=1M --size --progress

IF et OF sont un fichier d'entrée et un fichier de sortie, et je le ferai pour toute la taille de la carte SD. C'est probablement exagéré, comme nous le verrons dans un instant.

Ce fichier a fini par être totalement volumineux et difficile à travailler. Rappelez-vous que je n'avais besoin que des 400 premiers mégas? Je vais couper juste cette partie.

dd if=ZOMG.img of=SmallerZOMG.img bs=1M count=400

Mais qu'est-ce que c'est ? N'oubliez pas qu'il s'agit d'une image d'un système de fichiers. C'est juste des octets dans un fichier. Ce n'est pas un fichier WAV ou un fichier CE ou un fichier CE. Je veux dire, c'est si nous décidons que c'est le cas, mais en fait, une façon d'y penser est que c'est une enveloppe mutilée qui est sombre quand je regarde à l'intérieur. Nous allons devoir tâtonner et voir si nous pouvons reconstruire une idée de ce que sont réellement les contenus.

Importation d'octets bruts d'un IMG vers Audition ou Audacity

Adobe Audition et Audacity sont des applications audio dotées d'une fonction "Importer des données RAW". Cependant, je dois dire à Audition comment l'interpréter. Il existe de nombreux fichiers WAV. Combien y avait-il de simples ? 1 canal? 2 canaux ? 16 bits ou 32 bits ? Beaucoup de questions.

Puis-je simplement importer ce tableau de 4 Go d'un système de fichiers et obtenir quelque chose ?

Ressemble à quelque chose. Vous pouvez voir que la première partie est probablement le début de la table de partition, les en-têtes du système de fichiers, etc. avant que les données audio n'apparaissent. Voici l'importation en tant que canal 2.

J'entends des voix mais elles ressemblent à des tamias et ne sont pas compréhensibles. Quelque chose est "doublé". Taux d'échantillonnage? Non, j'ai vérifié.

Voici 1 importation de données brutes de canal même si je pense qu'il y en a deux.

Maintenant CECI est intéressant. Je peux entendre le son à une vitesse normale lorsque nous parlons (après le préambule) MAIS ce n'est qu'une syllabe à la fois, puis une version plus silencieuse de la même syllabe se répète. Je ne veux pas (lire :je ne peux pas vraiment) réassembler une interview de 30 minutes à partir de syllabes, n'est-ce pas ?

Vous vous souvenez quand j'ai dit que le Zoom H6 enregistre un fichier à deux canaux avec un canal par micro ? Pas vraiment. Il enregistre UN FICHIER PAR CANAL. Un n'importe quoiL.wav et un n'importe quoiR.wav. J'ai complètement oublié!

Ce fichier "un canal" ci-dessus est en fait les octets tels qu'ils ont été déposés sur le disque, n'est-ce pas ? Il s'agit en fait de deux fichiers écrits simultanément , quelques kilo-octets à la fois, L,R,L,R,L,R. Et ici, je dis à mon logiciel audio de traiter ce "vidage du système de fichiers octet par octet" comme un seul fichier. C'est deux qui ont été faites en même temps.

C'est comme le Brundlefly. Comment puis-je le démêler? Eh bien, je ne peux plus traiter le tableau comme un fichier brut, ce n'est pas le cas. Et je veux (vraiment pas encore l'énergie) écrire ma propre petite application pour désentrelacer efficacement cette image. Je ne sais pas non plus si la taille du segment est parfaitement fiable ou si elle varie selon le zoom enregistré.

REMARQUE : Pete Brown a écrit sur les fichiers RIFF/WAV des enregistrements Sound Devices ayant un jeu de bits FAT32 incorrect. Ce n'est pas ça, mais c'est dans la même famille et cela vaut la peine d'être noté si jamais vous avez un problème avec un fichier Broadcast Wave corrompu ou crypté.

Tout en m'aidant à résoudre ce problème, Pete Brown a tweeté un vidage hexadécimal de la table des répertoires afin que vous puissiez voir les répertoires Zoom0001, Zoom0002, etc. dans l'image.

Permettez-moi de passer à Ubuntu sur ma machine Windows exécutant WSL. Ici, je peux exécuter fdisk et avoir une idée de ce qu'est cette image de la mauvaise carte SD. Rappelez-vous également que j'ai piraté les premiers 0-400 Mo, mais ce fichier IMG pense qu'il s'agit d'un lecteur de 32 Go, car c'est le cas. C'est juste qu'il a été agressivement tronqué.

$ fdisk -u -l SmallerZOMG.img
Disk SmallerZOMG.img: 400 MiB, 419430400 bytes, 819200 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x00000000

Device Boot Start End Sectors Size Id Type
SmallerZOMG.img1 8192 61157375 61149184 29.2G c W95 FAT32 (LBA)

Peut-être que je peux "monter" cet IMG ? Je crée un dossier sur Ubuntu/WSL2 appelé ~/recovery. Yikes, ok il n'y a rien là-bas. Je peux prendre la taille du secteur 512 fois le bloc de départ de 8192 et l'utiliser comme décalage.

sudo mount -o loop,offset=4194304 SmallerShit.img recover/
$ cd recover/
$ ll
total 68
drwxr-xr-x 4 root root 32768 Dec 31 1969 ./

Ali Mosajjal pense peut-être "qu'ils ont réécrit la définition de la structure FAT32 et n'ont pas utilisé de bibliothèque standard et ont fait une erreur", et Leandro Pereria postule "ce qui pourrait arriver, c'est que la somme de contrôle LFN (nom de fichier long) est invalide et ils n'ont pas pas la peine de remplir le nom de fichier 8.3 ... pour que les implémentations conformes de VFAT essaient de regarder le nom de secours 8.3, ce ne sont que des espaces et comprennent "tout est rempli, continuez."

Ali a suggéré d'exécuter dosfsck sur l'image montée et vous pouvez voir à nouveau que les fichiers sont là, mais il y a comme 3 entrées root ? Notez que j'ai fait un chat de /proc/mounts pour voir la boucle sur laquelle mon img est monté afin que je puisse m'y référer dans la commande dosfsck.

$ sudo dosfsck -w -r -l -a -v -t /dev/loop3
fsck.fat 4.1 (2017-01-24)
Checking we can access the last sector of the filesystem
Boot sector contents:
System ID " "
Media byte 0xf8 (hard disk)
512 bytes per logical sector
32768 bytes per cluster
1458 reserved sectors
First FAT starts at byte 746496 (sector 1458)
2 FATs, 32 bit entries
3821056 bytes per FAT (= 7463 sectors)
Root directory start at cluster 2 (arbitrary size)
Data area starts at byte 8388608 (sector 16384)
955200 data clusters (31299993600 bytes)
63 sectors/track, 255 heads
8192 hidden sectors
61149184 sectors total
Checking file /
Checking file /
Checking file /
Checking file /System Volume Information (SYSTEM~1)
Checking file /.
Checking file /..
Checking file /ZOOM0001
Checking file /ZOOM0002
Checking file /ZOOM0003
Checking file /ZOOM0001/.
Checking file /ZOOM0001/..
Checking file /ZOOM0001/ZOOM0001.hprj (ZOOM00~1.HPR)
Checking file /ZOOM0001/ZOOM0001_LR.WAV (ZOOM00~1.WAV)
Checking file /ZOOM0002/.
Checking file /ZOOM0002/..
Checking file /ZOOM0002/ZOOM0002.hprj (ZOOM00~1.HPR)
Checking file /ZOOM0002/ZOOM0002_Tr1.WAV (ZOOM00~1.WAV)
Checking file /ZOOM0002/ZOOM0002_Tr2.WAV (ZOOM00~2.WAV)
Checking file /ZOOM0003/.
Checking file /ZOOM0003/..
Checking file /ZOOM0003/ZOOM0003.hprj (ZOOM00~1.HPR)
Checking file /ZOOM0003/ZOOM0003_Tr1.WAV (ZOOM00~1.WAV)
Checking file /ZOOM0003/ZOOM0003_Tr2.WAV (ZOOM00~2.WAV)
Checking file /System Volume Information/.
Checking file /System Volume Information/..
Checking file /System Volume Information/WPSettings.dat (WPSETT~1.DAT)
Checking file /System Volume Information/ClientRecoveryPasswordRotation (CLIENT~1)
Checking file /System Volume Information/IndexerVolumeGuid (INDEXE~1)
Checking file /System Volume Information/AadRecoveryPasswordDelete (AADREC~1)
Checking file /System Volume Information/ClientRecoveryPasswordRotation/.
Checking file /System Volume Information/ClientRecoveryPasswordRotation/..
Checking file /System Volume Information/AadRecoveryPasswordDelete/.
Checking file /System Volume Information/AadRecoveryPasswordDelete/..
Checking for bad clusters.

Nous pouvons les voir, mais nous ne pouvons pas les atteindre avec le pilote de système de fichiers vfat sous Linux ou avec Windows.

L'utilitaire DUMP.exe dans le cadre de mtools pour Windows est incroyable, mais je ne parviens pas à comprendre ce qui ne va pas dans la table de fichiers FAT32. Je peux exécuter minfo sur la commande Linux land en lui disant de sauter 8192 secteurs avec le modificateur @@offset :

$ minfo -i ZOMG.img@@8192S
device information:
===================
filename="ZOMG.img"
sectors per track: 63
heads: 255
cylinders: 3807

mformat command line: mformat -T 61149184 -i ZOMG.img@@8192S -h 255 -s 63 -H 8192 ::

bootsector information
======================
banner:" "
sector size: 512 bytes
cluster size: 64 sectors
reserved (boot) sectors: 1458
fats: 2
max available root directory slots: 0
small size: 0 sectors
media descriptor byte: 0xf8
sectors per fat: 0
sectors per track: 63
heads: 255
hidden sectors: 8192
big size: 61149184 sectors
physical drive id: 0x80
reserved=0x0
dos4=0x29
serial number: 04030201
disk label=" "
disk type="FAT32 "
Big fatlen=7463
Extended flags=0x0000
FS version=0x0000
rootCluster=2
infoSector location=1
backup boot sector=6

Infosector:
signature=0x41615252
free clusters=944648
last allocated cluster=10551

Ok, nous avons maintenant trouvé une AUTRE façon de monter ce système de fichiers corrompu. Avec mtools, nous utiliserons mdir pour lister le répertoire racine. Notez que quelque chose ne va pas assez pour que je doive définir mtools_skip_check=1 sur ~/.mtoolsrc et continuer.

$ mdir -i ZOMG.img@@8192S ::
Total number of sectors (61149184) not a multiple of sectors per track (63)!
Add mtools_skip_check=1 to your .mtoolsrc file to skip this test
$ pico ~/.mtoolsrc
$ mdir -i ZOMG.img@@8192S ::
Volume in drive : is
Volume Serial Number is 0403-0201
Directory for ::/

<DIR> 2020-03-12 12:29
1 file 0 bytes
30 954 225 664 bytes free

Même résultat. Je peux exécuter mdu et ne voir que quelques dossiers. Notez que les ZOOMxxxx manquent ici

$ mdu -i ZOMG.img@@8192S ::
::/System Volume Information/ClientRecoveryPasswordRotation 1
::/System Volume Information/AadRecoveryPasswordDelete 1
::/System Volume Information 5
::/ 6

Maintenant, idéalement, je veux réaliser deux choses ici.

  • Sachez POURQUOI il est cassé et exactement CE QUI ne va pas.
    • Il y a un répertoire racine sans nom ici et je n'ai pas la patience ni les compétences nécessaires pour effectuer manuellement un hexdump et le corriger.
  • Pouvoir copier les fichiers "normalement" en montant l'IMG et, enfin, en les copiant.

MISE À JOUR #1 - Je suis de retour après quelques minutes de réflexion.

Si j'utilise mmls de Sleuthkit, je peux le voir.

$ mmls HolyShit.img
DOS Partition Table
Offset Sector: 0
Units are in 512-byte sectors

Slot Start End Length Description
000: Meta 0000000000 0000000000 0000000001 Primary Table (#0)
001: ------- 0000000000 0000008191 0000008192 Unallocated
002: 000:000 0000008192 0061157375 0061149184 Win95 FAT32 (0x0c)

Si je fais à nouveau le décalage 512*8192 et visualise la table FAT32 dans Hexdump/xxd comme ceci :

xxd -seek 4194304 ZOMG.img  | more
00400000: eb00 9020 2020 2020 2020 2000 0240 b205 ... ..@..
00400010: 0200 0000 00f8 0000 3f00 ff00 0020 0000 ........?.... ..
00400020: 0010 a503 271d 0000 0000 0000 0200 0000 ....'...........
00400030: 0100 0600 0000 0000 0000 0000 0000 0000 ................
00400040: 8000 2901 0203 0420 2020 2020 2020 2020 ..)....
00400050: 2020 4641 5433 3220 2020 0000 0000 0000 FAT32 ......
00400060: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00400070: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00400080: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00400090: 0000 0000 0000 0000 0000 0000 0000 0000 ................
004000a0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
004000b0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
004000c0: 0000 0000 0000 0000 0000 0000 0000 0000 ................

Je peux voir que j'ai cherché au bon endroit, car la chaîne FAT32 traîne juste. Je peux peut-être découper ce tableau et le visualiser dans un meilleur outil graphique.

Je pourrais saisir un morceau raisonnable (lire :arbitraire) de ce décalage et le mettre dans un très petit fichier gérable :

dd if=ZOMG.img ibs=1 skip=4194304 count=64000 > another.img

Et puis chargez-le dans dump.exe sous Windows, ce qui est vraiment un sacré outil. Il semble penser qu'il y a plusieurs entrées racine FAT (ce qui pourrait expliquer pourquoi je vois cette étrange racine fantôme). Notez également les parties "devrait être".

FAT Root Entry (non LFN) (0x00000000)
Name: ···
Extension:
Attribute: 0x00
FAT12:reserved: 02 40 B2 05 02 00 00 00 00 F8
FAT32:reserved: 02
FAT32:creation 10th: 0x40
FAT32:creation time: 0x05B2
FAT32:creation date: 0x0002
FAT32:last accessed: 0x0000
FAT32:hi word start cluster: 0xF800
Time: 0x0000 (00:00:00) (hms)
Date: 0x003F (1980/01/31) (ymd)
Starting Cluster: 0x00FF (0xF80000FF)
File Size: 8192

FAT Root Entry (non LFN) (0x00000020)
Name: ····'···
Extension: ···
Attribute: 0x00
FAT12:reserved: 02 00 00 00 01 00 06 00 00 00
FAT32:reserved: 02
FAT32:creation 10th: 0x00
FAT32:creation time: 0x0000
FAT32:creation date: 0x0001
FAT32:last accessed: 0x0006
FAT32:hi word start cluster: 0x0000
Time: 0x0000 (00:00:00) (hms)
Date: 0x0000 (1980/00/00) (ymd)
Starting Cluster: 0x0000 (0x00000000) <--- should be 0x0002 or higher.
File Size: 0

FAT Root Entry (non LFN) (0x00000040)
Name: ··)····
Extension:
Attribute: 0x20 Archive
FAT12:reserved: 20 20 20 20 20 20 46 41 54 33
FAT32:reserved: 20
FAT32:creation 10th: 0x20
FAT32:creation time: 0x2020
FAT32:creation date: 0x2020
FAT32:last accessed: 0x4146
FAT32:hi word start cluster: 0x3354
Time: 0x2032 (04:01:18) (hms)
Date: 0x2020 (1996/01/00) (ymd)
Starting Cluster: 0x0000 (0x33540000)
File Size: 0

FAT Root Entry (non LFN) (0x00000060)
Name: ········
Extension: ···
Attribute: 0x00
FAT12:reserved: 00 00 00 00 00 00 00 00 00 00
FAT32:reserved: 00
FAT32:creation 10th: 0x00
FAT32:creation time: 0x0000
FAT32:creation date: 0x0000
FAT32:last accessed: 0x0000
FAT32:hi word start cluster: 0x0000
Time: 0x0000 (00:00:00) (hms)
Date: 0x0000 (1980/00/00) (ymd)
Starting Cluster: 0x0000 (0x00000000) <--- should be 0x0002 or higher.
File Size: 0

FAT Root Entry (non LFN) (0x00000080)
Name: ········
Extension: ···
Attribute: 0x00
FAT12:reserved: 00 00 00 00 00 00 00 00 00 00
FAT32:reserved: 00
FAT32:creation 10th: 0x00
FAT32:creation time: 0x0000
FAT32:creation date: 0x0000
FAT32:last accessed: 0x0000
FAT32:hi word start cluster: 0x0000
Time: 0x0000 (00:00:00) (hms)
Date: 0x0000 (1980/00/00) (ymd)
Starting Cluster: 0x0000 (0x00000000) <--- should be 0x0002 or higher.
File Size: 0

FAT32 Info Block (0x00000000)
sig: 0x209000EB (' ···') [1] <--- should be 0x41615252.
reserved:
00000004 20 20 20 20 20 20 20 00-02 40 B2 05 02 00 00 00 .........@......
00000014 00 F8 00 00 3F 00 FF 00-00 20 00 00 00 10 A5 03 ....?...........
00000024 27 1D 00 00 00 00 00 00-02 00 00 00 01 00 06 00 '...............
00000034 00 00 00 00 00 00 00 00-00 00 00 00 80 00 29 01 ..............).
00000044 02 03 04 20 20 20 20 20-20 20 20 20 20 20 46 41 ..............FA
00000054 54 33 32 20 20 20 00 00-00 00 00 00 00 00 00 00 T32.............

La partie la plus déroutante est que la signature FAT32 - le nombre magique est toujours supposé être 0x41615252. Google cela. Tu verras. C'est une signature codée en dur, mais j'ai peut-être le mauvais décalage et à ce moment-là, tous les paris sont annulés.

Alors j'ai ça ? Je peux rechercher un fichier binaire pour les valeurs Hex avec une combinaison de xxd et grep. Notez l'échange d'octets :

xxd another.img  | grep "6141"
00000200: 5252 6141 0000 0000 0000 0000 0000 0000 RRaA............
00000e00: 5252 6141 0000 0000 0000 0000 0000 0000 RRaA............

Juste avant c'est 55 AA qui sont les deux derniers octets de la table de partition de 64 octets. mm

Ai-je maintenant deux blocs d'informations FAT32 et trois entrées racine ? Je suis perdu. Je veux vider les entrées du répertoire.

Que dit fsstat à propos du répertoire racine ?

File System Layout (in sectors)
Total Range: 0 - 61149183
* Reserved: 0 - 1457
** Boot Sector: 0
** FS Info Sector: 1
** Backup Boot Sector: 6
* FAT 0: 1458 - 8920
* FAT 1: 8921 - 16383
* Data Area: 16384 - 61149183
** Cluster Area: 16384 - 61149183
*** Root Directory: 16384 - 16447

Je mettrai à jour cette partie au fur et à mesure que j'en apprendrai davantage. Je suis épuisé. Quelqu'un lira probablement ceci et sera comme "tu es idiot, cherche ICI" et il y a l'octet qui ne va pas dans le système de fichiers. Ce LFN (nom de fichier long) n'a pas de nom court, etc." et alors je le saurai.

MISE À JOUR #2 :

J'ai skypé avec Ali et nous pensons savoir ce qui se passe. Il m'a suggéré de formater la carte SD, d'enregistrer les 3 mêmes émissions (deux WAV de test et un réel), puis de créer une image du BON disque pour supprimer les variables. Gars intelligent!

Nous avons ensuite pris les 12 premiers Mo environ de GOOD.img et de BAD.img et les avons transmis via xxd à HEX, puis avons utilisé Visual Studio Code pour les différencier.

Nous pouvons maintenant visualiser à gauche à quoi ressemble une bonne structure de répertoires et à droite à quoi ressemble une mauvaise. On dirait que j'ai deux répertoires racine récursifs avec un espace pour le nom.

Maintenant, si nous le voulions, nous pourrions réécrire manuellement une nouvelle entrée de répertoire complète et lui attribuer nos fichiers orphelins.

C'est ce que je ferais si j'étais engagé pour récupérer des données.

7zip toutes les choses

C'est là que ça devient bizarre et c'est devenu tellement bizarre que Pete Brown et moi étions comme, BIEN. C'EST INCROYABLE.

Sur un coup de tête, j'ai cliqué avec le bouton droit sur le fichier IMG, je l'ai ouvert dans 7zip et j'ai vu ceci.

Vous voyez ce répertoire qui n'est rien ? Un espace? Un quelque chose. Il n'a pas de nom abrégé. C'est une entrée invalide mais 7zip est cool avec ça. Entrons. Observez le chemin et le \\. C'est un séparateur de chemin, rien, et un autre séparateur de chemin. Ce n'est pas autorisé ou OK, mais encore une fois, 7zip est cool.

J'ai fait glisser les fichiers et ils vont bien! La journée est sauvée.

Le moral? Il y en a quelques-uns que je peux voir.

  • Reformatez les cartes SD aléatoires que vous obtenez d'Amazon spécifiquement sur l'appareil que vous allez utiliser.
  • FAT en tant que spécification contient un tas de choses que différents "pilotes" (Windows, VFAT, etc.) peuvent ignorer ou esquiver ou tout simplement ne pas implémenter.
  • J'ai 85 % des connaissances dont j'ai besoin pour parler de quelque chose comme ça, mais les 15 derniers % sont un mur de briques. J'aurais besoin de plus de patience et d'en savoir plus à ce sujet.
  • Savoir comment procéder est utile pour tout ingénieur. C'est l'équivalent de savoir comment conduire un levier de vitesse en cas d'urgence, même si vous utilisez habituellement Lyft.
    • Je ne suis clairement pas un expert, mais j'ai un modèle mental qui inclut (mais sans s'y limiter) les octets sur le support physique, le système de fichiers lui-même, les tables de fichiers, les tables de répertoires, les tables de partitions, comment ils fonctionnent un peu sur Linux et Windows.
    • Je me heurte clairement à un mur car je sais ce que je veux faire, mais je ne suis pas sûr de la prochaine étape.
      • Il y a une mauvaise entrée de table de répertoire. Je veux le renommer et m'assurer qu'il est complet et conforme aux spécifications.
  • 7zip est incroyable. Essayez-le d'abord pour pratiquement tout.

Idéalement, je serais en mesure de mettre à jour ce message avec exactement quel octet est erroné et comment le réparer. Merci à Ali, Pete et Leandro d'avoir joué avec moi !

Tes pensées? (Si vous êtes arrivé jusqu'ici, l'IMG tronqué de la SD de 32 Go est ici (500 Mo), mais vous devrez peut-être le compléter avec des zéros pour créer des outils comme celui-ci.

Oh, et écoutez https://hanselminutes.com/ car l'interview était géniale et c'est maintenant !

Parrain : Avez-vous déjà essayé de développer dans Rider ? Cet IDE multiplateforme rapide et riche en fonctionnalités améliore votre code pour les applications .NET, ASP.NET, .NET Core, Xamarin et Unity sous Windows, Mac et Linux.


Linux
  1. Comment changer l'extension de plusieurs fichiers ?

  2. Lister les fichiers accessibles par un programme ?

  3. Comment imprimer le nom des fichiers manquants dans un dossier ?

  4. Où vont les fichiers lorsque la commande Rm est émise ?

  5. L'Alsamixer de Pulse Audio ?

Explorer le système de fichiers Linux /proc

Comment rechercher des fichiers avec la commande fd sous Linux

5 façons d'utiliser la commande move sous Linux

PHP-FFMpeg :Autoriser plusieurs fichiers d'entrée (Ajouter de l'audio à la vidéo)

15 exemples impressionnants pour manipuler des fichiers audio à l'aide de Sound eXchange (SoX)

Définition de la variable TEXINPUTS