| Die Problemzone Spinnt der Rechner mal wieder? Stellt eure Fragen hier und es wird geholfen. |
Diskussion: Smart Boot Manager deinstallieren! Partitionstabelle im Forum Die Problemzone, in der Kategorie PC Foren; Anzeige Hallo, ich bräuchte mal recht dringend eure Hilfe. [EDIT: Ok, schon erledigt. Siehe unten.] Ich habe mir vorhin den ...
![]() |
| | #1 (permalink) |
| Stammuser Registriert seit: 25.02.10 ![]() Likes: 6 | Smart Boot Manager deinstallieren! Partitionstabelle Anzeige 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? ![]() 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);
} 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. ("rofl") Geändert von Blackbird++ (15.10.10 um 09:35 Uhr) Grund: Erledigt! :-) |
| | |
![]() |
| - Anzeige - | |
| |
| Themen-Optionen | |
| Ansicht | |
| |