SVX日記
2008-06-08(Sun) USBメモリを素因数分解する
オイラは以前にSIRENというメーカのUM-100-512SというUSBメモリを名指しで購入したのだが、最近になってそのチップがSLC構造だと知った。かなりの時を経てのイキナリのポイントアップだ。
オイラは過去に、特に下調べせずに買ったCD-RドライブであるCD-R56S-600、主力機が死んで慌てて買ったマザーボードであるCUB-Xと、かなり使い込んだ後で、それが名機であったことに気づかされることが度々あるが、それを想起させる。
で、改めてそれをモバイルCVSレポジトリにしようと思い、ゴチャゴチャとした中身を吸い出して、フォーマットしようとしたのだが、悩んだのがvfat領域をどうするかということ。やはり、ちょっと使いたい時のためにWindowsからも使える領域があった方がいい。
Disk /dev/sdc: 523 MB, 523632640 bytes
255 heads, 63 sectors/track, 63 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
# time dd if=/dev/zero of=/dev/sdb
dd: writing to `/dev/sdb': デバイスに空き領域がありません
1022721+0 records in
1022720+0 records out
523632640 bytes (524 MB) copied, 248.831 seconds, 2.1 MB/s
real 4m8.864s
user 0m0.742s
sys 0m3.612s
Disk /dev/sdb: 523 MB, 523632640 bytes
17 heads, 59 sectors/track, 1019 cylinders
Units = cylinders of 1003 * 512 = 513536 bytes
17 x 59 x 1019 x 512 = 523,293,184
523,632,640 - 523,293,184 = 339,456
# man fdisk
-H heads
Specify the number of heads of the disk. (Not the physical
number, of course, but the number used for partition tables.)
Reasonable values are 255 and 16.
-S sects
Specify the number of sectors per track of the disk. (Not the
physical number, of course, but the number used for partition
tables.) A reasonable value is 63.
799って素数っぽいけど、素数だっけ? 確かめるために「素数」でググる……わ。素数じゃないっぽいぞ。確か、デカい数値の素因数分解って、RSA暗号の基礎理論であり困難だと聞くが(ケタが違うって)……できるかいな。3で割って、7で割って……ダメだ。ヤケクソで17で割って……
# fdisk -H 47 -S 17 /dev/sdb
Disk /dev/sdb: 523 MB, 523632640 bytes
47 heads, 17 sectors/track, 1280 cylinders
Units = cylinders of 799 * 512 = 409088 bytes
Disk /dev/sdb: 523 MB, 523632640 bytes
47 heads, 17 sectors/track, 1280 cylinders
Units = cylinders of 799 * 512 = 409088 bytes
Disk identifier: 0x00000000
Device Boot Start End Blocks Id System
/dev/sdb1 3 1024 408289 83 Linux
/dev/sdb2 1025 1280 102272 6 FAT16
1シリンダのサイズが400KB程度と小さいから、先頭に空けておく領域も1MB以下で済んでいる。なんだよー、こんなことなら、プライマリドライブとして使っているコンパクトフラッシュも工夫すればよかったよ。
一方で、セカンダリドライブである16GBのSDカードは、16,071,000,064バイトだから……2^19×7×29×151……少し微妙だが、7と29を使えば、こっちもキッカリと使い切ることができる。うわぁ、フォーマットをやり直してぇ!!
922 get_kernel_geometry(fd);
923 get_partition_table_geometry();
924
925 heads = user_heads ? user_heads :
926 pt_heads ? pt_heads :
927 kern_heads ? kern_heads : 255;
928 sectors = user_sectors ? user_sectors :
929 pt_sectors ? pt_sectors :
930 kern_sectors ? kern_sectors : 63;