Other programs are saying my USB drive is full but not really, folders automatically corrupted, etc [duplicate]

Recently, I bought an USB flash drive which has a cool design.

The seller said it is 256GB however, I've already known that capacity would be fake. Anyway, I bought it cause of its cool design and want to use this USB flash drive anyway.

What should I do? I've tried to find a proper tool(vid 1908 / pid 1320) but couldn't. Can I repair this through Low level format? Or partitioning this through Linux?


Solution 1:

Formatting will neither tell you the drive's true capacity nor set its reported capacity to the actual. Writes to all reported sectors will apparently succeed, so the /P option does not help.

As Bob said in a previous comment, these drives re-use the same blocks over and over again. They do not exactly wrap around as this would soon corrupt the MBR and the partition table in block 0, resulting inj Windows complaining that the drive needs to be formatted. But they do allow writes to the non-existent space to succeed. And if you read back the data you just wrote, that'll work too, because reads to non-existent space are mapped to the same actual blocks as the writes were. But if you try to also read data you wrote earlier, you'll get data that you wrote later, even though you thought they were being written to different sectors.

In normal use the symptom is that when you put "too much" data on the drive, the file system metadata becomes corrupt. (But usually not the partition table, as the scumbags who made these things were clever enough to not re-use the first few blocks.)

Sorry, but you can't "low level format" a USB drive. There are just aren't any commands in the USB mass storage class to request a low level format. Nor, btw, can you "low level format" a SATA or PATA ("IDE") drive. Consumer "low level formatting" was possible with ST506 and ESDI drives, not SCSI or ATA. Again, there just aren't any commands in the SCSI or ATA command set that would let you do it. Low-level formatting is actually done and tested at the factory, before the platters are assembled into the final drive.

To have your fake USB drive report its actual capacity (assuming you would want to trust it even then; I wouldn't) you would have to rewrite the device's firmware. This is almost certainly not possible from the USB interface either.

To find out what the true amount of storage is, there is a tool called h2testw from heise.de. It writes a unique pattern to each block, and after each write, checks some of the earliest blocks written to see that they still contain the pattern it originally wrote. This detects fake drives very quickly. (And, RPL, this will provide the "reference" you asked for.)

You will probably find that the drive's true capacity is so small that it is not worth bothering with.

Solution 2:

You might try f3 (Fight Flash Fraud) toolset for Linux.

Run f3probe first to check the real drive size, then f3fix to create a partition which is just as big as the usable size. Afterwards test the partition well (f3write/f3read).