IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Administration système Discussion :

Problème de timing et de détection erronée de présence/absence d'une partition


Sujet :

Administration système

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 159
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 159
    Par défaut Problème de timing et de détection erronée de présence/absence d'une partition
    Bonsoir,

    Je viens vers vous pour chercher une idée, une inspiration, face à un problème hallucinant car terriblement intermittent de formatage d'un disque depuis un script.

    Le partitionnement avec sfdisk se passe toujours bien (je teste le retour), ensuite je suis censé formater avec mke2fs la Partition1 fraîchement créée à l'étape précédente, mais malgré tout un tas de contrôles, parfois je me ramasse cette erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mke2fs: Aucun fichier ou dossier de ce type lors de la tentative de détermination de la taille de secteur matériel
    Pourtant, avant d'attaquer avec mke2fs, il y a tout ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    sync & wait $! # à la fin du partitionnement
    sleep 0.5 
    # bidouille infâme pour temporiser (vérifie l'existence de .../Partition1) :
    file $cible > /dev/null 2>&1
    ret=$?
    if [ $ret != "0" ]; then
      echo "pas zéro, donc $ret"  # jamais vu donc Partition1 existe
      sleep 2
      sync & wait $!
      file $cible > /dev/null 2>&1
      if [ $? != "0" ]; then return 32; fi
    fi
    sync & wait $!
    à une époque j'avais même rajouté, ici, avant le mke2fs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        ### juste pour confirmer :
    ###    file $cible > /dev/null 2>&1
    ###    if [ $? != "0" ]; then exit 33; fi
    Et pour tout vous dire, le seul moyen que j'ai trouvé pour m'affranchir de cette $!@&€£*§ d'erreur, c'est de déporter le partitionnement dans un script secondaire, chose que je trouve complètement loufoque, donc je voulais réintégrer cette partie dans le script principal.

    Mais comment faire ? Je résume en 4 lignes :
    • je partitionne le disque
    • je teste la présence de Partition1 et si c'est bon
    • je lance le formatage avec mke2fs qui parfois me retourne
    • mke2fs: Aucun fichier ou dossier de ce type lors de la tentative de détermination de la taille de secteur matériel

    Je suis sec, là, les gars...

    En me relisant, la seule piste que je vois, c'est que Partition1 n'est pas complètement créée quand j'appelle mke2fs, malgré deux lignes sync & wait $! entre le partitionnement et le mke2fs.

    Comment être sûr que Partition1 est dispo si le test avec file est foireux ?
    Merci,

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 673
    Par défaut
    Jipété !


    Censé !!!
    dis donc !
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 295
    Par défaut
    Bonjour

    C'est sensé ce que dit N_BaH.

  4. #4
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 159
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 159
    Par défaut
    Bon, ok, fixed, et pour la détection erronée de la partition, une idée ?

  5. #5
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 673
    Par défaut
    non, désolé.
    ça pourrait être propre à sfdisk ?
    tu as essayé avec fdisk, gdisk ?
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  6. #6
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 159
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 159
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    ça pourrait [être] propre à sfdisk ?
    tu as essayé avec fdisk, gdisk ?
    Non, je n'ai pas essayé avec d'autres partitionneurs, ils ont l'air moins simples.

    Je pensais avoir fait court, surtout avec une récapitulation en 4 lignes, on dirait que ce n'est toujours pas clair

    En plus j'avais synthétisé ma récap en 3 lignes :
    Citation Envoyé par Jipété Voir le message
    la seule piste que je vois, c'est que Partition1 n'est pas complètement créée quand j'appelle mke2fs, malgré deux lignes sync & wait $! entre le partitionnement et le mke2fs.

    Comment être sûr que Partition1 est dispo si le test avec file est foireux ?
    On dirait que file retourne 0 car l'outil peut accéder à... à quoi ? Une entrée dans la table d'inodes ? Mais mke2fs ne peut parfois pas travailler avec Partition1, c'est donc un problème de timing.
    Quels autres outils seraient disponibles ? J'avais pensé à stat, mais après un test rapide je n'en suis pas très sûr.

  7. #7
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 376
    Par défaut
    Bonjour,

    Juste avant ton mke2fs, comme tu as fait un sync, essaye de rajouter echo 3 >/proc/sys/vm/drop_caches, ceci libérera le pagecache, dentries et inodes.

  8. #8
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 673
    Par défaut
    àmha, ça ne prend rien de temps de créer une partition, ce n'est qu'une "écriture dans un fichier" finalement, non ?

    c'est toujours le même disque ?
    mais, tu le partitionnes combien de fois par semaine ?
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  9. #9
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 159
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 159
    Par défaut
    Rhôôô, vous êtes taquins !

    En attendant, le fait de remplacer file et ls par stat pour les tests de présence (plus peut-être un déplacement de sync) fait que même après un reboot, ça s'est bien passé.

    Et pourtant ce n'est pas simple, la preuve en image avec une vision à la ramasse d'un bout de pcmanfm en haut, compensée par mc, son bleu caractéristique et une vision correcte en bas :

    Nom : crazy_pcmanfm.png
