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

C Discussion :

Ecrire sur le disque dur


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juillet 2005
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 25
    Par défaut Ecrire sur le disque dur
    Bonjour :p

    Je souhaite manipuler un disque dur externe sous windows et/ou linux (le plus simple des 2 )

    Quand je dis manipuler, je veux dire pouvoir lire/écrire sur TOUS les secteurs (même sur le MBR)

    Mon but est de créer un système de fichier ultra simple mais spécifique à un type de donnée -ou plutôt de structure-.

    Connaissez vous des bibliothèques/fonctions pour ça ?

    merci

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 478
    Par défaut
    Bonsoir,

    Linux (et les Unix) sont faits pour ça : une fois reconnu par le noyau et le système, ton disque, qu'il soit interne ou externe, est présenté sous la forme d'un fichier spécial. Il suffit de lire ce fichier comme un fichier ordinaire pour accéder à l'image intégrale de ton disque. Du coup, tu peux le faire directement depuis l'interface graphique ou la ligne de commande. Cela m'a beaucoup servi pour dépanner des Windows, en leur temps :-) Et ça marche dans les deux sens : si tu modifies le contenu de ce fichier, ces modifications seront directement répercutées sur ton disque.

    Dans 99% des cas, le noyau lisse les accès et tout est transparent pour l'utilisateur mais quand tu travailles à très bas niveau (raw devices) tu parles pratiquement directement au matériel, qui peut alors exiger que tu lui envoies des blocs bien alignés et dont la taille est multiple de celle d'un secteur. Il existe une commande historique mais toujours utilisée pour faire ces manipulations : dd (disk dub).

    D'autre part, les distributions de Linux proposent généralement fuse, qui permet de gérer son propre filesystem dans l'espace utilisateur, sans avoir à faire de montage ni d'écrire de module du noyau ou d'applications root.

    Donc, si tu comptes faire le tout en C, voir du côté de open(), fopen() et ioctl().

  3. #3
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Typiquement, si tu ne veux/peux pas bosser directement sur le disque, tu peux simuler un système de fichiers dans un fichier plus grand...
    J'avais eu un projet comme ça à l'école d'ingé.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  4. #4
    Membre averti
    Inscrit en
    Juillet 2005
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 25
    Par défaut
    Citation Envoyé par Obsidian Voir le message
    va voir du côté de open(), fopen() et ioctl().
    Si je ne monte aucune partition, mon disque dur est-il présent sous la forme d'un fichier ? Qu'elle est son nom ?

    Et pour manipuler le fichier, je convertis moi-même l'adresse des secteurs en bytes?

    Pour ioctl(), j'ai trouvé la page man un peu flou et la page man d' ioctl_list n'éclaire pas mieu!

    Sinon, pour simuler un disque dans un fichier, ça ne me sert à rien! le but est d'appliquer ce système sur une carte SD, puis y accéder à partir d'un pic ou un autre µC
    merci

  5. #5
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 478
    Par défaut
    Citation Envoyé par lenul Voir le message
    Si je ne monte aucune partition, mon disque dur est-il présent sous la forme d'un fichier ? Qu'elle est son nom ?
    Oui, c'est ce que l'on nomme les « fichiers spéciaux » sous UNIX : il s'agit d'un certain type de fichiers qui pourraient être placés n'importe où mais qui, en pratique, sont tous regroupés en dessous de /dev (comme devices). Chaque accès à ce fichier invoque en réalité une routine du noyau qui pilote le périphérique concerné. Pour les disques, ça dépend. Mais pour tout ce qui est assimilé à un périphérique SCSI, ce qui inclut également les cartes mémoires, périphériques de stockage USB, etc. C'est généralement ...

    /dev/sda /dev/sdb /dev/sdc ...

    . en fonction de l'ordre dans lequel tes périphériques ont été déclarés et/ou ont été détectés. Les disques et lecteurs purement IDE sont généralement notés /dev/hda /dev/hdb /dev/hdc ... sauf quand ils sont accédés au travers d'une émulation SCSI. Sachant que tout cela est vrai pour Linux et a tendance à varier avec le temps.

    On soulignera que la plupart des distributions Linux récentes reconnaissent automatiquement les nouveaux disques et les montent de leur propre initiative. Si tu travailles dans l'environnement de bureau par défaut, tu rentres ta carte et ça marche.

    Linux propose généralement xxd comme convertisseur en hexadécimal. Tape

    Code shell : Sélectionner tout - Visualiser dans une fenêtre à part
    $ xxd /dev/hda | less

    ... et tu devrais voir apparaître ton MBR et ce qui suit (à condition d'avoir les droits de lecture sur ledit fichier spécial).

    Tous ces fichiers représentent chacun un disque entier. Il existe encore d'autres fichiers spéciaux, nommés de la même manière mais suivi d'un chiffre en plus. Ceux-ci se restreignent alors à une partition donnée du disque.

    À noter enfin que les fichiers spéciaux ne concernent pas simplement les disques, mais permettent de gérer pratiquement tous les périphériques qui peuvent recevoir un flux de données. Par exemple, tout ce que tu écriras dans /dev/dsp sera envoyé vers les hauts-parleurs reliée à ta carte son.

    Et pour manipuler le fichier, je convertis moi-même l'adresse des secteurs en bytes?
    Euh ... oui. J'avoue que je n'ai jamais eu à détecter moi-même la taille des secteurs d'un support (qui est généralement 512, presque partout), donc je ne connais pas l'appel par cœur.

    Pour ioctl(), j'ai trouvé la page man un peu flou et la page man d' ioctl_list n'éclaire pas mieu!
    Oui, c'est normal. C'est une primitive universelle de contrôle de tous les périphs. Évidemment, les paramètres qu'on lui passe varient en fonction du périphérique géré et la man-page n'est jamais exhaustive à son sujet. Mais on s'y fait.

    Sinon, pour simuler un disque dans un fichier, ça ne me sert à rien! le but est d'appliquer ce système sur une carte SD, puis y accéder à partir d'un pic ou un autre µC. merci
    Ça a pourtant beaucoup d'intérêt : ça permet de faire pratiquement toutes les manipulations compliquées au niveau d'un système de fichier et ce, avec des commandes ordinaires : tu copies le contenu d'un fichier spécial vers un fichier ordinaire → tu as créé une image de disque. Tu copies ce fichier ordinaire vers le fichier spécial d'origine → tu regénères ton disque à partir de l'image. Exit rawrite et compagnie. Évidemment, ça ne marche que sur les disques où l'on peut librement accéder aux secteurs. C'est plus compliqué sur un CD ou un DVD, bien sûr. Et quand je dis compliqué, ça ne concerne que la gravure. Tu peux en extraire l'image de la même façon.

    Mais surtout, comme le contenu d'un disque est présenté sous la forme d'un fichier, et que c'est en l'exploitant que l'on va pouvoir monter un disque ou une de ses partitions, rien ne t'empêche de monter une image de disque comme s'il s'agissait d'un disque réel et de travailler dessus (il faudra juste passer par un périphérique de loopback, /dev/loop, ce qui se fait automatiquement avec l'option -o loop au montage). C'est particulièrement intéressant quand on sait que les cartes à mémoire ont un nombre de cycles de lecture/écriture limité.

    En outre, rien ne t'empêche non plus de créer un fichier de taille fixe et de le formatter. C'est particulièrement intéressant pour la création d'images ISO, qui devront être remplies au préalable pour être ensuite gravées en une fois sur le CD ou le DVD.

  6. #6
    Membre averti
    Inscrit en
    Juillet 2005
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 25
    Par défaut
    Je teste tout ça ....

Discussions similaires

  1. Ecrire sur un disque dur externe sous Ubuntu
    Par arthur.moreau dans le forum Langage
    Réponses: 2
    Dernier message: 29/07/2014, 15h18
  2. Réponses: 6
    Dernier message: 14/11/2006, 15h52
  3. lancer xp sur un cd (comme sur un disque dur)
    Par fab44 dans le forum Windows XP
    Réponses: 6
    Dernier message: 04/11/2004, 17h46
  4. Interdire à X d'écrire sur le disque dur, possible ?
    Par Michaël dans le forum Applications et environnements graphiques
    Réponses: 4
    Dernier message: 29/10/2004, 16h50
  5. Liberer de la place sur le disque dur
    Par olivier639 dans le forum Administration système
    Réponses: 5
    Dernier message: 15/05/2004, 14h03

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