やまものブログ

メモ書きブログです (^_^;A

USBメモリの丸ごとコピー (Linux の dd コマンド)

USB メモリの内容を dd コマンドでコピーしてみました。
Ubuntu 15.04 を使いましたが、たいがいの Linux で同じかと思います(素人の憶測)


まずはデバイスの確認。
/dev/sdb  が 32GB の USBメモリ、/dev/sdc2GB の USBメモリです。
$ sudo fdisk -l
: 中略
Disk /dev/sdb: 29.8 GiB, 32015679488 bytes, 62530624 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: 0xfab0e54f

Device Boot Start End Sectors Size Id Type
/dev/sdb1 32 62530623 62530592 29.8G c W95 FAT32 (LBA)

Disk /dev/sdc: 1.9 GiB, 1977614336 bytes, 3862528 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: 0x00000000

Device Boot Start End Sectors Size Id Type
/dev/sdc1 135 3858623 3858489 1.9G b W95 FAT32


2GB メモリ(/dev/sdc1) を、ファイル "USB2GBFILE" として保存してみました
$ sudo dd if=/dev/sdc1 of=./USB2GBFILE
3858489+0 レコード入力
3858489+0 レコード出力
1975546368 バイト (2.0 GB) コピーされました、 208.096 秒、 9.5 MB/秒
$ file USB2GBFILE
USB2GBFILE: DOS/MBR boot sector
$ ls -l USB2GBFILE
-rw-r--r-- 1 root root 1975546368 7月 25 18:16 USB2GBFILE


このファイル "USB2GBFILE" を 32GBメモリ (/dev/sdb1)に書き込みました
$ sudo dd if=./USB2GBFILE of=/dev/sdb1
3858489+0 レコード入力
3858489+0 レコード出力
1975546368 バイト (2.0 GB) コピーされました、 669.556 秒、 3.0 MB/秒


書き込み先のメモリは、fdisk コマンド、ファイルブラウザ(Nautilus)のプロパティ(下記)では 32GB と認識されていますが、下記のように合計は 2GB となっています。
イメージ 1

いちおう、コピーされたファイルのいくつかが読めること、新規にファイルを書き込むこともできることを確認しました。また、オリジナルと "diff -r" で丸ごと比較しても不一致は報告されませんでした


しかし、32GBメモリが 2GBになってしまった(おそらくですが)のは悲しい
ということで、フォーマットし直しました。
$ sudo mkfs.vfat -v -c -F 32 /dev/sdb1
mkfs.fat 3.0.27 (2014-11-12)
/dev/sdb1 has 64 heads and 32 sectors per track,
hidden sectors 0x0800;
logical sector size is 512,
using 0xf8 media descriptor, with 62528576 sectors;
drive number 0x80;
filesystem has 2 32-bit FATs and 32 sectors per cluster.
FAT size is 15259 sectors, and provides 1953063 clusters.
There are 32 reserved sectors.
Volume ID is e16f3a07, no volume label.
Searching for bad blocks 57184... 114912... 172384... 229984... 287456... 344800... 402256... 459616... 517088... 574560... 632032... 689504... 746976... 804448... 861920... 919392... 976992...

:以下、この数字が出力され続ける。合計39行


32GB USBメモリを一度抜いて、挿しなおすと…
イメージ 2

32GB と認識されるメモリに復活しました


dd コマンドで丸ごとコピーするなら、コピー元とコピー先が同じ容量でないと気持ち悪いですね とはいえ、コピー先が大きい分がもったいないだけで、実用にはなりそうです