Affichages : 103
Taille : 20,7 Ko

    La vision fausse de pcmanfm vient du fait que j'avais juste avant examiné un autre fichier de disque virtuel et son contenu une fois le disque monté, et que l'animal a dû en cacher le contenu.

    Comment progresser avec ces outils déglingués, mmmh ?

    Bon, j'attends demain et d'autres tests pour le célèbre

  10. #10
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 376
    Par défaut
    La différence entre file et les commandes comme ls et stat, c'est que file traite le fichier lui-même, tandis que ls ou stat ne traite pas le fichier mais la table d'inode, enfin le conteneur pas le contenu.

  11. #11
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 159
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 159
    Par défaut
    Bonjour,

    Citation Envoyé par disedorgue Voir le message
    La différence entre file et les commandes comme ls et stat, c'est que file traite le fichier lui-même, tandis que ls ou stat ne traite pas le fichier mais la table d'inode, enfin le conteneur pas le contenu.
    Merci pour cette explication.
    Le Mon drame, c'est "comment s'en souvenir" ?
    Comment penser à ne plus utiliser file sauf dans un cas bien précis, l'identification du type de fichier ?
    Bah, parfois il suffit de l'écrire comme je viens de le faire ligne précédente et c'est bon, c'est gravé dans ma mémoire (enfin, j'espère).


    Une image d'un déroulement sans souci (en mode encore un peu debug [les lignes en blanc, les pauses, les questions pour supprimer, tout en bas])

    Nom : console.jpg
