2,2TB Limit - is it predictable? And some troubleshooting...

  • DNS Benchmark v2 is Finished and Available!
    Guest:
    That's right. It took an entire year, but the result far more accurate and feature laden than we originally planned. The world now has a universal, multi-protocol, super-accurate, DNS resolver performance-measuring tool. This major second version is not free. But the deal is, purchase it once for $9.95 and you own it — and it's entire future — without ever being asked to pay anything more. For an overview list of features and more, please see The DNS Benchmark page at GRC. If you decide to make it your own, thanks in advance. It's a piece of work I'm proud to offer for sale. And if you should have any questions, many of the people who have been using and testing it throughout the past year often hang out here.
    /Steve.
  • Be sure to checkout “Tips & Tricks”
    Dear Guest Visitor → Once you register and log-in please checkout the “Tips & Tricks” page for some very handy tips!

    /Steve.
  • BootAble – FreeDOS boot testing freeware

    To obtain direct, low-level access to a system's mass storage drives, SpinRite runs under a GRC-customized version of FreeDOS which has been modified to add compatibility with all file systems. In order to run SpinRite it must first be possible to boot FreeDOS.

    GRC's “BootAble” freeware allows anyone to easily create BIOS-bootable media in order to workout and confirm the details of getting a machine to boot FreeDOS through a BIOS. Once the means of doing that has been determined, the media created by SpinRite can be booted and run in the same way.

    The participants here, who have taken the time to share their knowledge and experience, their successes and some frustrations with booting their computers into FreeDOS, have created a valuable knowledgebase which will benefit everyone who follows.

    You may click on the image to the right to obtain your own copy of BootAble. Then use the knowledge and experience documented here to boot your computer(s) into FreeDOS. And please do not hesitate to ask questions – nowhere else can better answers be found.

    (You may permanently close this reminder with the 'X' in the upper right.)

SecCon

Arkham Asylum SysOp
Sep 11, 2025
10
0
Sweden
www.conram.it
Hello, Steve thanks for GRC, I have visited your site for different reasons many times over the span of perhaps 20 years or more.
---

After a bit of fiddling with the BIOS I booted Spinrite 6.1 on a Lenovo T480s laptop (W11Pro) and L2 diagnosed its system drive and an attached USB drive.

(Even if the laptop is about 7-8 years old it still runs perfectly, and has BIOS from 2025)
  • The System drive is a 1TB NVME, Samsung 970 Evo Plus.
  • The USB connected drive is a Seagate 1TB Backup Plus Portable Drive.
Both went well. It was just a bit of a warmup for a few other drives.

So I used a dock, this one: Icy Box Cloning Station and placed a 4TB HDD on it, connected it to the computer via USB-C, but after a reboot, and disconnecting the Seagate USB drive, Spinrite only detected 2,2TB of the 4TB drive ( which is a WD4000FYYDZ by the way). On a different computer the full capacity of the drive is properly detected.

Which brings me to my question: while my laptop certainly has a respectable age, its BIOS is updated, can you perhaps explain a bit more on the logic behind this size limitation? I have read a bit on it, and there seems to be no conclusive answer from that post, but I do get it probably depends a lot on the bios capabilities, and in particular its age.

I do have more modern computers, my workstation is a very recent build - only a few months old, but I will try with a Lenovo Yoga X1 that also has updated BIOS and is only 2-3 years old. It's easier to mess with laptops since I do not have a lot of desk space. What do you think?

In theory I could also put the drives I want to diagnose on SuperMicro motherboards and connect via SATA or SAS on one of my servers, but seems a bit overkill.
 
All modern computers that support modern capabilities of USB, have OS level drivers that provide those capabilities. SpinRite is not yet an OS, even though in many senses, it's operating as one. In its case, it's running on top of the BIOS and FreeDOS which together are its OS. FreeDOS, apparently (I am relying on "AI summary" and have not fact checked this) doesn't have USB drivers of its own, so it's relying on whatever you might install into it or what comes from the BIOS.

