2009-11-18 10 views
5

Sto provando a leggere direttamente un singolo settore specifico dal disco. Al momento sono a corto di idee e qualsiasi suggerimento su come procedere sarebbe fantastico! (Io sono un novizio linux)Leggi settore singolo

risposta

5

provare qualcosa di simile a farlo dalla CLI:

# df -h . 
Filesystem   Size Used Avail Use% Mounted on 
/dev/sda2    27G 24G 1.6G 94%/
# dd bs=512 if=/dev/sda2 of=/tmp/sector200 skip=200 count=1 
1+0 records in 
1+0 records out 

Da man 4 sd:

FILES 
    /dev/sd[a-h]: the whole device 
    /dev/sd[a-h][0-8]: individual block partitions 

E se si vuole fare questo all'interno di un programma, basta utilizzare una combinazione di chiamate di sistema da man 2 ... come open, lseek, e read, con i parametri dell'esempio dd.

+0

Data la dimensione dei dischi in questi giorni, utilizzare 'lseek64()' o '#define _FILE_OFFSET_BITS 64' per garantire che' off_t' sia un tipo a 64 bit. – caf

+0

potresti fornire alcune funzioni specifiche del linguaggio di programmazione per leggere e scrivere sui settori del disco? – Mehdi

2

Non sono sicuro quale sia il miglior approccio programmatico, ma dalla riga di comando di Linux è possibile utilizzare il comando dd in combinazione con il dispositivo raw per leggere direttamente dal disco.

È necessario eseguire questo comando per ottenere l'accesso al dispositivo disco non formattato (ad esempio/dev/rdisk0).

Ad esempio, il seguente documento leggerà un singolo blocco di 512 byte da un offset di 900 blocchi dalla parte superiore del disco0 e lo trasmetterà a stdout.

sudo dd if=/dev/rdisk0 bs=512 skip=900 count=1 

Vedere la pagina di manuale dd per ottenere ulteriori informazioni sui parametri di dd.

+0

I dispositivi disco normalmente non si chiamano/dev/rdisk0 sotto Linux, probabilmente vorrai qualcosa come/dev/sda – MarkR

+0

si salta/cerco di portarmi in un settore fisico o in un blocco logico? – yonigo

0

Gli altri lo hanno praticamente coperto. È necessario

  • l'accesso al file di dispositivo del disco (sia essere root o, meglio, cambiare i permessi su di esso)

  • utilizzare i file di funzioni IO leggere settori = pezzi di (di solito) 512 byte da detto disco.

+0

potresti per favore citare alcune funzioni specifiche del linguaggio di programmazione per leggere e scrivere sui settori – Mehdi

0

si userebbe dd per questo, oppure si potrebbe scrivere un programma c e utilizzare la chiamata di scrittura del sistema.