Question

Comment puis-je obtenir un accès brut à la HD et savoir si cet endroit est utilisé ou est un espace libre? Juste un morceau d'exemple, je peux obtenir un accès direct simplement avec un esprit ouvert et une lecture sur un dispositif de disque, l'objectif est de savoir si le, par exemple, 10.000 octets est utilisé ou non.

Était-ce utile?

La solution

Pour empiler les mises en garde ...

Ne pas oublier que vous devez coopérer avec ses propres dispositions de sécurité de fil de la pile de pilotes existants et la mise en cache interne. De nombreux threads du système peuvent (et) être en train d'écrire sur le disque tout le temps. Pour effacer un secteur libre, vous devez savoir qu'il est libre et gratuit rester alors que vous avez votre chemin avec elle. Il serait mauvais si vous essuyés un secteur que le système de fichiers avait déjà décidé d'utiliser, mais n'a pas rincée la preuve de cette décision sur le disque mais si vous ne pouviez pas savoir qu'il était en cours d'utilisation. Cela pourrait entraîner la perte de données qui peut entraîner des utilisateurs outrés.

Si vous ne pouvez pas garantir que le système de fichiers est actuellement pas monté, vous pouvez, en principe au moins, ouvert /dev/sda (probablement pas celui spécifique que vous voulez!) Et d'analyser les données sur disque structures à faire ce que vous devez faire. Ceci est en fait la façon dont les services publics comme fsck et mkfs sont mises en œuvre.

La grande question qui reste est que vous devez rester en phase avec chaque version de chaque système de fichiers que vous pourriez rencontrer. Au moins vous avez le code source disponible pour le système de fichiers lui-même pour référence, mais il ne sera pas facile juste le port hors du noyau et dans une application en mode utilisateur.

Mon conseil serait d'utiliser lui-même le système de fichiers pour vous obtenir les garanties dont vous avez besoin. Ouvrez des fichiers volumineux et les remplir avec vos motifs de volet. Remplissez le disque à pleine capacité. Notez que si cela pourrait avoir un impact sérieux sur les daemons en cours d'exécution qui supposent que l'espace disque est disponible, il pourrait encore être fait sur un système avec la plupart des daemons et tels tués. Si vous visez un endroit sûr lingette, vous aurez toujours besoin de vous soucier de chasse effectivement les blocs écrits sur le disque entre les passages parce que tout dans le système de fichiers normal va essayer d'optimiser plusieurs écritures d'un seul bloc.

Autres conseils

Vous pouvez juste open le dispositif de bloc (par exemple, /dev/sda) et lire les secteurs manuellement. Toutefois, cela ne vous dit pas dire si elle est vide ou pas directement. Être vide est ou non une chose définie au niveau d'abstraction du système de fichiers. structures de données du système de fichiers stocker ce genre de données et vous devriez avoir une compréhension profonde du système de fichiers spécifique de le faire à partir des blocs bruts (sans utiliser le système de fichiers de fonction fournie).

Dans tous les likelyhood, vous ne voulez pas accéder au périphérique bloc via / dev / sd * ou / dev / hd * directement. Comme d'autres ont déclaré, vous devez comprendre le système de fichiers sous-jacent brut, et ce sera très difficile.

Si vous écrivez une application qui veut traiter octets sur le disque comme un grand espace d'adressage linéaire, puis vérifier l'appel système mmap (). Vous pouvez créer un grand fichier vide sur le disque, puis utiliser mmap () pour la carte dans votre espace de processus. De là, vous pouvez utiliser des opérations de mémoire régulières pour lire et écrire dans le fichier grand sous-jacent. Notez que les écritures sont mises en tampon, afin de garantir la cohérence peut être difficile.

L'avantage de cette approche est que même si le fichier sous-jacent est fragmenté, votre modèle d'accès (s) peut le considérer comme une collection linéaire d'octets.

Si vous êtes désireux d'effacer tout l'espace libre dans un système de fichiers, vous pouvez remplir le système de fichiers avec un grand fichier complet de zéros, le synchroniser sur le disque, puis supprimez-le. Cela ne peut pas obtenir absolument tout, surtout si vous avez affaire à un système de fichiers de journalisation ou similaire, mais il fera la plupart. Si vous êtes désireux d'effacer le disque si une image compresse mieux, ce qui est probablement tout ce que vous devez faire. Si vous êtes désireux de nettoyer le disque pour des raisons de sécurité ... Bienvenue dans le monde du développement du noyau, s'il vous plaît entrer dans le grand bain, et souvenez-vous de porter quelque chose résistant à la flamme.

Il y a un utilitaire appelé zerofree à zéro des blocs libres dans les systèmes de fichiers ext, et est destiné à des images VM. Rappelez-vous, ce n'est pas quelque chose que vous devez faire à un fileystem monté. Cette page contient aussi quelques anciens correctifs du noyau qui pourraient se révéler un point de départ intéressant pour ce faire sur les systèmes de fichiers en direct.

OH MY.

Votre code devrait:

  1. Marchez la table de partition pour voir quelle partition qui tombe.
  2. Déterminez quel type de système de fichiers est.
  3. Pour chaque système de fichiers que vous soutenez, fournir une telle routine pour voir si cet octet est utilisé
  4. Vérifiez si le système de fichiers est monté
  5. Si elle est, marcher dans les dossiers du noyau pour savoir s'il y a quelque chose pas encore écrit sur le disque.
  6. Oh, et si vous utilisez EXT4 ou Reiser, vous ne pouvez pas connaître la réponse à la précédente de sorte que vous pourriez aussi bien abandonner.

Si je vous, je vous Reconsidérer ce que essayez de faire.

EDIT: voir son commentaire à ce qu'il essaie de faire en fait,

  • Accepter une partition au lieu d'un disque brut
  • Require mit pied à terre
  • Appel e3fsck pour rouler la revue
  • Marcher chaque inode, trouver le dernier bloc et essuyer tout espace libre dans ce bloc (taille du fichier doit dire où les données se termine dans le bloc)
  • Promenade les bitmaps d'allocation, de trouver des blocs non alloués et les essuyer
  • Maintenant, la partie la plus délicate, essuyez la revue.
  • Bonne chance
  • Oh, et LIRE LA DOCUMENTATION FILESYSTEM

Très dépendant de beaucoup de facteurs tels que

  • système de fichiers
  • type de système d'exploitation
  • type moyen

Solutions:

Vous pourriez être en mesure d'utiliser les mêmes fonctions que le système de fichiers et / ou des outils de disque utilisent pour vérifier si un emplacement est libre ou non.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top