# Clonage des cartes SD (au bureau)

Operations internes — production en serie

Cloner, flasher, verifier et reparer les cartes SD avant expedition. Tout en ligne de commande depuis un Mac.

--- ## Image de reference | Fichier | Taille | Statut | |---------|:------:|--------| | `smarteye-dev-backup.img` | ~54 Go | **Fonctionnelle** — validee le 22/02/2026 | Localisation Mac : `/Users/rachid/jetson_backup/smarteye-dev-backup.img` !!! warning "Sauvegarde obligatoire" Cette image doit exister en **au moins 2 exemplaires** : - Sur le Mac (disque local ou externe) - Sur le serveur OVH : `scp smarteye-dev-backup.img debian@lucas.unigest.fr:/home/debian/backups/` --- ## 1 — Flasher une carte SD (production) C'est l'operation principale. Pour chaque nouveau client, on flashe une carte SD neuve depuis l'image de reference. ### Materiel - Carte SD neuve **SanDisk Extreme Pro** 64 Go minimum - Lecteur de carte SD (integre ou USB) ### Procedure ```bash # Identifier la carte SD diskutil list # Reperer la carte par sa taille et ses partitions # Le lecteur integre du Mac peut apparaitre comme "internal, physical", c'est normal # Demonter sans ejecter diskutil unmountDisk /dev/diskN # Flasher (remplacer N par le bon numero) sudo dd if=/Users/rachid/jetson_backup/smarteye-dev-backup.img of=/dev/rdiskN bs=4m status=progress # Ejecter proprement diskutil eject /dev/diskN ``` !!! danger "Verifier le numero de disque" Toujours verifier **deux fois** le `/dev/diskN` avant de lancer `dd`. Se tromper de disque = ecraser le disque du Mac. Le `r` devant `diskN` (→ `rdiskN`) utilise le mode raw, **5x plus rapide**. Duree : ~20-25 min pour 54 Go a ~39 MB/s. ### Verification rapide Apres le flash, avant d'ejecter : ```bash diskutil list /dev/diskN ``` Resultat attendu : une **GUID_partition_scheme** avec ~14 partitions Linux + 1 partition EFI. C'est la structure standard du Jetson Nano. ### Production en serie Pour flasher plusieurs cartes a la suite : 1. Flasher la carte → ejecter 2. Etiqueter la carte (numero de serie / nom client) 3. Inserer la carte dans un Jetson 4. Inserer la carte suivante dans le lecteur → recommencer La box part chez le client **carte SD deja inseree, prete a brancher**. --- ## 2 — Creer une nouvelle image de reference (backup) Quand SmartEye evolue (nouvelle version YOLO, corrections, etc.), il faut creer une nouvelle image de reference depuis le Jetson de dev. ### Procedure Eteindre le Jetson proprement, retirer la carte SD, l'inserer dans le lecteur du Mac. ```bash # Identifier la carte SD diskutil list # Demonter diskutil unmountDisk /dev/diskN # Cloner bit-a-bit sudo dd if=/dev/rdiskN of=/Users/rachid/jetson_backup/smarteye-dev-backup.img bs=4m status=progress # Ejecter diskutil eject /dev/diskN ``` Duree : ~20-25 min pour une carte 64 Go. ### Nommage et archivage ``` smarteye-dev-backup-2026-02-22.img ← actuelle (validee) smarteye-dev-backup-2026-03-XX.img ← future ``` Conserver les anciennes images. Copier sur OVH : ```bash scp smarteye-dev-backup.img debian@lucas.unigest.fr:/home/debian/backups/ ``` --- ## 3 — Verifier une image (sans carte SD) Pour inspecter une image `.img` sans la flasher : ```bash hdiutil attach -nomount -readonly /Users/rachid/jetson_backup/smarteye-dev-backup.img ``` Resultat attendu : ``` /dev/disk6 GUID_partition_scheme /dev/disk6s1 EFI /dev/disk6s2 - s15 Linux Filesystem (multiple) ``` Detacher apres verification : ```bash hdiutil detach /dev/disk6 ``` --- ## 4 — Reparer une image corrompue Si une carte SD ne boot plus (erreur `mmcblk0p1 not found` sur le Jetson), la table de partitions est corrompue. Les donnees sont generalement encore intactes. ### Diagnostic sur le Jetson Si le Jetson tombe dans un shell d'urgence (`bash-5.1#`) : ```bash ls /dev/mmcblk0* ``` - `mmcblk0` present mais pas `mmcblk0p1` → table de partitions corrompue → reparable - `mmcblk0` absent → probleme hardware (carte morte ou mauvais contact) ### Etape 1 : testdisk (retrouver les partitions) ```bash brew install testdisk testdisk /Users/rachid/jetson_backup/smarteye-dev-backup.img ``` 1. **Create** → nouveau log 2. Selectionner l'image → **Proceed** 3. Type de table → **Intel** 4. **Analyse** → **Quick Search** 5. testdisk retrouve les partitions (FAT32 + Linux) 6. **Entree** pour continuer → **Write** → **Y** !!! warning "testdisk ne suffit pas" testdisk ecrit une table MBR. Le Jetson Nano utilise une table **GPT** avec ~14 partitions. Il faut enchainer avec gdisk. ### Etape 2 : gdisk (restaurer la GPT) ```bash brew install gptfdisk gdisk /Users/rachid/jetson_backup/smarteye-dev-backup.img ``` gdisk detecte le conflit : ``` Found valid MBR and corrupt GPT. Which do you want to use? 1 - MBR 2 - GPT 3 - Create blank GPT ``` 1. Taper **`2`** (GPT — le header principal est souvent intact) 2. Taper **`x`** (menu expert) 3. Taper **`e`** (relocate backup structures to end of disk) 4. Taper **`m`** (retour menu principal) 5. Taper **`w`** → **Y** Si gdisk refuse avec "Secondary partition table overlaps the last partition by N blocks" : ```bash # Dans un AUTRE terminal, agrandir l'image dd if=/dev/zero bs=512 count=200 >> /Users/rachid/jetson_backup/smarteye-dev-backup.img ``` Puis **quitter** gdisk (`q`) et le **relancer** (il doit recharger la nouvelle taille). Recommencer : 2 → x → e → m → w → Y. ### Verification finale ```bash hdiutil attach -nomount -readonly /Users/rachid/jetson_backup/smarteye-dev-backup.img ``` GUID_partition_scheme avec ~14 partitions = image reparee. Flasher sur une carte SD et tester le boot. --- ## Fiabilite en production !!! danger "Cartes SD : prototypage seulement" Les cartes SD ont une duree de vie limitee en ecriture. Docker + YOLO = beaucoup d'ecritures. Pour une production a plusieurs centaines de clients : - **SSD SATA via USB 3.0** pour le systeme (fiabilite industrielle) - **Carte SD uniquement pour le boot initial** (lecture seule) - **Backup automatique** des configs vers le serveur OVH | Composant | Cout unitaire | |-----------|:------------:| | SD 32 Go (boot) | ~10 EUR | | SSD 120 Go SATA | ~15 EUR | | Adaptateur USB 3.0 → SATA | ~8 EUR | | **Total par box** | **~33 EUR** | --- ## Etape suivante → [Installation chez le client](installation-client.md)