AlphaKaninchen
Commander
- Registriert
- Mai 2018
- Beiträge
- 2.936
Hallo ich habe eine 12TB Toshiba MG07, ich habe auf dieser mit GNOME Disks ein Secure Erase gestartet. GNOME Disks nutzt im Hintergrund udisks, es dürfte also dieser Code ausgeführt worden sein:
https://github.com/storaged-project/udisks/blob/master/src/udiskslinuxdriveata.c
Wenn ich es richtig lese ist das Passwort 'xxxx' (z.B. für den Fall eines Stromausfalls)
Mein Problem ist jetzt das ich erwartet habe dass recht schnell geht, (meine LaCie / Seagate HDDs machen das in Sekunden) mir wird als Prognose nun 1 Monat 15 Tage angezeigt. Erstmal wie realistisch ist diese Prognose? Und zweitens gibt es einen weg dem Controller zusagen Stop Secure Erase?
https://github.com/storaged-project/udisks/blob/master/src/udiskslinuxdriveata.c
C:
/* OK, all checks done, let's do this thing! */
/* First, set up a Job object to track progress */
num_minutes = enhanced ? 2 * GUINT16_FROM_LE (identify.words[90]) : 2 * GUINT16_FROM_LE (identify.words[89]);
job = udisks_daemon_launch_simple_job (daemon,
UDISKS_OBJECT (object),
enhanced ? "ata-enhanced-secure-erase" : "ata-secure-erase",
caller_uid, NULL);
udisks_job_set_cancelable (UDISKS_JOB (job), FALSE);
/* A value of 510 (255 in the IDENTIFY DATA register) means "erase
* is expected to take _at least_ 508 minutes" ... so don't attempt
* to predict when the job is going to end and don't report progress
*/
if (num_minutes != 510)
{
udisks_job_set_expected_end_time (UDISKS_JOB (job),
g_get_real_time () + num_minutes * 60LL * G_USEC_PER_SEC);
udisks_job_set_progress_valid (UDISKS_JOB (job), TRUE);
timeout_id = g_timeout_add_seconds_full (G_PRIORITY_DEFAULT,
1,
on_secure_erase_update_progress_timeout,
g_object_ref (job),
g_object_unref);
}
/* Second, set the user password to 'xxxx' */
{
/* ATA8: 7.45 SECURITY SET PASSWORD - F1h, PIO Data-Out */
guchar buf[512];
UDisksAtaCommandInput input = {.command = 0xf1, .buffer = buf, .buffer_size = sizeof (buf)};
UDisksAtaCommandOutput output = {0};
memset (buf, 0, sizeof (buf));
memcpy (buf + 2, pass, strlen (pass));
if (!udisks_ata_send_command_sync (fd,
-1,
UDISKS_ATA_COMMAND_PROTOCOL_HOST_TO_DRIVE,
&input,
&output,
&local_error))
{
g_prefix_error (&local_error, "Error sending ATA command SECURITY SET PASSWORD: ");
goto out;
}
}
clear_passwd_on_failure = TRUE;
udisks_notice ("Commencing ATA%s secure erase of %s (%s). This operation is expected to take at least %d minutes to complete",
enhanced ? " enhanced" : "",
device_file,
udisks_drive_get_id (_drive),
num_minutes);
/* Third... do SECURITY ERASE PREPARE */
{
/* ATA8: 7.42 SECURITY ERASE PREPARE - F3h, Non-Data */
UDisksAtaCommandInput input = {.command = 0xf3};
UDisksAtaCommandOutput output = {0};
if (!udisks_ata_send_command_sync (fd,
-1,
UDISKS_ATA_COMMAND_PROTOCOL_NONE,
&input,
&output,
&local_error))
{
g_prefix_error (&local_error, "Error sending ATA command SECURITY ERASE PREPARE: ");
goto out;
}
}
/* Fourth... do SECURITY ERASE UNIT */
{
/* ATA8: 7.43 SECURITY ERASE UNIT - F4h, PIO Data-Out */
guchar buf[512];
UDisksAtaCommandInput input = {.command = 0xf4, .buffer = buf, .buffer_size = sizeof (buf)};
UDisksAtaCommandOutput output = {0};
memset (buf, 0, sizeof (buf));
if (enhanced)
buf[0] |= 0x02;
memcpy (buf + 2, pass, strlen (pass));
if (!udisks_ata_send_command_sync (fd,
G_MAXINT, /* disable timeout */
UDISKS_ATA_COMMAND_PROTOCOL_HOST_TO_DRIVE,
&input,
&output,
&local_error))
{
g_prefix_error (&local_error, "Error sending ATA command SECURITY ERASE UNIT (enhanced=%d): ",
enhanced ? 1 : 0);
goto out;
}
}
Wenn ich es richtig lese ist das Passwort 'xxxx' (z.B. für den Fall eines Stromausfalls)
Mein Problem ist jetzt das ich erwartet habe dass recht schnell geht, (meine LaCie / Seagate HDDs machen das in Sekunden) mir wird als Prognose nun 1 Monat 15 Tage angezeigt. Erstmal wie realistisch ist diese Prognose? Und zweitens gibt es einen weg dem Controller zusagen Stop Secure Erase?