Prior to this patch if S key held down keyboard would
be unresponsive for x seconds.
Where x = number of S keystrokes x 3.
Now keys are delayed for no longer than 3 seconds
while warning message is displayed, long enough for
the user to read the warning message.
If you do a ctrl c to exit nwipe before you have
even started a wipe, it will be reported in the logs
that there are fatal or non fatal errors. This is
incorrect as no wipe has even been started.
This error is only relevant to when using ctrl c
before a wipe has started and not after a wipe has
started.
Basically the variables that hold the errors are
in an indeterminate state before wiping begins and
in the case of a user abort we mistakenly checked
those values and reported. They should only be used
after a thread has completed or failed when their
values are then valid.
Now if you exit nwipe before any wiping started
there are no fatal/non fatal errors reported.
If a user attempts to start a wipe but hasn't yet
selected any drives for wiping, a warning message
will now appear for a few seconds suggesting
they select a drive.
Prior to this patch, if you tried to start a wipe
without selecting a drive, nwipe would immediately
display a message saying the wipe was complete
and press enter to exit. You had no choice but to
exit and restart nwipe.
I have come across a new user that couldn't start a wipe, until it was
pointed out that to start a wipe you needed to type shift S. While this
is often true, shift S doesn't start a wipe if you have caps lock on. To
be precise you need to type a capital S. Confusing to a new user because
if they have been told to type shift S but their caps lock is on, then
nothing happens. Also how would you know you are supposed to type a
capital S when the key info puts all keys in caps.
The fix for this is to trap the lower case s and then print a message on
the status line that says "Use capital S to start a wipe". This message
could remain on the status line for 3 seconds then revert back to the
standard key info.
The use of capital S is to try to reduce the likelihood of an accidental
wipe you didn't mean to start, however, I've always thought that maybe
we should have a 'are you sure ?' after the user types 'S' .
A non issue once you're familiar with nwipe but probably irritating to
a new user.
Fix a minor error in the reporting of the
discs total number of blocks. This only
affects reporting to the log file and
does not affect the programs operation.
We already determine the bus type,
ATA, USB, NVME, VIRT (loop) etc
and display the bus type on the GUI.
libparted prefixes the model number
with ATA which we don't need, especially
as we try to keep the drive display length
to a maximum of 80 characters.
Previously if a drive failed during
a multiple drive wipe and the user
decided to abort nwipe to say remove
the drive and start over, the user would
use CONTROl-C to abort. This would be
reflected in the summary table as ALL drives
having been aborted including the drive that
failed. It makes more sense for a failed drive
to be marked as failed in the summary table
even though the user aborted the wipe.
This patch fixes that, so that if a drive failed
it reflects that drives status in the summary
even if the user aborts the wipe.
If a USB device generated a particular error
code from smartmontools, the --nousb option
incorrectly did not exclude it from the
enumerated drives.
This has now been corrected.
This was a very obscure segmentation fault I
stumbled across while testing the drive
selection window. I confirmed it exists
in all versions at least going back prior
to 0.24 and maybe a lot earlier.
It was a very tricky bug to track down as you
had to do some very specific things to cause it to
occur. Probably most people would not have seen
it, however for those that did, this was what you
needed to do to trigger it.
1. First you had to be wiping more than one drive.
2. Then you needed to scroll down to the bottom
drive in the list.
3. You then needed to minimise the vertical height
of the terminal so you could no longer see the
selected drive.
4. Then you needed to expand the vertical height
of the terminal. This last step would trigger a
segmentation fault and crash nwipe.
So, the theory. nwipe uses four variables to
allow you to scroll through multiple displayed
drives. These four variables are:
count = the number of enumerated drives.
slots = the number of available horizontal lines
to display the drives. The number of slots
varies depending upon vertical resizing
of the terminal. So slots is calculated
in real time.
focus = which drive the GUI '>' pointer is pointing to.
offset = A value between 0 and slots that describes
what drives are displayed in the available
slots.
offset is then used along with i in a for loop to index
the drive contexts. This is where the segfault
occurred.
The calculation failed to take correct account of a varying
number of slots so in the condition described above the
offset would create an index that was out of bounds.
So first I fixed the miss calculation and second I placed
an if statement that acts as a bounds checker so if
ever this code is changed by someone in the future and
they break the calculation the bounds checker 'if' statement
will log the details of the error and prevent a segfault which
is far easier to debug.
Added NVME and VIRT to device type table.
VIRT are virtual devices such as loop devices
created with losetup.
NVME for solid state storage devices.
Due to the longer device names used for NVME, I will
need to do some work on the device name in the selection
window so column alignment is maintained.
Benefits include:
1. Standard fixed width output for disk
throughput, combined throughput and disk
capacity. Allows for better column alignment
when wiping multiple drives.
2. Removal of about 40 lines of duplicated code.
For drives that are wiping the percentage
completion is displayed. To retain column
alignment when wiping multiple drives, the
percentage values from 0.01% to 9.99% are
displayed with a leading space, i.e
[ 9.99%, then 10.00% to 99.99% is displayed
as, i.e [10.01%, etc..
When wiping a drive a status message is displayed
that show [writing] or [syncing] or [verifying] or
[blanking] etc. Previously there were two bracketed
fields, [syncing] occupied one field and all the others
occupied the other field.
To conserve screen space they all occupy the same
bracketed field.
The bracketed field is also now a fixed length of
9 characters padded with spaces as necessary to maintain
column alignment when wiping multiple drives simultaneously.
a wipe has finished.
This problem was not seen when wiping multiple drives
of the same size as they all ended at the same time.
Also not seen when wiping a single drive, but if you
wiped multiple drives of different sizes where the
drive wipes ended at different times then you could
see the throughput being calculated as steadily dropping
for a drive that had completed it's wipe.
Also fixed overall throughput. When all wipes had completed
overall throughput showed the throughput of the last drive
that finished. It should show 0 B/s as all wiping had
ceased. In the log table you will see individual drive
throughput and overall throughput which is the sum of
all the drives throughputs.
If you use the option --nousb, all USB devices will be ignored.
They won't show up in the GUI and they won't be wiped if you use
the --nogui --autonuke command. They will even be ignored if you
specifically name them on the command line.
I've always wondered, when you first view
all the drives, why drives above 999GB appeared
in their GB nomenclature instead of TB. For
instance a 2TB drive would appear as 2000GB.
Unlike other places in nwipe that does a proper
job of describing capacity just this one location
in the program was wrong.
This information was obtained by a call to a function
in libparted. Maybe when libparted was written there
was no such thing as a TByte drive ?? Who knows, so
anyway it was far easier to use nwipes build in function
called 'determine_C_B_nomenclature()' This provides us
with the correct nomenclature that is a fixed number of
digits (three) and prefixed with spaces so the length
is always the same. In the GUI this gives a nice
list when viewing multiple drives that appears in neat
columns.
Add serial number support for USB devices for USB
to IDE/SATA adapters. Note this will only work
with USB IDE/SATA adapters that support ATA pass
through. See #149 for further details of
supported devices.
This patch requires readlink and smartmontools (smartctl)
to be installed. If not installed the serial number for
supported USB hardware will be missing.
The device type, i.e USB or ATA is now shown on the selection
and wipe windows.
In Debian Sid dmidecode is not found as /sbin is not
searched when nwipe only specifies 'dmidecode', so
if it fails then it will next try /sbin/dmidecode
which is where it's normally located if it's installed.
In ubuntu etc, the sudo environment is setup so /sbin
is automatically searched.
I don't know if it's just me, but I'm not keen on the
way the status line length changes every few seconds
depending on whether nwipe is syncing or not. So
while still retaining the syncing message I think
it looks better if when not syncing, [syncing] is
replaced with [-------]. This keeps the status line
length pretty much constant and I find it easier on
my eyes.
Fix throughput so it shows the average throughput
calculated from the start of the wipe.
Because we currently use cached access to the disks
initially for a few seconds or minute the throughput looks high
as nwipes writes are cached in memory before being written to disc.
When we change to a non cached or nwipe buffered model the
throughput will reflect a throughput that is actual
disc throughput.
Using an averaged throughput means that when the wipe finishes it will show
a higher value than the previous calculation but this new calculation is the
actual averaged speed of the wipe and reflects a value that is closer to what
you would expect a given drive to exhibit.
For instance a 160GB WD1600AAJS using Dod-S, B+VL, using the old
calculation would finish with a throughput of 48MB/s, using the
new calculation it finishes with a throughput of 76MB/s. This was tested
over multiple wipes and multiple rounds and gave consistently similiar
results.
Throughput is not so accurate on small loop drives due to the fact the drive
is so small it fits within CPU memory so when reading back to verify your're
actually reading back from cache not the disk. Another reason I want to move
to non cached I/O and have nwipe manage buffering and size of block writes.
If a sudo kill -s USR1 (Nwipe's PID) is issued
on the command line while nwipe is operating in
--nogui mode, ETA is now displayed along with
percentage completion, pass and round information.
Note! Because we rely upon cached I/O at the moment
the calculated ETA early in the wipe is very inaccurate
but becomes more accurate as CPU memory cache is filled.
If the system is shutdown while nwipe is still
wiping, the duration calculation would be
incorrect. This patch fixes that problem, so for
instance if a UPS signals the system running nwipe to
shutdown, nwipe typically traps that signal and
exits in an orderly manner. The log summary
is generated showing the wipe was aborted and
the wipe duration shows a valid value i.e the
elapsed time since the start of the wipe.
Add a summary table to the log that shows each drives status
i.e. erased or failed, throughput, duration of wipe, model,
serial no etc. In particular it benefits those that wipe many
drives simultaneously in rack servers. At a glance any failed
drives can be seen without having to browse back through the
log. Especially useful in --nogui mode, but also useful in GUI
mode.
Add a spinner to the GUI for each drive being wiped.
When nwipe is syncing the percentage completion pauses,
having a spinner gives a clear indication that the wipe
is still running. Each devices spinner disappears on completion
of a given devices wipe.