Hallo, ich bräuchte mal recht dringend eure Hilfe. [EDIT: Ok, schon erledigt. Siehe unten.]
Ich habe mir vorhin den Smart Boot Manager in den MBR installiert. Ich habe Ubuntu (auf der zweiten Platte). Funktioniert auch wunderbar, allerdings hat der wohl meine GPT (auf der ersten Platte) nicht erkannt und jetzt sind leider die Daten auf der Platte futsch, da ist anstelle der alten Partitionen jetzt eine schöne, große fat16-Partition.
Aber glücklicherweise habe ich ja die Backup-Funktion zuvor benutzt. Bloß leider kommt beim Zurückspielen die Meldung "Invalid backup file". Schade nech? :wink:
Den Quellcode dazu gibt es hier: http://btmgr.sourceforge.net/download.html
Ich kann leider kein Stück C, deshalb bin ich jetzt auf eure Hilfe angewiesen.
Was hat das Programm in der Funktion backup() gemacht? Kann ich die Backup-Datei evtl. mit dd wieder zurückspielen?
Wen's interessiert, die Backup-Datei ist genau 23357 Bytes groß.
Edit: Hier mal eben den Code, damit ihr ihn euch nicht extra runterladen müsst:
Viele Grüße, Blackbird++
Edit2: Ich weiß übrigens noch genau, wie die Partitionstabelle aussah. GPT, 100GB frei, und der Rest TrueCrypt-Partition. Kann jetzt nicht einfach mit GParted das ganze "nachbauen", d.h. neue Partitionstabelle, leere Partition an der entsprechenden Stelle erstellen und das ganze mit TC mounten? Würde das gehen?
Edit3: Jaa!
:thumb_up: Habs genau so gemacht, und es hat tatsächlich funktioniert, unglaublich!
Ok hat sich dann wohl von selbst erledigt.
("rofl")
Ich habe mir vorhin den Smart Boot Manager in den MBR installiert. Ich habe Ubuntu (auf der zweiten Platte). Funktioniert auch wunderbar, allerdings hat der wohl meine GPT (auf der ersten Platte) nicht erkannt und jetzt sind leider die Daten auf der Platte futsch, da ist anstelle der alten Partitionen jetzt eine schöne, große fat16-Partition.