Here's the AI summary:
No, FreeDOS does not have built-in native support for USB devices, but it can access them using third-party drivers that need to be installed and configured. While you can access a USB drive if the boot process makes it appear as a standard drive through BIOS 13h services, you'll likely need to install and configure the usbdos package for other scenarios, such as when booting from a SATA drive. The success of these drivers depends on your hardware, with the included drivers often limited to UHCI (Universal Host Controller Interface) controllers from Intel or VIA.
 
FreeDOS can only 'see' the 2.2 TB of the 4 TB USB
drive presented to it by the BIOS, a frequent
limitation of USB access.

At least you can test 2.2 TB of the 4 TB drive.

Let us know how it goes.
 
Thanks for the answers.

While I could get a better docking station hoping it might help - Sabrent comes recommended by AI - it is not a safe bet to get around the Freedos limitation.

Another question, I see you refer sometimes to the Spinrite logs, when I look at my logs they do not mention this attempt at detecting the drive, only the successful processing of the other 1TB drives, as mentioned above. Maybe I should have a go at running Spinrite diag as specified here, along with in the documentation: https://gitlab.com/GRC-Community/spinrite-6.1-wiki/-/wikis/Command-Line
 
Which brings me to my question: while my laptop certainly has a respectable age, its BIOS is updated, can you perhaps explain a bit more on the logic behind this size limitation? I have read a bit on it, and there seems to be no conclusive answer from that post, but I do get it probably depends a lot on the bios capabilities, and in particular its age.
When enumerating drives, SpinRite will show internal drives as AHCI or ATA or IDE drives when SpinRite's native drivers are compatible with them. Otherwise, internal drives will enumerate as BIOS drives. External USB drives always enumerate as BIOS drives. When SpinRite 6.1 can use its native drivers, there is NO storage capacity limitation.

In the vast majority of BIOS-DOS 16 bit systems their storage space addressing is limited to addressing 2.2 TB maximum storage space . This applies to any BIOS drive, which would be any external USB drive as well as any internal BIOS drive (such as NVMe, etc.) that SpinRite 6.1 does not have a native driver for. There are a few more modern BIOS that do not have this addressing limitation, but they are rare.

While I could get a better docking station hoping it might help - Sabrent comes recommended by AI - it is not a safe bet to get around the Freedos limitation.
That is correct - It will NOT help. The BIOS is the limiter/arbiter. SpinRite 6.1 (like its venerable predecessor 6.0) is forced to live by strict BIOS limitations.

Last but not least - the 137 GB limit.

During SR 6.1 development an investigation of mysterious SpinRite 6.1 crashes brought to light that certain BIOS firmware contained a bug that only manifested itself when attempting to access a BIOS drive beyond the first 137 GB. When this BIOS firmware bug manifested itself it would randomly write to RAM - something that should NEVER EVER happen. When SpinRite's executable code in RAM was corrupted, SR would crash. Of more serious implication is if a SpinRite data buffer was was written to by the BIOS bug then corrupt data could be written back to the drive being scanned by SpinRite 6.1. To protect against all of this an absolute 137 GB limit was imposed for all BIOS drives.

It was subsequently determined that most BIOS replicate their ROM code to RAM and execute from RAM. SpinRite 6.1 can now detect this and patch the BIOS bug on the fly (i.e. every time SpinRite 6.1 runs) thus allowing the 137 GB limitation to be lifted for BIOS drives. The exception is the very few older systems that execute BIOS code from ROM. When SpinRite detects this the 137 GB limit will be applied for all BIOS drives in these systems because SpinRite 6.1 cannot patch ROM code.
 
So the main reason to get Spinrite was to examine a HDD in a ZFS configuration on a TrueNAS SuperMicro based server.

