Os.sync remplit carte SD ?


#1

Bonjour,

J’ai une question concernant la fonction os.sync et un problème de carte SD pleine.

J’ai une clé USB connectée à mon raspberry sur laquelle je stocke périodiquement des données.
Je me suis retrouvé avec une carte SD qui ne démarre plus car pleine au niveau de media/pi/…ce qui correspond au dossier de ma clé USB. Concrètement il reste de la place sur la clé mais plus sur la carte SD quand ça plante.
A chaque fois que je copie un fichier (de la RAM) sur ma clé je fais un os.sync, est-ce que ça peut être la source du problème ?

Est-ce que c’est cette fonction ferait planté le truc ? Il me semblait que os.sync forçait les données du disque à se synchroniser sur la clé ?
Ce que je constate c’est qu’en fonctionnement le root ne’augmente pas seulement le dossier media…(donc celui de la clé USB)
Bref j’ai du mal à saisir.


#2

Bonjour,

Peux-tu poster le résultat des commandes lsblket df -h pour que l’on comprenne mieux.
Comment fait-tu la copie d’un fichier de la RAM ?

A+


#3

J’ai créé un répertoire en RAM en éditant le fichier fstab (tmpfs…)
Les fichiers que je prends sont des images issues d’une webcam, je les stocke dans ce répertoire en RAM.
Je les assemble en un fichier vidéo toutes les 5 minutes, que je stocke aussi dans ce répertoire en RAM, je fais une copie du fichier sur ma clé (avec la fonction shutil.copy2 de la lib shutil), je fais un os.sync puis efface le fichier de la RAM.

Le répertoire en RAM est le tmpfs home/pi/ d’une taille de 51200 (désolé j’ai volontairement caché le nom du répertoire entier, mais vous aurez compris qu’il est sur le bureau.)
On peut également voir la clé /media/pi/USB DISK. (sur la carte SD pleine, j’ai travaillé avec une clé de 64GB)

Le screenshot est fait sur un système OK.
Sur une carte SD pleine, le dev/root est plein et c’est en grande majorité le dossier media/pi qui prend de la place. Je vais regarder combien de GB il y a de pris dans ce dossier.

2019-02-04-182122_1824x984_scrot


#4

Bonjour,

Merci pour ces précisions, je cerne bien mieux la problématique.

J’ai l’impression que les fichiers ne sont pas copiés sur la clé car le code Python interprète mal la destination. En général, je n’aime pas trop les accents ni les espace dans le nom des fichiers sous Python. Ne serait-il pas possible de reformater la clé USB en USB_DISK ?

Il faudrait lancer l’appli est passer quelques commandes df pour voir la progression du remplissage au fur et à mesure.

Je note aussi que le tmpfs ne fait que 50 Mo, est-ce suffisant ?

A+


#5

Pour répondre aux questions :

  • Les fichiers se trouvent bien sur la clé USB.
  • Je n’utilise ni accent ni espace dans les noms de fichiers ou dossier
  • le tmpfs de 50Mo suffit, les vidéo font environ 2 Mo.
  • j’ai fait le test avec la commande df pendant le remplissage.Le dossier Dev/Root ne bouge pas et le dossier media/pi/USB DISK augmente à chaque stockage d’une vidéo.

Ce que vous dites, c’est que sur ma carte pleine, il est possible que la copie ce soit mal passée ? et que du coup les fichiers soient restées sur le dev/root ?


#6

Bonjour,

Merci pour la réponse aux questions.

Je ne fait que des suppositions. Il faut cerner le problème de remplissage. Je ne vois toujours pas quel filesystem se rempli.

Tu dit qu’il ne reste plus de place sur la carte SD quand ça plante. Avec df on doit voir un système de fichier plein à 100%, c’est bien ça ? Ou bien c’est un code erreur remonté par l’appli ou une log ?

A+


#7

Alors j’ai testé en remplissant une clé USB, quand la clé est pleine ça ne rempli pas le root…donc ça ne vient vraiment pas de là.

Mais je pense avoir cerné le problème.

En fait quand je connecte une clé USB, un dossier apparaît dans media/pi avec le nom de la clé. Pour détecter ma clé USB je me base sur ça, c’est à dire que s’il y a un dossier dans media/pi c’est qu’il y a une clé USB (autre que le dossier SETTINGS qui est toujours la par défaut) et je stocke dans ce dossier.
Mais parfois je change de clé, et sur la carte SD plantée il y a avait plusieurs dossiers dans media/pi alors qu’une seule clé USB de branchée. On dirait qu’il y avait des dossiers résiduels des précédentes clés connectées(choses que je n’avais jamais constaté alors que j’avais essayé), j’ai détecté le premier dossier venu (malheureusement pas la clé connecté) et j’ai stocké dessus, du coup ça s’est retrouvé sur la carte SD…et paf la carte se remplit
C’est plausible comme scénario ?

Du coup questions :

  • C’est normal ces dossiers résiduels de clé USB qui peuvent persistaient sur la carte SD ?
  • Comment puis-je m’en affranchir ? j’imagine que finalement je m’y prend mal pour détecter une clé USB…

En tout cas merci pour votre aide


#8

Bonjour,

Vraiment oui.

C’est possible si la clé n’a pas été démontée correctement par le système, que le répertoire de montage persiste.

Pour être plus sûr du point de montage et il y a plusieurs approches à étudier/tester

  • Ajouter une commande par UUID de clé USB dans /etc/fstab
  • Installer/configurer usbmount ?
  • Créer des règles udev
  • Essayer de jouer avec la commande citée plus haut lsblk et/ou blkid

Bonne bidouilles.

A+


#9

Info supplémentaires:

Dans ma carte SD pleine dans media/pi j’ai 3 dossiers :slight_smile:

  • Kingstone : une clé USB qui étaient branché quelques minutes au début pour un test mais qui n’était pas présente au moment du plantage
  • Key 3 : la clé USB présente au moment du plantage
  • Key 31: là je ne sais pas ce que c’est ce dossier…

Le dossier Key 31 est vide.
Les dossiers Kingstone et Key3 font la même taille et ont les mêmes fichiers à l’intérieur. 500 fichiers dont le dernier qui est inutilisable, ils font tous environ 23Mo et ce dernier fait 15Mo.

J’ai du mal a comprendre comment je peux avoir les mêmes fichiers dans Kingstone et Key3…

Sinon est-il possible que la clé soit limité en nombre de fichiers ?


#10

Question:

J’arrive à détecter ma clé USB et le nom de son dossier en passant par un “lsblk”. Je détecte la présence d’un “sda1”.

Si j’ai un dossier résiduel dans media/pi j’imagine que si cette commande affiche le dossier résiduel ce sera en tant que “mmcblk” et non en tant que “sda1” ?


#11

Peut être, il faut tester, mais j’y crois pas trop. mmcblk est un nom des systèmes de fichiers de la carte SD et non d’une clé USB.

Vérifier que l’un n’est pas un lien symbolique sur l’autre.
Dans tous les cas, si les fichiers sont déjà copiés sur une carte, il faut faire du ménage et tout supprimer.

Une question de mon coté
Le programme Python est-il toujours arrêté avant de retirer les clés USB ?
Sinon, cela pourrait expliquer qu’il continue à écrire dans le répertoire où était monté la clé USB et de ce fait il rempli la carte SD.

A+


#12

Merci pour ce retour.
Le programme python n’est pas stoppé ,mais j’ai un indicateur qui me dit quand il est en stockage. Donc quand la clé est débranchée il n’y a pas de copie en cours.

Sinon, j’ai attrapé les exceptions lors de la copie du fichier et ça à l’air de résoudre le problème. Il y aurait donc parfois une copie qui se passe mal et tout déraille. Je test encore.