Aber glücklicherweise habe ich ja die Backup-Funktion zuvor benutzt. Bloß leider kommt beim Zurückspielen die Meldung "Invalid backup file". Schade nech? :wink:
Den Quellcode dazu gibt es hier: http://btmgr.sourceforge.net/download.html
Ich kann leider kein Stück C, deshalb bin ich jetzt auf eure Hilfe angewiesen.
Was hat das Programm in der Funktion backup() gemacht? Kann ich die Backup-Datei evtl. mit dd wieder zurückspielen?
Wen's interessiert, die Backup-Datei ist genau 23357 Bytes groß.
Edit: Hier mal eben den Code, damit ihr ihn euch nicht extra runterladen müsst:
Code:
void
backup ()
{
int devd, ksectors;
if (bk_fp == NULL)
return;
printf("Backing up the data...\n");
#ifdef __linux__
devd = open_blk_dev (inst_dev);
lseek (devd, 0, SEEK_SET);
if (read (devd, buf_ldr, SECTOR_SIZE) != SECTOR_SIZE)
die ("read %s: %s", inst_dev, strerror (errno));
if (fwrite (BACKUP_MAGIC, strlen(BACKUP_MAGIC), 1, bk_fp) < 1 ||
fwrite (inst_dev, 20, 1, bk_fp) < 1 ||
fwrite (buf_ldr, SECTOR_SIZE, 1, bk_fp) < 1 )
die ("fwrite backup file error");
lseek (devd, SECTOR_SIZE * KNL_LBA, SEEK_SET);
if (read (devd, buf_knl, knl_tsize) != knl_tsize)
die ("read %s: %s", inst_dev, strerror (errno));
if (fwrite (&knl_tsize, sizeof (knl_tsize), 1, bk_fp) < 1 ||
fwrite (buf_knl, knl_tsize, 1, bk_fp) < 1 )
die ("fwrite backup file error");
close_blk_dev (devd,inst_dev);
#else
check_dev (inst_devid);
disk_io (2, inst_devid, LDR_HEAD, LDR_CYL, LDR_SECT, buf_ldr, 1);
if (fwrite (BACKUP_MAGIC, strlen (BACKUP_MAGIC), 1, bk_fp) < 1 ||
fwrite (&inst_devid, sizeof (inst_devid), 1, bk_fp) < 1 ||
fwrite (buf_ldr, SECTOR_SIZE, 1, bk_fp) < 1)
die ("write backup file error");
ksectors = (knl_tsize + SECTOR_SIZE - 1) / SECTOR_SIZE;
disk_io (2, inst_devid, KNL_HEAD, KNL_CYL, KNL_SECT, buf_knl, ksectors);
if (fwrite (&ksectors, sizeof (ksectors), 1, bk_fp) < 1 ||
fwrite (buf_knl, ksectors * SECTOR_SIZE, 1, bk_fp) < 1)
die ("write backup file error");
#endif
fclose (bk_fp);
}
void
unistall ()
{
int ks;
int devd;
char buf[20];
char sect_buf[SECTOR_SIZE+1];
if (!always_yes)
{
printf ("Are you sure you want to uninstall Smart BootManager [y/n]?");
fgets (buf, 19, stdin);
if (buf[0] != 'y')
die ("Abort uninstallation.");
}
if (fread (buf, strlen(BACKUP_MAGIC), 1, ui_fp) < 1)
die ("fread backup file error");
if (strcmp (buf, BACKUP_MAGIC) != 0)
die ("Invalid backup file");
#ifdef __linux__
if (fread (inst_dev, 20, 1, ui_fp) < 1 ||
fread (buf_ldr, SECTOR_SIZE, 1, ui_fp) < 1 ||
fread (&ks, sizeof (ks), 1, ui_fp) < 1 ||
fread (buf_knl, ks, 1, ui_fp) < 1 )
die ("fread backup file error");
devd = open_blk_dev (inst_dev);
lseek (devd, 0, SEEK_SET);
if (write (devd, buf_ldr, SIZE_OF_MBR) != SIZE_OF_MBR)
die ("write %s: %s", inst_dev, strerror (errno));
lseek (devd, SECTOR_SIZE * KNL_LBA, SEEK_SET);
if (write (devd, buf_knl, ks) != ks)
die ("write %s: %s", inst_dev, strerror (errno));
close_blk_dev (devd,inst_dev);
#else
if (fread (&inst_devid, sizeof (inst_devid), 1, ui_fp) < 1 ||
fread (buf_ldr, SECTOR_SIZE, 1, ui_fp) < 1 ||
fread (&ks, sizeof (ks), 1, ui_fp) < 1 ||
fread (buf_knl, ks * 512, 1, ui_fp) < 1)
die ("fread backup file error");
check_dev (inst_devid);
/* Retain current partition table */
disk_io (2, inst_devid, LDR_HEAD, LDR_CYL, LDR_SECT, sect_buf, 1);
memcpy(sect_buf, buf_ldr, SIZE_OF_MBR);
*((word *)(sect_buf + BR_FLAG_OFF))=BR_GOOD_FLAG;
disk_io (3, inst_devid, LDR_HEAD, LDR_CYL, LDR_SECT, sect_buf, 1);
disk_io (3, inst_devid, KNL_HEAD, KNL_CYL, KNL_SECT, buf_knl, ks);
#endif
fclose(ui_fp);
}
Viele Grüße, Blackbird++
Edit2: Ich weiß übrigens noch genau, wie die Partitionstabelle aussah. GPT, 100GB frei, und der Rest TrueCrypt-Partition. Kann jetzt nicht einfach mit GParted das ganze "nachbauen", d.h. neue Partitionstabelle, leere Partition an der entsprechenden Stelle erstellen und das ganze mit TC mounten? Würde das gehen?
Edit3: Jaa!

Ok hat sich dann wohl von selbst erledigt.

Zuletzt bearbeitet: