0

I'm having issues with a cheap USB drive I just bought. This is what I've done so far.

First, after checking its device id, I wiped it:

$ sudo dd status=progress if=/dev/zero of=/dev/sdi
4027441664 bytes (4.0 GB, 3.8 GiB) copied, 1334 s, 3.0 MB/s    
dd: writing to '/dev/sdi': No space left on device
7866369+0 records in
7866368+0 records out
4027580416 bytes (4.0 GB, 3.8 GiB) copied, 1462.23 s, 2.8 MB/s

Then I created a partition on it:

$ sudo fdisk /dev/sdi

Welcome to fdisk (util-linux 2.29.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table.
Created a new DOS disklabel with disk identifier 0xd899fea4.

Command (m for help): n
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): 

Using default response p.
Partition number (1-4, default 1): 
First sector (2048-7866367, default 2048): 
Last sector, +sectors or +size{K,M,G,T,P} (2048-7866367, default 7866367): +2G

Created a new partition 1 of type 'Linux' and of size 2 GiB.

Then I made it FAT:

Command (m for help): t
Selected partition 1
Partition type (type L to list all types): c
Changed type of partition 'Linux' to 'W95 FAT32 (LBA)'.

Command (m for help):

Then I created a second partition:

Command (m for help): n
Partition type
   p   primary (1 primary, 0 extended, 3 free)
   e   extended (container for logical partitions)
Select (default p): 

Using default response p.
Partition number (2-4, default 2): 
First sector (4196352-7866367, default 4196352): 
Last sector, +sectors or +size{K,M,G,T,P} (4196352-7866367, default 7866367): 

Created a new partition 2 of type 'Linux' and of size 1.8 GiB.

Then I made it also FAT:

Command (m for help): t
Partition number (1,2, default 2): 
Partition type (type L to list all types): c

Changed type of partition 'Linux' to 'W95 FAT32 (LBA)'.

Then I made the second partition bootable:

Command (m for help): a
Partition number (1,2, default 2): 

The bootable flag on partition 2 is enabled now.

And then I saved it after checking everything was all right:

Command (m for help): p
Disk /dev/sdi: 3.8 GiB, 4027580416 bytes, 7866368 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xd899fea4

Device     Boot   Start     End Sectors  Size Id Type
/dev/sdi1          2048 4196351 4194304    2G  c W95 FAT32 (LBA)
/dev/sdi2  *    4196352 7866367 3670016  1.8G  c W95 FAT32 (LBA)

Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

Then I created the filesystems:

$ sudo mkfs.vfat /dev/sdi1
mkfs.fat 4.1 (2017-01-24)
$ sudo mkfs.vfat /dev/sdi2
mkfs.fat 4.1 (2017-01-24)

Then I tried to mount them and this is where I found the problem:

$ sudo mount /dev/sdi1 /mnt/1
$ sudo mount /dev/sdi2 /mnt/2
mount: wrong fs type, bad option, bad superblock on /dev/sdi2,
       missing codepage or helper program, or other error

       In some cases useful info is found in syslog - try
       dmesg | tail or so.

As you can see, I'm not able to mount the second partition. So first I checked that /mnt/2 does exist:

$ tree /mnt
/mnt
├── 1
├── 2
├── 3
└── laura

4 directories, 0 files

And then I tried changing back the bootable flag, to no avail:

$ sudo fdisk /dev/sdi

Welcome to fdisk (util-linux 2.29.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help): a
Partition number (1,2, default 2): 

The bootable flag on partition 2 is disabled now.

Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Re-reading the partition table failed.: Device or resource busy

The kernel still uses the old table. The new table will be used at the next reboot or after you run partprobe(8) or kpartx(8).

$ sudo umount /mnt/1
$ sudo partprobe
$ sudo mount /dev/sdi1 /mnt/1
$ sudo mount /dev/sdi2 /mnt/2
mount: wrong fs type, bad option, bad superblock on /dev/sdi2,
       missing codepage or helper program, or other error

       In some cases useful info is found in syslog - try
       dmesg | tail or so.

Next, I tried changing the partition types:

$ sudo umount /mnt/1
$ sudo fdisk /dev/sdi

Welcome to fdisk (util-linux 2.29.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help): t
Partition number (1,2, default 2): 
Partition type (type L to list all types): 83

Changed type of partition 'W95 FAT32 (LBA)' to 'Linux'.

Command (m for help): t
Partition number (1,2, default 2): 1
Partition type (type L to list all types): 83

Changed type of partition 'W95 FAT32 (LBA)' to 'Linux'.

Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

And created ext4 filesystems:

$ sudo mkfs.ext4 /dev/sdi1
mke2fs 1.43.4 (31-Jan-2017)
/dev/sdi1 contains a vfat file system
Proceed anyway? (y,N) y
Creating filesystem with 524288 4k blocks and 131072 inodes
Filesystem UUID: 25ddfdac-d7eb-4c00-b0fe-c58a46cfac17
Superblock backups stored on blocks: 
    32768, 98304, 163840, 229376, 294912

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done

$ sudo mkfs.ext4 /dev/sdi2
mke2fs 1.43.4 (31-Jan-2017)
/dev/sdi2 contains `ISO-8859 text, with very long lines, with no line terminators' data
Proceed anyway? (y,N) y
Creating filesystem with 458752 4k blocks and 114688 inodes
Filesystem UUID: 5cdf13ed-453a-4947-9a5e-84b32a426648
Superblock backups stored on blocks: 
    32768, 98304, 163840, 229376, 294912

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done 

Please notice that, instead of a vfat filesystem, /dev/sdi2 reportedly contains ''ISO-8859 text, with very long lines, with no line terminators data''.

When I try to mount the partitions, none of them work:

$ sudo mount /dev/sdi1 /mnt/1
mount: wrong fs type, bad option, bad superblock on /dev/sdi1,
       missing codepage or helper program, or other error

       In some cases useful info is found in syslog - try
       dmesg | tail or so.

$ sudo mount /dev/sdi2 /mnt/2
mount: wrong fs type, bad option, bad superblock on /dev/sdi2,
       missing codepage or helper program, or other error

       In some cases useful info is found in syslog - try
       dmesg | tail or so.

So I decided to change their sizes. In order to do that, I deleted the partitions and created them again with different sizes:

$ sudo fdisk /dev/sdi

Welcome to fdisk (util-linux 2.29.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help): d
Partition number (1,2, default 2): 

Partition 2 has been deleted.

Command (m for help): d
Selected partition 1
Partition 1 has been deleted.

Command (m for help): n
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): 

Using default response p.
Partition number (1-4, default 1): 
First sector (2048-7866367, default 2048): 
Last sector, +sectors or +size{K,M,G,T,P} (2048-7866367, default 7866367): +128M

Created a new partition 1 of type 'Linux' and of size 128 MiB.
Partition #1 contains a ext4 signature.

Do you want to remove the signature? [Y]es/[N]o: y

The signature will be removed by a write command.

Command (m for help): n
Partition type
   p   primary (1 primary, 0 extended, 3 free)
   e   extended (container for logical partitions)
Select (default p): 

Using default response p.
Partition number (2-4, default 2): 
First sector (264192-7866367, default 264192): 
Last sector, +sectors or +size{K,M,G,T,P} (264192-7866367, default 7866367): 

Created a new partition 2 of type 'Linux' and of size 3.6 GiB.

Command (m for help): p
Disk /dev/sdi: 3.8 GiB, 4027580416 bytes, 7866368 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xd899fea4

Device     Boot  Start     End Sectors  Size Id Type
/dev/sdi1         2048  264191  262144  128M 83 Linux
/dev/sdi2       264192 7866367 7602176  3.6G 83 Linux

Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

Now I created their ext4 filesystems:

$ sudo mkfs.ext4 /dev/sdi1
mke2fs 1.43.4 (31-Jan-2017)
Creating filesystem with 131072 1k blocks and 32768 inodes
Filesystem UUID: 6ddbd9b9-590d-4566-9bd7-542fe208d3e3
Superblock backups stored on blocks: 
    8193, 24577, 40961, 57345, 73729

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done

$ sudo mkfs.ext4 /dev/sdi2
mke2fs 1.43.4 (31-Jan-2017)
/dev/sdi2 contains `Lotus unknown worksheet or configuration, revision 0x0' data
Proceed anyway? (y,N) y
Creating filesystem with 950272 4k blocks and 237568 inodes
Filesystem UUID: 496ff913-1af7-4b9f-942a-29ae431cc9b2
Superblock backups stored on blocks: 
    32768, 98304, 163840, 229376, 294912, 819200, 884736

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done

Again, notice how /dev/sdi2 reportedly contains ''Lotus unknown worksheet or configuration, revision 0x0 data''

When I tried to mount the partitions, the same problem arised:

$ sudo mount /dev/sdi1 /mnt/1
$ sudo mount /dev/sdi2 /mnt/2
mount: wrong fs type, bad option, bad superblock on /dev/sdi2,
       missing codepage or helper program, or other error

       In some cases useful info is found in syslog - try
       dmesg | tail or so.

Then I tried changing their types back to FAT and creating the fat filesystems:

$ sudo umount /mnt/1
$ sudo fdisk /dev/sdi

Welcome to fdisk (util-linux 2.29.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help): t
Partition number (1,2, default 2): 1
Partition type (type L to list all types): c

Changed type of partition 'Linux' to 'W95 FAT32 (LBA)'.

Command (m for help): t
Partition number (1,2, default 2): 
Partition type (type L to list all types): c

Changed type of partition 'Linux' to 'W95 FAT32 (LBA)'.

Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

$ sudo mkfs.vfat /dev/sdi1
mkfs.fat 4.1 (2017-01-24)
$ sudo mkfs.vfat /dev/sdi2
mkfs.fat 4.1 (2017-01-24)

And then, when I tried to mount them, guess what:

$ sudo mount /dev/sdi1 /mnt/1
$ sudo mount /dev/sdi2 /mnt/2
$ echo "hello" | sudo tee /mnt/2/hi
hello
$ cat /mnt/2/hi
hello

Ta-daaa! It works!

And yet, I need the partitions to have their original sizes. Any ideas? Is this a hardware problem? Is this USB simply too crappy?

2 Answers 2

2

I would suspect that it's a rogue USB with an inflated idea of its own capacity. Get hold of a program that tests the thing to make sure that multiple logical blocks aren't mapped onto the same physical block.

Unfortunately most of these seem to be Windows programs:

https://www.raymond.cc/blog/test-and-detect-fake-or-counterfeit-usb-flash-drives-bought-from-ebay-with-h2testw/

But that was only with a quick Google. I see this, although I haven't tried it:

https://fixfakeflash.wordpress.com/2010/08/20/linux-h2testw-alternative-program-called-f3-by-michel%C2%A0machado/

2
  • I find unlikely that someone would take the effort to create a fake 4-Gb USB drive when these (even from good brands) are for sale for a couple of bucks nowadays. Usually scammers use 2-Gb or 4-Gb drives with a special firmware to create fake 1 Tb drives.
    – dr_
    Commented Jul 18, 2017 at 8:14
  • True, but it could also just be faulty.
    – Bob Eager
    Commented Jul 18, 2017 at 8:21
0

I installed the f3 tools by Michel Machado. As I'm using Arch Linux, I did:

$ cd /tmp
$ git clone https://aur.archlinux.org/f3.git
$ cd f3
$ makepkg -si

Then I used f3probe to test if the USB drive was indeed fake:

$ sudo f3probe /dev/sdi
F3 probe 6.0
Copyright (C) 2010 Digirati Internet LTDA.
This is free software; see the source for copying conditions.

WARNING: Probing normally takes from a few seconds to 15 minutes, but
         it can take longer. Please be patient.

Probe finished, recovering blocks... Done

Bad news: The device `/dev/sdi' is a counterfeit of type limbo

You can "fix" this device using the following command:
f3fix --last-sec=473913 /dev/sdi

Device geometry:
             *Usable* size: 231.40 MB (473914 blocks)
            Announced size: 3.75 GB (7866368 blocks)
                    Module: 4.00 GB (2^32 Bytes)
    Approximate cache size: 1.00 MB (2048 blocks), need-reset=no
       Physical block size: 512.00 Byte (2^9 Bytes)

Probe time: 42.34s

And it was :( Thank you Bob Eager for pointing me in the right direction! Also see this related question.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .