Domanda

Come posso ottenere un accesso raw HD e sapere se la posizione è utilizzato o è uno spazio libero?Solo un pezzo di esempio, sono in grado di ottenere un accesso diretto semplicemente con un aperto e una lettura di un dispositivo a disco, l'obiettivo è di sapere se, per esempio, 10.000 byte viene utilizzato o meno.

È stato utile?

Soluzione

Per accumulare con le cautele ...

Non dimenticare che si deve collaborare con proprie disposizioni di sicurezza filo della pila driver esistente e la cache interna. Molti fili nel sistema possono (e volontà) scriveranno al disco tutto il tempo. Per cancellare un settore libero, dovete sapere che sia libero e soggiornano gratuitamente mentre avete il vostro modo con esso. Sarebbe male se si asciugò un settore che il file system aveva già deciso di utilizzare, ma non era ancora arrossato l'evidenza di tale decisione su disco in modo che non aveva modo di sapere che era in uso. Questo potrebbe causare la perdita di dati che può provocare utenti indignati.

Se si può garantire che il file system non è attualmente montato allora si può, in linea di principio, almeno, aperto /dev/sda (probabilmente non quello specifico che si desidera!) E analizzare i dati su disco strutture per fare tutto quello che devi fare. Questo è in realtà come programmi di utilità come fsck e mkfs applicazione.

La grande questione in sospeso è che devi stare in sintonia con tutte le versioni di ogni file system che si potrebbero incontrare. Almeno hai il codice sorgente disponibile per il file stesso sistema di riferimento, ma non sarà facile da solo porta fuori dal kernel e in un'applicazione in modalità utente.

Il mio consiglio sarebbe quello di utilizzare il file system stesso per ottenere le garanzie necessarie. Aprire file di grandi dimensioni e riempirli con i vostri modelli wipe. Riempire il disco di capacità. Si noti che se questo potrebbe avere un grave impatto su tutti i demoni in esecuzione che scontato che un pò di spazio su disco è disponibile, quindi potrebbe ancora bisogno di essere fatto su un sistema con la maggior parte dei demoni e quali uccisi. Se si sono intesi per un sicuro wipe, sarà ancora bisogno di preoccuparsi per davvero gli scarichi dei blocchi scritti su disco tra le passate perchè tutto nel normale file system sta per cercare di ottimizzare molteplici scritture di un unico blocco.

Altri suggerimenti

Si può solo open il dispositivo a blocchi (per esempio, /dev/sda) e leggere i settori manualmente. Tuttavia, non vi dirà dire se è vuoto o non direttamente. Essere vuoto o non è un qualcosa di definito a livello di filesystem astrazione. strutture dati del file system archiviare questo tipo di dati e si dovrebbe avere una profonda comprensione del filesystem specifico per farlo dai blocchi grezzi (senza l'utilizzo di alcun fornito funzione di file system).

In tutto likelyhood, non si desidera accedere al dispositivo a blocchi tramite / dev / sd * o / dev / hd * direttamente. Come altri hanno dichiarato, dovrete capire il filesystem sottostante grezzo, e questo sarà molto difficile.

Se si scrive un'applicazione che vuole trattare i byte su disco come un grande spazio di indirizzamento lineare, quindi controllare la chiamata di sistema mmap (). È possibile creare un grande file vuoto su disco, e quindi utilizzare mmap () per mappare nel vostro spazio di elaborazione. Da lì, è possibile utilizzare le operazioni di memoria regolari per leggere e scrivere il file di grandi dimensioni sottostante. Si noti che scrive sono tamponata, consistenza garantendo così può essere difficile.

Il vantaggio di questo approccio è che anche se il file sottostante è frammentato, il vostro modello di accesso (s) può considerare come un insieme lineare di byte.

Se hai intenzione di cancellare tutto lo spazio libero in un file system, è possibile compilare il file system con un unico grande file pieno di zeri, la sincronizzazione su disco, e quindi eliminarlo. Che non può ottenere assolutamente tutto, in particolare se si tratta di un file system di registrazione o simili, ma lo farà la maggior parte di esso. Se hai intenzione di pulire il disco in modo un'immagine comprime meglio, questo è probabilmente tutto quello che dovete fare. Se hai intenzione di pulire il disco per motivi di sicurezza ... benvenuti nel mondo di sviluppo del kernel, si entri nella parte profonda, e ricordate di indossare qualcosa ignifugo.

C'è un'utility chiamata zerofree azzerare blocchi liberi nel file system ext, ed è inteso per immagini VM. Ricordate, questo non è qualcosa che si dovrebbe fare per un fileystem montato. Quella pagina ha anche alcune patch vecchio kernel che potrebbero rivelarsi un interessante punto di partenza per fare questo su file system in tempo reale.

OH MIO.

Il tuo codice:

  1. Piedi la tabella di partizione per vedere cosa partizione che cade in.
  2. Determinare che tipo di filesystem è.
  3. Per ogni filesystem è di supporto, fornire ad una routine per vedere se il byte è in uso
  4. Controllare se il filesystem è montato
  5. Se, a piedi, il kernel record per scoprire se c'è qualcosa che non è ancora scritto su disco.
  6. Oh, e se si utilizza EXT4 o REISER, non è possibile conoscere la risposta alla precedente, si potrebbe pure dare.

Se fossi in te, mi piacerebbe riconsiderare ciò che si sta cercando di fare.

EDIT:vedendo il suo commento, per quello che sta realmente cercando di fare,

  • Accettare una partizione piuttosto che un disco raw
  • Richiedono smontato
  • Chiamata e3fsck rotolare in su il giornale
  • A piedi ogni inode, trovare l'ultimo blocco e la cancellazione di spazio libero in blocco (filesize deve dire da dove viene la fine dei dati nel blocco)
  • Piedi la bitmap di allocazione trovare i blocchi non allocati e asciugarli
  • Ora la parte difficile, pulire la gazzetta.
  • Buona fortuna
  • Oh, e LEGGERE IL FILESYSTEM DOCUMENTAZIONE

Molto dipende da un sacco di fattori quali

  • tipo di filesystem
  • tipo di sistema operativo
  • tipo medio

Soluzioni:

Si potrebbe essere in grado di utilizzare le stesse funzioni che il sistema di file e / o strumenti del disco usano per controllare se una posizione è libera o meno.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top