I have been getting warnings about unreadable sectors and such, I have not dugged in to them too much they were basically this:
Code:
Device: /dev/sdb [SAT], 3 Currently unreadable (pending) sectors.
Device: /dev/sdb [SAT], 2 Offline uncorrectable sectors.
Device: /dev/sdc [SAT], 3 Currently unreadable (pending) sectors.
Device: /dev/sdc [SAT], 1 Currently unreadable (pending) sectors.
Device: /dev/sdc [SAT], 2 Currently unreadable (pending) sectors (changed +1).
Device: /dev/sdc [SAT], 2 Offline uncorrectable sectors.
Device: /dev/sdc [SAT], 2 Currently unreadable (pending) sectors.
Device: /dev/sdc [SAT], 1 Offline uncorrectable sectors.
Device: /dev/sdb [SAT], 2 Currently unreadable (pending) sectors.
Device: /dev/sdb [SAT], 1 Offline uncorrectable sectors.
Device: /dev/sdb [SAT], 13 Currently unreadable (pending) sectors.
Device: /dev/sda [SAT], 13 Currently unreadable (pending) sectors.
Device: /dev/sda [SAT], 7 Currently unreadable (pending) sectors.
Device: /dev/sda [SAT], 13 Offline uncorrectable sectors.
Device: /dev/sdb [SAT], 7 Currently unreadable (pending) sectors.
Device: /dev/sdb [SAT], 13 Offline uncorrectable sectors.

Currently running an extended SMART test to see if that was dealt with.

So what did Spinrite do?

This:
+==========================================================================+
| SpinRite 6.1, beginning level 2 operation at 4:33 pm on Sep 12th, 2025. |
|--------------------------------------------------------------------------|
| From 0.0000% sect: 0 To 100.0000% sect: 7,814,037,167 |
|==========================================================================|
| WDC WD4000FYYZ-01UL1B3 |
|--------------------------------------------------------------------------|
| access mode: AHCI serial number: WD-WCC131928431 |
| pci bus addr: 0:23:0 firmware rev: 01.01K04 |
| adapter vendor: Intel Corporation rotation rate: 7200 |
| vendor-device: 8086-A102 ata/atapi spec: ATA-8 |
| bios drive: 82h drv technology: generic |
| attached port: 3 lba in use: yes, 48-bit LBA |
| port speed: SATA 3 at 6.0Gb/s |
| max driv speed: SATA 3 at 6.0Gb/s multi-word dma: -/2 (unknown md) |
| ultradma modes: 5/6 (100.0 MB/s) |
| sector count: 7,814,037,168 available pio: 4/4 (16.67 MB/s) |
| byte count: 4,000,787,030,016 |
| features: SMART SECURE POWR |
| transfers: 32,768 sector long ops: no : WCACH LOOKAHD HPA |
| AHCI speed: 148,633,061 byte/s feature detail: 746B7D69 7469BC49 |
|==========================================================================|
| Events |
|--------------------------------------------------------------------------|
| Sector 1,843,987,253 (23.5983%) After a minor problem reading this |
| sector occurred and a repeated attempt succeeded, this sector has been |
| re-written. |
|--------------------------------------------------------------------------|
| Sector 1,844,003,269 (23.5985%) ALL DATA was completely recovered from |
| this damaged sector. |
|--------------------------------------------------------------------------|
| Sector 1,844,054,133 (23.5992%) ALL DATA was completely recovered from |
| this damaged sector. |
|--------------------------------------------------------------------------|
| Sector 1,844,070,149 (23.5994%) After a minor problem reading this |
| sector occurred and a repeated attempt succeeded, this sector has been |
| re-written. |
|--------------------------------------------------------------------------|
| Sector 1,844,088,981 (23.5996%) ALL DATA was completely recovered from |
| this damaged sector. |
|==========================================================================|
| Level: 2 Graphic Status Display |
|==========================================================================|
| :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: |
| :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: |
| :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: |
| :::::::::::::::::::::R:::::::::::::::::::::::::::::::::::::::::::::::::: |
| :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: |
| :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: |
| :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: |
| :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: |
| :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: |
| :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: |
| :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: |
| :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: |
| :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: |
| :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: |
|--- work ---- remaining --- completed +------- sector status key ---------|
| megabytes: 0.000 4,000,787 | .oO analyzing | R recovered |
| %: 0.000% 100.000%| . unprocessed | B defective |
| time: 0:00:00 8:17:00 | : processed | U unrecovered |
|==========================================================================|
| Final Sector Event Counts |
|--------------------------------------------------------------------------|
| command timeout: 0 command aborted: 0 |
| comm/cable errs: 0 not recoverable: 0 |
| minor troubles: 2 sect neverfound: 0 |
| dynastat recovr: 3 defective sectr: 0 |
|==========================================================================|
| End-of-Run SMART System Status |
|--------------------------------------------------------------------------|
| monitored param margin current/max raw data |
| ECC corrected 0 :::::::::::::::::::::::::::::: 149/149 00000000000000 |
| rd chan margin - |
| relocated sect 0 :::::::::::::::::::::::::::::: 60/60 00000000000000 |
| realloc events 0 :::::::::::::::::::::::::::::: 200/200 00000000000000 |
| seek errors 0 :::::::::::::::............... 100/200 00000000000000 |
| recal retries 0 :::::::::::::::::::::::::::::: 100/100 00000000000000 |
| cabling errors 0 :::::::::::::::::::::::::::::: 200/200 00000000000000 |
| uncorrectable 0 :::::::::::::::::::::::::::::: 200/200 0000000000000D |
| write errors 0 :::::::::::::::::::::::::::::: 200/200 0000000000001B |
| command timeout - |
| pending sectors 0 :::::::::::::::::::::::::::::: 200/200 00000000000002 |
| read retries - |
| total writes - |
| write failures - |
| wear leveling - |
| remaining life - |
| realloc space - |
|--------------------------------------------------------------------------|
| drive temperature: 45'C/113'F |
|==========================================================================|
| SpinRite 6.1, level 2 operation completed at 12:50 am on Sep 13th, 2025. |
+==========================================================================+