Affichages : 99
Taille : 323,6 Ko

    - On y voit des zones floutées, c'est normal, c'est le nom du fichier et son chemin de stockage, fichier top-secret, vous l'avez compris.
    - Les chiffres qu'on voit à gauche, de place en place, sont des compteurs de secondes pour montrer que c'est "vivant", et d'ailleurs, ce qui m'a surpris c'est qu'il faille 4 minutes à rsync pour sauvegarder un fichier de 1 Go + 2 petites images : aurait-il backupé le container de 4 Go (qui a demandé 30 à 39 secondes à VBoxManage pour le créer en mode statique) ?
    - On y voit aussi deux lignes commençant par "attention : impossible d'obtenir..." qui sont normales, elles n'existent que lors de la création des fichiers initiaux -- c'est mke2fs qui génère ça (malgré l'option "-q"), et ça n'a aucune incidence sur la suite, bien que le message soit effrayant .

    ?

    Merci à tous et bon week-end,

  12. #12
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 159
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 159
    Par défaut
    Bon, j'ai tenté taskset 0x00000001 mon_script -argument mais c'est pareil.

    Voilà où j'en suis :
    j'arrête le script avant le formatage et je vérifie en ligne_de_commande dans un autre terminal :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mke2fs -q -t ext4 -F /chemin/disk/Partition1
    ça passe

    je fais le ménage et je relance le script sans l'arrêter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    log Format_partition /chemin/disk/Partition1, patience...
    mke2fs -q -t ext4 -F $param
    ça casse
    la chaîne après Format_partition est passée en paramètre à la fonction, et je vois bien grâce à la ligne log que c'est la bonne valeur.

  13. #13
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 159
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 159
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      Formatage de la partition /chemin/disk/Partition1, patience...
    #suis resté là en attente, ce qui m'a permis de vérifier dans un autre terminal que le fichier était bien présent, puis au bout des 20 sec,
    mke2fs: Aucun fichier ou dossier de ce type lors de la tentative de détermination de la taille matérielle de secteur


    Quant au caractère bizarre, si c'était le cas, j'aurais le problème sur le fichier source (si je le supprime également), ce qui n'est pas le cas -- d'où la loufoquerie de la chose,

    Je sens que je vais t'épuiser, et tu m'en vois désolé.

    En fait je pense que les messages d'erreur de mke2fs sont complètement bidon, ce qui ne nous aidera pas

  14. #14
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 376
    Par défaut
    Ce qui me pose problème, c'est que cela passe sur la source, pas sur la destination, il doit donc y avoir une différence dans ton script entre les 2 séquences...

    Si tu isoles chaque séquence, par exemple en commentant la partie source, est-ce que la partie destination passe et vice versa ?

    Je dis bien commenter, pas faire croire que la source existe.

  15. #15
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 159
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 159
    Par défaut
    Citation Envoyé par disedorgue Voir le message
    Ce qui me pose problème, c'est que cela passe sur la source, pas sur la destination, il doit donc y avoir une différence dans ton script entre les 2 séquences...
    Moi pareil mais non, il n'y a pas de différence, c'est la même fonction, appelée deux fois.

    Citation Envoyé par disedorgue Voir le message
    Si tu isoles chaque séquence, par exemple en commentant la partie source, est-ce que la partie destination passe et vice versa ?

    Je dis bien commenter, pas faire croire que la source existe.
    Je ne suis pas sûr de bien comprendre ce que tu veux, je vais donc le dire autrement :

    d'abord je travaille avec le fichier source et s'il n'est pas présent il est créé puis le fichier est monté, un test est fait sur son partitionnement (si pas bon il est fait), un autre sur son formatage (si pas bon il est fait), et au final la partition est montée, pour pouvoir travailler avec ce qu'elle contient (affichage de l'explorateur et script en pause avec un read en attente).

    Quand le travail est fini, <ENTREE> et la même séquence se répète en changeant les noms de fichiers pour tester partitionner formater monter ce qui va devenir le backup de la source grâce à rsync.
    C'est ça que je ne comprends pas dans ta demande : car tout est à base de fonctions auxquelles je passe des paramètres (nom de fichiers, points de montage, etc.) et dont je teste les retours.

    Effectivement, le mystère le plus complet est lié au fait qu'il n'y a pas de pb avec le source et qu'il y en a un avec le backup, sans aucune raison puisque dans les deux cas c'est la même fonction qui est appelée.

    Si j'ai parlé de timings, c'est parce que je m'étais rendu compte il y a quelques temps qu'en rajoutant des sleep et des wait j'arrivais à faire fonctionner le bazar, mais ça me semble barge, cette manière de faire.
    Quand même, file $cible remonte 0 (= tout va bien, fichier présent) et juste après mke2fs se vautre avec fichier absent -- pour le backup, et pas pour le source.


    Bref, si tout va bien tout est démonté et à table !
    Bon app'
    (et c't'aprème je ne suis pas là...)

    EDIT :
    EXTRAORDINAIRE !

    Dernier test avant de manger, j'ai rajouté, après la ligne de log et avant le mke2fs la simple ligne ls $1 # $1 passé à la fonction, c'est le point de montage du fichier et là, miracle, aucun problème ! (indépendamment du fait que ls m'a affiché ce que je m'attendais à voir, à savoir EntireDisk Partition1)

    Je vous laisse méditer là-dessus, reprise des hostilités en fin d'après-midi (mais je me sens mieux, tout d'un coup)

  16. #16
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 159
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 159
    Par défaut
    Jipété, le retour.

    Une chose m'ennuie : qu'est-ce que ls peut donc faire de plus que file ou sync pour que mke2fs soit content ?

    Ne perdons pas ça de vue :
    Citation Envoyé par cours dvlp
    III-A. Éviter la commande « ls » dans les scripts
    Dans la plupart des cas, les « ls » présents dans les scripts sont superflus aussi bien pour parcourir une liste de fichiers que pour récupérer des informations sur des fichiers
    N_BaH va être furax, mais qu'y puis-je ? Nom : bah.gif
Affichages : 141
Taille : 275 octets

    Par quoi pourrais-je le remplacer, alors ?

  17. #17
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 295
    Par défaut
    L'argumentation principale dit d'utiliser find et stat en lieu et place de ls pour obtenir le même résultat
    As-tu le même comportement grâce à find ou stat ?

  18. #18
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 159
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 159
    Par défaut
    Citation Envoyé par Flodelarab Voir le message
    As-tu le même comportement grâce à find ou stat ?
    find ça risque d'être inutilisable (ou je l'ai mal utilisé ?) car fichier présent ou absent, il retourne 0...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    # find . -maxdepth 1 -iname fic_présent.txt > /dev/null 2>&1
    # echo $?
    0
    # find . -maxdepth 1 -iname fic_absent.tttt > /dev/null 2>&1
    # echo $?
    0
    Avec stat ça a l'air plus correct :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    # stat fic_présent.txt > /dev/null 2>&1
    # echo $?
    0
    # stat fic_absent.tttt > /dev/null 2>&1
    # echo $?
    1
    Et donc dans mon script ça s'est bien passé : j'ai remplacé file $cible par stat $cible et viré ls $cible et ça a fonctionné.

    Mais il me faut rebooter pour être sûr, parce qu'à mon retour en fin d'aprème la première chose que j'ai faite a été de lancer mon script avec ls et ça s'est vautré quand même, , alors qu'à 13 h j'étais tout content. Vous voyez la misère ?

    Je tâtonne, je tâtonne, genre je déplace un sync hors d'une fonction pour le mettre après son appel plutôt qu'avant la sortie, pour voir, et autres tentatives pifométriques et aléatoires jusqu'à ce que ça tombe en marche...

  19. #19
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 376
    Par défaut
    En tout cas, ton script me fait penser à une simulation quantique genre chat de Schrödinger...

  20. #20
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 295
    Par défaut
    Si c'est le cas, c'est plutôt positif.
    Il suffit de recommencer jusqu'à ce que la décohérence ramène un chat vivant.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Batch] Problème Net Time.
    Par jockyboss777 dans le forum Windows
    Réponses: 9
    Dernier message: 11/09/2007, 18h29
  2. Problème format TIME
    Par bosse_one1 dans le forum Scripts/Batch
    Réponses: 3
    Dernier message: 04/09/2007, 18h53
  3. Problème de timed out
    Par benassis dans le forum Langage
    Réponses: 8
    Dernier message: 17/08/2006, 16h08
  4. [PHP-JS] problème avec time()
    Par maxtt dans le forum Langage
    Réponses: 14
    Dernier message: 31/07/2006, 04h12
  5. Problème de time-out avec un socket client.
    Par Depteam1 dans le forum MFC
    Réponses: 3
    Dernier message: 17/10/2005, 10h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo