I have a Kingston DataTraveler 2.0 16GB USB flash-drive:
The weird part with this USB flash-drive is that despite the fact that I have zero-filled the flash-drive:
# dd if=/dev/zero of=/dev/sdc bs=10M
dd: writing `/dev/sdc': No space left on device
1490+0 records in
1489+0 records out
15614803968 bytes (16 GB) copied, 3837.37 s, 4.1 MB/s
#
..it still represents itself like it has a partition on:
# fdisk -l /dev/sdc*
Disk /dev/sdc: 15.6 GB, 15614803968 bytes
64 heads, 32 sectors/track, 14891 cylinders, total 30497664 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
Disk identifier: 0x00000000
Disk /dev/sdc doesn't contain a valid partition table
Disk /dev/sdc1: 241 MB, 241172480 bytes
64 heads, 32 sectors/track, 230 cylinders, total 471040 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
Disk identifier: 0x00000000
Disk /dev/sdc1 doesn't contain a valid partition table
#
gdisk
shows different GUID for both /dev/sdc
and /dev/sdc1
. If I grep the output of dmesg
for sdc1, then only output is:
[21329562.191413] sdc: sdc1
How to understand such flash-drives?
Best Answer
The kernel maintains a copy of the partition table in memory. It doesn't actually remember where the partition table is stored, so it doesn't detect that the partition table has changed on the disk. That's why you're still seeing the partition that was there before.
You need to tell the kernel to parse the disk again to update its in-memory partition table. Run
partprobe /dev/sdc
. Partitioning tools such asfdisk
do that for you when they write a new partition table to the disk, but if you write to the disk directly, you need to inform the kernel manually.