web-dev-qa-db-fra.com

Raspberry Pi: le système de fichiers écrit des fichiers, mais après le redémarrage, les anciennes données sont de retour

D'accord, c'est un problème vraiment étrange qui se produit sur deux systèmes Raspberry Pi avec leurs cartes mémoire SD respectives de 8 Go:

Exemple simple: lorsque j'écris des fichiers sur le disque, il semble que les fichiers soient écrits.
Je peux éditer un fichier vim test.dat, y saisir du texte, le sauvegarder.
ll listera le fichier.
cat affichera le contenu du fichier. Après un redémarrage, le fichier aura disparu.

Donc, ce que je pense, c’est que Ubuntu écrit les fichiers dans le cache disque d’Ubuntu mais ne les valide pas sur le disque. Les programmes de l'espace utilisateur peuvent continuer à lire les fichiers et à les utiliser, mais le cache renvoie les listes de répertoires et le contenu du fichier à partir de la RAM et non du disque. Après le redémarrage, le disque ne contient aucune des nouvelles données.

Un autre exemple:

dd if=/dev/zero of=testfile.dat bs=1M count=1000

Il crée un fichier de 1 Go. ll liste le fichier. df -h montre que 1 Go de plus a été utilisé par les données sur le disque. Mais après un redémarrage, le fichier a disparu et df -h affiche l'ancien espace disponible.

Anecdote: je sais que la vitesse d'écriture maximale de la carte SD est de 9 Mo/s. C'est ce que je reçois lorsque je ddis l'image du disque avec mon ordinateur portable. Mais en exécutant cette commande dd sur la carte SD de la framboise, dd indique que la vitesse d’écriture est de 110 Mo/s. Impossible. C'est pourquoi je pense que le système d'exploitation écrit juste sur RAM et ne s'engage pas sur le disque.

Troisième exemple: j'ai un script qui édite un fichier nommé interfaces, puis le copie, en tant que root, dans le fichier/etc/network/interfaces, pour changer l'adresse IP du périphérique. Ensuite, le script redémarre.

#!/bin/bash
cp /var/project/scripts/interfaces /etc/network/interfaces
/sbin/reboot

Après le redémarrage, l'appareil est toujours sur son ancienne adresse IP ... Bizarre ...

Quatrième exemple: la framboise exécute une base de données percona. J'ai une table qui contient 186 entrées. Je tronque la table. Regardez les données en utilisant le code php et également en utilisant webmin - la table est vide comme il se doit. Après un redémarrage, les données sont de retour. Vraiment ... 186 entrées. Cela me fait paniquer.

Je peux être complètement faux. Des idées?

J'ai travaillé sur cette installation d'ubuntu et effectué des sauvegardes périodiques en clonant l'image disque après chaque mise à jour majeure du logiciel. J'ai remarqué des choses étranges (comme l'adresse IP ne changeant pas après l'exécution de mon script), mais je n'avais pas réalisé ce problème jusqu'à aujourd'hui. Il semble que toutes les images de disque clonées présentent ce problème. Cela a dû fonctionner jusqu'à un certain point et puis quelque chose s'est mal passé avec Ubuntu sur le ...

Question: Que puis-je faire pour que Ubuntu écrive sur la carte SD?

3
Francois Stark

Ce qui a semblé m'aider, c'est d'utiliser la commande sync:

sync

De l'aide:

Forcer les blocs modifiés sur le disque, mettre à jour le super bloc.

En d'autres termes, il vide les tampons du système de fichiers. Cependant, je m'attendrais à ce que, lorsque vous faites un Sudo reboot correct, contrairement à moi, ce ne soit pas un problème et par conséquent la synchronisation ne fonctionne peut-être pas pour vous.

J'avais des problèmes similaires avec une installation Raspbian Wheezy. Il possède une partition ext4 contenant le système de fichiers en lecture seule. Et une petite partition en lecture-écriture avec FAT32 contenant des fichiers de configuration. Lorsque j'ai modifié un fichier de configuration, puis que j'ai débranché le cordon d'alimentation, les modifications n'ont pas été persistantes. (Attention: sans Pi en lecture seule, débrancher le cordon d’alimentation n’est pas une bonne chose à faire de toute façon)

2
Sebastian