ハードコーディングされたパーティションを備えたUSBフラッシュドライブ

ハードコーディングされたパーティションを備えたUSBフラッシュドライブ

キングストン DataTraveler 2.016GB USBフラッシュドライブ:

このUSBフラッシュドライブの奇妙なことは、フラッシュドライブを0に設定しても、次の点です。

# 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
# 

..まだパーティションがあるように見えます。

# 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/dev/sdcとのさまざまなGUIDを表示します/dev/sdc1。 sdc1の出力をgrepすると、dmesg出力は次のようになります。

[21329562.191413]  sdc: sdc1

そのようなフラッシュドライブを理解する方法は?

答え1

カーネルはメモリ内のパーティションテーブルのコピーを保持します。実際には、パーティションテーブルがどこに格納されているかを覚えていないため、ディスク上のパーティションテーブルが変更されたことを検出できません。これが、直前に存在していたパーティションがまだ表示される理由です。

メモリ内パーティションテーブルを更新するには、ディスクを再解析するようにカーネルに指示する必要があります。走るpartprobe /dev/sdc。このパーティション化ツールはfdisk新しいパーティションテーブルをディスクに書き込むときにこれを行いますが、ディスクに直接書き込む場合はカーネルに手動で通知する必要があります。

関連情報