Diary/2016-3-3
Human68k と 8GB の壁
Human68k では、GOverHD.X をかけることで 1GB以上の HDD が使えるようになります(OS制限は 16GBのため、昨今の大容量HDDだと一部しか使えず勿体ないですけどね)。
さて、昨年 SATA-SCSI変換器を入手した際、あれこれパーティション分割を試していて、とある条件下で、別ドライブの内容を壊してしまうことに気づきました。
上記は、120GB の SATA-HDD を 5つのパーティションに分割したものですが、パーティション4へファイルを書き込むと、途中で白帯のエラー(読み込めません)が発生し、その際に パーティション1のファイル/ディレクトリを壊していたというものです。
ここで、各領域のサイズとSCSIのセクタ数は次のようになります。
32KB は、 32KB/0.5KB= 64セクタ ( 0x40セクタ) 1024MB は、1024*1024KB/0.5KB=2097152セクタ (0x200000セクタ) 2048MB は、2048*1024KB/0.5KB=4194304セクタ (0x400000セクタ) 4096MB は、4096*1024KB/0.5KB=8388608セクタ (0x800000セクタ)
HDD先頭領域には、管理領域として 64セクタ分(32KB)が確保されてる事にご注意ください。1024MB, 2048MB, 4096MB, 4096MB, 4096MB と5つに切ると、各領域の SCSIセクタ範囲は次のようになります。
パーティション1(C:):0x00000040〜0x0020003F パーティション2(D:):0x00200040〜0x0060003F パーティション3(E:):0x00600040〜0x00E0003F パーティション4(F:):0x00E00040〜0x0160003F パーティション5(G:):0x01600040〜0x01E0003F
パーティション4(F:)への書き込みで HDD の先頭付近が壊されたようですが、よく見るとパーティション4は SCSIアドレス(セクタ番号)の 24bit境界をまたいでいますね。
パーティション4(F:) に書き込むことで、パーティション1(C:) が壊れたという現象から推測すると、書き込みを行った際、SCSIアドレスの繰り上がり計算のどこかで 24bit の制限が出て、先頭に戻ってしまったのではないかと考えられます。
SCSIセクタの先頭アドレスについては、見たところ 24bit 境界を越えても問題は無さそうですが、オフセットを足して 24bit を超えたタイミングで問題が発生するようです。
厄介は厄介ですが、原因が分かれば対処のしようはあるわけで、かくしてうちの環境では次のようにパーティションを切ることにしました。
これなら、計算中に 24bit境界をまたぐ場所はなく、無駄になるのは 1MB の部分だけ。
さすがに 8GB (8191MB) のパーティションとなると容量表示とかおかしくなるのですが、大きな動画データなどを叩き込んで使うには問題ないことを確認しています。システムファイル等を入れるには 2047MB 以内に切った方が良いかと思いますが、8191MB が 2ドライブも使えるのは至極快適です(^-^)
なお、冗談半分で 10GB のパーティション等も作ってみましたが、そちらは惨敗で、3GB 少々書き込んだところでディスクフルと言われてしまいました。やっぱり限度は 8GB (8191MB) みたいですね。