Pb de filesystem sur compact flash

Forum traitant de la distribution sécurisée montante nommée IP cop et basée sur la distribution Smoothwall. C'est à l'heure actuelle le forum le plus actif du site.

Modérateur: modos Ixus

Pb de filesystem sur compact flash

Messagepar guillaumeI » 05 Juin 2008 00:10

Bonjour tt le monde

Ayant besoin d'un firewall silencieux, je me suis lancé dans l'installation d'ipcop sur CF, j'ai suivi la procédure du manuel: install sur disque dur, création d'un image de 2gb avec les scripts et copie sur une cf de 2Go...

le système semble fonctionner mais quand je l'arrête (avec la commande halt ou reboot) j'ai le message suivant au démarrage:

Code: Tout sélectionner
/dev/harddisk4 contains a file system with errors, check forced

Avant la fin du check j'ai des messages du genre:

Code: Tout sélectionner
hda : read_intr : error=0x10 {SectoridNotFound }, LBAsect=3928070, sector=3850246
...

Code: Tout sélectionner
error reading block1925123(attempt to read block from filesystem resulted in short read) while doing inode scan


bizarrement l'arrêt qui semble le moins destructif est de débrancher le cordon secteur :?

Le pc utilisé est un compaq desktopro mais il fonctionne très bien avec ipcop sur dd
Le problème pourrait il venir de la cf (transend 2gb 133x)?


Help
:(
guillaumeI
Matelot
Matelot
 
Messages: 4
Inscrit le: 04 Juin 2008 23:42
Localisation: la rochette

Messagepar guillaumeI » 08 Juin 2008 19:16

Petite précisions

Pour en avoir le cœur net, j'ai refait plusieurs images de différentes capacités (128Mo, 256Mo et 2gb)
Sur une CF de 128 ou 256Mo, le reboot ne pose pas de pb alors que sur la 2gb j'ai toujours le problème énoncé ci dessus!!!

Donc cela viens de ma compact flash (trenscend 2gb 133x)

Quelqu’un sait si il existe des pb d'incompatibilités avec certaines compact flash ?
guillaumeI
Matelot
Matelot
 
Messages: 4
Inscrit le: 04 Juin 2008 23:42
Localisation: la rochette

Messagepar Gesp » 09 Juin 2008 13:51

Certains couple CF/adaptateur ne supportent pas le DMA.
Il y a aussi dans les CF une RAM qui sert de cache en écriture.
Comme c'est une CF rapide, il est possible qu'elle ait un plus gros cache.
Suivant sa vitesse à écrire les données du cache sur la mémoire flash, possible que le courant soit coupé avant que le cache ne soit vidé. Du coup, certaines transactions du journal ne serait pas enregistrées, ce qui explique l'erreur au démarrage mais pas le fait que débrancher le secteur produise moins d'erreur qu'un arrêt normal. Sauf que l'arrêt normal provoque l'écriture du ramdisk sur la CF, donc il y a beaucoup d'écritures juste avant la coupure du courant.

La solution dans ce cas serait de rajouter un délai dans /etc/rc.d/rc.halt après le lancement de rc.flash.down
Rajoute un sleep 3 pour voir si cela fait une différence.

Je crois que le support du DMA dépend surtout de l'adaptateur IDE<=>CF
Dans ce cas, il faut rajouter ide=nodma sur la ligne du noyau de /boot/grub/grub.conf

Si tu veux tester la fiabilité de ta CF, fait cela en dehors du fonctionnement d'IPCop.
Crée un gros fichier proche de la capacité de la CF
Copie directement le fichier sur la CF avec dd
Pour créer le fichier, tu peux utiliser encore dd et varier le contenu (que des 0 ou un contenu pseudo-alétoire)

Il faut bien sùr que ton système ait suffisament de place de libre pour générer ces fichiers dans /tmp
dd if=/dev/zero /tmp/zero count=2G bs=1000 (un fichier avec que des zero)
dd if=/dev/urandom /tmp/random count=2G bs=1000 (un fichier au contenu aléatoire)

Avec 1000 au lieu de 1024 cela laisse un peu de marge, voire à diminuer encore suivant la capacité annoncée de la CF.

ensuite teste avec chaque fichier en le copiant sur la CF et en le relisant
dd if=/tmp/mongrosfichier of=/dev/hd<x> x étant la lettre correspondant à la CF et pas le disque du système en fonctionnement

Puis relit le fichier par dd
dd if=/dev/hd<x> of=/tmp/mongrosfichier2

Puis
md5sum /tmp/mongrosfichier*

Si les 2 md5 sont identiques, la CF n'a pas créé d'erreur.
Dans le cas contraire, appeler Houston, il y a un pb (sauf si c'est lié au dma comme indiqué plus haut).

Je ne sais pas s'il existe des programmes de test de CF.
Au niveau matériel, c'est un peu différent d'un disque dur.
On ne peut pas effacer individuellement un bloc (par exemple de 512 octets) mais un ensemble de bloc (par ex 32 ko) donc un programme de test de disque dur ne serait peut-être pas très adapté ni badblock.

En plus comme les disques durs modernes, normalement la CF a une réserve de bloc et son controleur effectue de manière transparente le remplacement des mauvais blocs.

Enfin il y a dans certaines CF mais apparament de manière inégale suivant les fabricants un dispositif d'égalisation des effacements :
La CF compte pour chaque ensemble de bloc le nombre d'effacements et égalise le nombre d'effacement sur l'ensemble de la surface. Si certaines données varient souvent, elles ne sont pas réécrites tout le temp au même endroit sur la CF sinon cette partie deviendrait rapidement inmodifiable.
Avatar de l’utilisateur
Gesp
Amiral
Amiral
 
Messages: 4481
Inscrit le: 29 Déc 2002 01:00

Messagepar guillaumeI » 20 Juin 2008 15:42

merci de ta réponse Gesp,

l'option nodma était déjà dans la config de grub et effectivement les CF supportent mal le mode DMA (j'ai essayé).

pour le l'histoire du cache j'ai essayé de mettre des delais un peu partout mais cela n'a rien changé.

J'ai fait le checksum d'un gros fichier copié sur la flash et il n'y a pas de différences.

pour ce qui est du niveau hardware, effectivement il y a des différences avec un disque dur classique, principalement liées au fait que les mémoires flashs s'use lorsque l'on écrit trop dessus. il y a donc un système de rotation des blocs pour ne pas écrire tout le temps sur la même zone, c'est ce que font les files sytems comme le FAT, NTFS et je crois même ETX2/3 (sinon ca fait des trous dans la memory map). Mais ceci est complètement transparent depuis l'extérieur!!

donc rien n'a marché :(

:cry: :cry: :cry:
guillaumeI
Matelot
Matelot
 
Messages: 4
Inscrit le: 04 Juin 2008 23:42
Localisation: la rochette

Messagepar Gesp » 20 Juin 2008 17:22

pour ce qui est du niveau hardware, effectivement il y a des différences avec un disque dur classique, principalement liées au fait que les mémoires flashs s'use lorsque l'on écrit trop dessus. il y a donc un système de rotation des blocs pour ne pas écrire tout le temps sur la même zone, c'est ce que font les files sytems comme le FAT, NTFS et je crois même ETX2/3 (sinon ca fait des trous dans la memory map).


Non, ce n'est pas géré au niveau du file system, au moins pour FAT, NTFS et ETX2/3.

Soit c'est géré au niveau du matériel et c'est alors transparent, soit c'est un filesystem qui gère le wear-leveling (l'égalisation de l'usure) mais je ne crois pas qu'il en existe à l'heure actuelle qui soient inclu au noyau linux.
http://en.wikipedia.org/wiki/Flash_memory#Memory_wear
Avatar de l’utilisateur
Gesp
Amiral
Amiral
 
Messages: 4481
Inscrit le: 29 Déc 2002 01:00

Messagepar Gesp » 20 Juin 2008 18:06

J'ai fait le checksum d'un gros fichier copié sur la flash et il n'y a pas de différences.


Si l'écriture est fiable pendant le fonctionnement normal, alors je ne vois qu'un pb de timing pendant l'arrêt avant que le file-system ne soit remonté en lecture seule pour l'arrêt.
Bizarre que le fait de rajouter un sleep 3 ne résolve pas le problème.

Code: Tout sélectionner
if [ -e /etc/FLASH ]; then
   if [ -e /etc/rc.d/rc.flash.down ]; then
      echo "Compressing logs"
      /etc/rc.d/rc.flash.down
      sleep 3
   fi
fi



Une autre possibilité serait un bug dans e2fsprogs-1.35 mais je ne vois pas trop pourquoi cela se manifesterait uniquement en flash et pas avec un vrai disque.
Dans ce cas, la mise à jour avec e2fsprogs-1.40.x pourrait apporter la solution.
Avatar de l’utilisateur
Gesp
Amiral
Amiral
 
Messages: 4481
Inscrit le: 29 Déc 2002 01:00

Messagepar guillaumeI » 23 Juin 2008 00:26

un collègue est venu à mon secours et a trouvé la solution!

si quelqu'un d'autre est confronté à ce problème, voici les explications:

donc comme je l'ai expliqué, j'ai fait une image pour CF de 2Go à partir du script mkflash.sh et après un reboot j'avais ce message d'erreur:

Code: Tout sélectionner
hda : read_intr : error=0x10 {SectoridNotFound }, LBAsect=3928070, sector=3850246


le message dit qu'il ne trouve pas le secteur 3850246!! pourquoi? -> parce que ma flash avait moins de 3850246 secteurs (pourtant elle était neuve)
j'ai donc refait une image de 1Go et j'ai agrandi la plus grande des partitions avec gparted pour utiliser tout l'espace de ma carte flash

pour l'instant ça marche
guillaumeI
Matelot
Matelot
 
Messages: 4
Inscrit le: 04 Juin 2008 23:42
Localisation: la rochette


Retour vers IPCop

Qui est en ligne ?

Utilisateur(s) parcourant actuellement ce forum : Aucun utilisateur inscrit et 1 invité

cron