I do not really know the result yet, but hopefully it found something related to the errors and corrected them, but I know too little about HDD geometry to know for sure, again, waiting for test results.
 
Congrats - SpinRite saved the day, and tested ALL 4TB.

SpinRite's forte is on ATA-attached drives:

|==========================================================================|
| Events |
|--------------------------------------------------------------------------|
| Sector 1,843,987,253 (23.5983%) After a minor problem reading this |
| sector occurred and a repeated attempt succeeded, this sector has been |
| re-written. |
|--------------------------------------------------------------------------|
| Sector 1,844,003,269 (23.5985%) ALL DATA was completely recovered from |
| this damaged sector. |
|--------------------------------------------------------------------------|
| Sector 1,844,054,133 (23.5992%) ALL DATA was completely recovered from |
| this damaged sector. |
|--------------------------------------------------------------------------|
| Sector 1,844,070,149 (23.5994%) After a minor problem reading this |
| sector occurred and a repeated attempt succeeded, this sector has been |
| re-written. |
|--------------------------------------------------------------------------|
| Sector 1,844,088,981 (23.5996%) ALL DATA was completely recovered from |
| this damaged sector. |
|==========================================================================|


But then:

| drive temperature: 45'C/113'F |

... seems a little hot to me, so I'd use supplemental cooling fans to keep it at room temperature.

My rule is: if I'm comfortable, the drive is probably comfortable, I'd probably be uncomfortable at 45'C/113'F !

Thanks for reporting the results.
 
A few hours later.
  • Device: /dev/sda [SAT], 13 Offline uncorrectable sectors.
So Spinrite corrected something but not everything.

I am doing some more test to post here FYI, but from what I gather and also consulting AI, it seems this drive might be dying a slow and agonizing death. Yes I have a spare.

Extended SMART for now:

Code:
root@truenas[~]# smartctl -a /dev/sda
smartctl 7.4 2023-08-01 r5530 [x86_64-linux-6.12.15-production+truenas] (local build)
Copyright (C) 2002-23, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF INFORMATION SECTION ===
Model Family:     Western Digital Re
Device Model:     WDC WD4000FYYZ-01UL1B3
Serial Number:    WD-WCC131928431
LU WWN Device Id: 5 0014ee 2b4a28291
Firmware Version: 01.01K04
User Capacity:    4,000,787,030,016 bytes [4.00 TB]
Sector Size:      512 bytes logical/physical
Rotation Rate:    7200 rpm
Device is:        In smartctl database 7.3/5528
ATA Version is:   ATA8-ACS (minor revision not indicated)
SATA Version is:  SATA 3.0, 6.0 Gb/s (current: 6.0 Gb/s)
Local Time is:    Sun Sep 14 09:28:35 2025 CEST
SMART support is: Available - device has SMART capability.
SMART support is: Enabled

=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED

General SMART Values:
Offline data collection status:  (0x82) Offline data collection activity
                                        was completed without error.
                                        Auto Offline Data Collection: Enabled.
Self-test execution status:      ( 121) The previous self-test completed having
                                        the read element of the test failed.
Total time to complete Offline
data collection:                (47520) seconds.
Offline data collection
capabilities:                    (0x7b) SMART execute Offline immediate.
                                        Auto Offline data collection on/off support.
                                        Suspend Offline collection upon new
                                        command.
                                        Offline surface scan supported.
                                        Self-test supported.
                                        Conveyance Self-test supported.
                                        Selective Self-test supported.
SMART capabilities:            (0x0003) Saves SMART data before entering
                                        power-saving mode.
                                        Supports SMART auto save timer.
Error logging capability:        (0x01) Error logging supported.
                                        General Purpose Logging supported.
Short self-test routine
recommended polling time:        (   2) minutes.
Extended self-test routine
recommended polling time:        ( 513) minutes.
Conveyance self-test routine
recommended polling time:        (   5) minutes.
SCT capabilities:              (0x70bd) SCT Status supported.
                                        SCT Error Recovery Control supported.
                                        SCT Feature Control supported.
                                        SCT Data Table supported.

SMART Attributes Data Structure revision number: 16
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  1 Raw_Read_Error_Rate     0x002f   200   177   051    Pre-fail  Always       -       0
  3 Spin_Up_Time            0x0027   206   135   021    Pre-fail  Always       -       8675
  4 Start_Stop_Count        0x0032   100   100   000    Old_age   Always       -       222
  5 Reallocated_Sector_Ct   0x0033   200   200   140    Pre-fail  Always       -       0
  7 Seek_Error_Rate         0x002e   100   253   000    Old_age   Always       -       0
  9 Power_On_Hours          0x0032   076   076   000    Old_age   Always       -       17987
 10 Spin_Retry_Count        0x0032   100   100   000    Old_age   Always       -       0
 11 Calibration_Retry_Count 0x0032   100   100   000    Old_age   Always       -       0
 12 Power_Cycle_Count       0x0032   100   100   000    Old_age   Always       -       115
 16 Total_LBAs_Read         0x0022   003   197   000    Old_age   Always       -       187614657704
183 Runtime_Bad_Block       0x0032   100   100   000    Old_age   Always       -       0
192 Power-Off_Retract_Count 0x0032   200   200   000    Old_age   Always       -       107
193 Load_Cycle_Count        0x0032   173   173   000    Old_age   Always       -       82074
194 Temperature_Celsius     0x0022   111   089   000    Old_age   Always       -       41
196 Reallocated_Event_Count 0x0032   200   200   000    Old_age   Always       -       0
197 Current_Pending_Sector  0x0032   200   200   000    Old_age   Always       -       2
198 Offline_Uncorrectable   0x0030   200   200   000    Old_age   Offline      -       13
199 UDMA_CRC_Error_Count    0x0032   200   200   000    Old_age   Always       -       0
200 Multi_Zone_Error_Rate   0x0008   200   200   000    Old_age   Offline      -       27

SMART Error Log Version: 1
No Errors Logged

SMART Self-test log structure revision number 1
Num  Test_Description    Status                  Remaining  LifeTime(hours)  LBA_of_first_error
# 1  Extended offline    Completed: read failure       90%     17962         1844011277
# 2  Short offline       Completed: read failure       90%     17962         1844011277
# 3  Extended offline    Completed without error       00%     11866         -
# 4  Extended offline    Completed: read failure       80%     11817         1844005939
# 5  Conveyance offline  Completed without error       00%      7680         -
1 of 3 failed self-tests are outdated by newer successful extended offline self-test # 3

SMART Selective self-test log data structure revision number 1
 SPAN  MIN_LBA  MAX_LBA  CURRENT_TEST_STATUS
    1        0        0  Not_testing
    2        0        0  Not_testing
    3        0        0  Not_testing
    4        0        0  Not_testing
    5        0        0  Not_testing
Selective self-test flags (0x0):
  After scanning selected spans, do NOT read-scan remainder of disk.
If Selective self-test is pending on power-up, resume after 0 minute delay.
 
Oh and

Code:
root@truenas[~]# badblocks -nsv -b 4096 -c 64 -o /root/badblocks-sda2.log /dev/sda
/dev/sda is apparently in use by the system; it's not safe to run badblocks!

Yes I get the logic. chkdsk /r allows me to continue using a drive avoiding its symptoms, zfs want me to replace the drive for safety.
Well, got news for ZFS, the drive is mirrored, I do not care about some minor puny errors. Ignore them and keep working. Dammit.

Ah well, Spinrite Level 3 perhaps.
 
@SecCon wrote "... replace LFF for SFF drives ..."

Google AI-assisted search results: LFF (Large
Form Factor) refers to the physical size of a
server drive bay, with LFF typically supporting
3.5-inch hard drives, while SFF (Small Form
Factor) refers to 2.5-inch drives. You cannot
directly use an SFF drive in an LFF bay
;
instead, you need a converter or adapter kit
to bridge the physical size difference, although
some modern servers and components may
have specific LFF bays designed to accept SFF
drives with the correct carrier.


In my experience, 2.5" HDDs transfer data at
1/2 the responsiveness of otherwise equivalent
3.5" HDDs.

SSDs lose their responsiveness no matter what
I do, so for me they are WORMs - write once
read many - and read may be as slow as
5 MB/s, but generally does read ... eventually.

Remember 5" HDDs? ;-)
 
No, I do not recall 5" HDD, I do recall 5,25" floppies though, we used them for a till/pos system back in the 90's.

I would use 2,5" SSD's, not HDD's.

In any case, to somehow sum up this thread, I am not getting rid of most of the SMART warnings on the HDD - despite Spinrite
  • Device: /dev/sda [SAT], Self-Test Log error count increased from 2 to 3.
  • Device: /dev/sda [SAT], 2 Currently unreadable (pending) sectors.
  • Device: /dev/sda [SAT], 13 Offline uncorrectable sectors.
- so I will check my spare and should perhaps use it to replace the flawed drive.
 
If unreadable (pending) sectors and uncorrectable
sectors can't be recovered or reallocated, the drive
is toast.

SPINRITE NORAMTEST LEVEL 5 DYNASTAT 0

or

SPINRITE NORAMTEST LEVEL 5 DYNASTAT 0 SKIPVERIFY

... will either do the trick and make the drive
usable again, or throw the drive off-line as toast.

Let us know how it goes.
 
If unreadable (pending) sectors and uncorrectable
sectors can't be recovered or reallocated, the drive
is toast.

SPINRITE NORAMTEST LEVEL 5 DYNASTAT 0

or

SPINRITE NORAMTEST LEVEL 5 DYNASTAT 0 SKIPVERIFY

... will either do the trick and make the drive
usable again, or throw the drive off-line as toast.

Let us know how it goes.
Running that now
 
Sure there's more - REPEAT:

Fast and only fix errors:

SPINRITE NORAMTEST LEVEL 2 DYNASTAT 0 SKIPVERIFY

Slow and fix and rewrite everything again;

SPINRITE NORAMTEST LEVEL 5 DYNASTAT 0 SKIPVERIFY

What else is the drive doing, anyway? ;-)