Announcement

Collapse
No announcement yet.

Freie I-Nodes aus einem beliebigen Filesystem auslesen!

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Freie I-Nodes aus einem beliebigen Filesystem auslesen!

    Hallo liebe Gemeinde,

    ich möchte die komplette I-Node Struktur einer bestimmten ungemounteten Partition einlesen und dabei schauen ob der Knoten frei oder belegt ist.

    Ich bin schon seit Tage am durchforsten von Seiten und Büchern, finde aber keinen genügenden Ansatz.

    Meine Idee war bisher folgende:

    Ich öffne das Device damit ich lesen kann, z.B.

    fd = open("/dev/sda5", O_RDONLY)

    Nun möchte ich den Superblock lesen der Partition weil ich weiß das im direkten Anschluss blockweise die I-Nodes kommen.

    Um nun blockweise die I-Node Struktur einzulesen wollte ich von der Funktion bread() Gebrauch machen die auch in diversen Literaturen als Systemroutine erwähnt wird. Leider weiß ich nicht welche Include Datei ich verwenden muss um von dieser Funktion Gebrauch zu machen.

    Außerdem habe ich gelesen, dass es in anderen Linux-Distributionen eine "inode.h" existiert.

    Diese finde ich unter Ubuntu allerdings auch nicht.

    Mit jener wollte ich die Inode-Struktur einlesen.

    Hier einige Code-Beispiele die ich mir bisher zusammen gesucht habe:

    getsblock(fd)
    int fd;
    {
    /*
    * Make sure the disk information is current. This
    * causes all disk writes to be scheduled.
    */
    sync();

    /*
    * Read in the super-block. It is stored at file
    * system address SUPERBOFF.
    */
    //lseek(fd, (long) SUPERBOFF, 0);
    read(fd, &sblock, SBSIZE);

    /*
    * The number of files (i-nodes) is calculated by
    * multiplying the number of blocks used to hold
    * i-nodes by the number of i-nodes in a block.
    */
    nfiles = sblock.s_isize * INOPB;

    /*
    * Save the name of the file system.
    */
    aaa = sblock.s_fname;

    }

    /*
    * getinodes--read in the i-node structures from the device
    * referred to by fd.
    */
    getinodes(fd)
    int fd;
    {
    register ino_t ino;
    register daddr_t iblk;
    //struct dinode *malloc();

    /*
    * Allocate space for them all.
    */
    //dinode = malloc(nfiles * sizeof(struct dinode));

    //if (dinode == NULL) {
    //fprintf(stderr, "%s: out of memory.\n", pname);
    // exit(1);
    //}

    /*
    * We read in i-nodes a disk block-full at a time.
    * The INOPB constant is the number of i-nodes in
    * a block.
    */
    for (ino = 0; ino < nfiles; ino += INOPB) {
    /*
    * The i-node's disk block number is given by
    * the itod macro.
    */
    iblk = itod(ino);

    /*
    * Read in this block of i-nodes.
    */
    bread(fd, iblk, &dinode[ino], BSIZE);
    }
    }

    vergrößern

    Vielen Dank für jede Hilfestellung!
Working...
X