web-dev-qa-db-ja.com

論理セクターサイズは、USB経由で接続されているか直接SATA経由で接続されているかによって異なります

私は3TBWDディスク(My Book Essential外付けドライブ内)を持っています。Linuxでpartedを使用してGPTディスクラベルでパーティションを作成し、USBケーブルを介してラップトップからデータをロードしました。それから私はそれを割って開き、別のコンピューター(デスクトップ)の内蔵SATAドライブに切り替えました。

Linux(両方のコンピューターでFedora 14)はディスクを認識しませんでした。認識されないディスクラベルを別れました。また、論理セクターサイズは512バイトとして報告されました。「セクターサイズ(論理/物理):512バイト/ 4096バイト。USB経由でラップトップに接続すると、4096/4096として報告されました。

すべてのセクターオフセットに8を掛けて再パーティション化しようとしましたが、それでもデータを認識しませんでした。 (私はひどく驚いているわけではありません。)

デスクトップマシンでUSB接続に切り替えると、4096バイトの論理セクターに戻ります。したがって、4096バイトの論理セクターを使用するのはUSBコントローラーボードのようです。正直なところ、ハードウェアセクターのサイズを考えると、4096の方が理にかなっていますが、USBまたはSATAのいずれかで他の値を使用する方法はありますか?

4
user12404

少し遅れましたが、IOMEGAハードディスクケースのUSBポートが壊れた後、同様の問題が発生しました。 EXT4パーティションをマウントできないことを発見するために、別のUSB-2-SATAケースに切り替えました。何らかの理由で、IOMEGAのケースでは論理セクターサイズが4096であると報告されましたが、私の新しいケースでは512バイトしかないと報告されました。これにより、MS-DOSパーティショニングテーブルが台無しになります。

testdiskの助けを借りて、セクターサイズを変更するときにパーティションにアクセスできたので、それは私を苛立たせましたが、システム全体でセクターサイズを変更する方法が見つかりませんでした。 EXT4はセクターサイズを考慮しないため、アクセスしたいパーティションの先頭を見つけるだけでよいことがわかりました。

クイックフィックス:ループバックデバイスを使用して、パーティションの正しい位置にシフトします。

恒久的な修正:それに応じてパーティションテーブルを書き換えます。

私の場合、影響を受けたドライブは/dev/sdbでした。

セクター63から始まるパーティションが1つしかないため、クイックフィックスは比較的簡単でした。

$ Sudo sfdisk -d /dev/sdb
# partition table of /dev/sdb
unit: sectors

/dev/sdb1 : start=       63, size=623708785, Id=83

次に、セクターサイズがまだ4096バイトの場合に、パーティションの位置を計算する必要があります。

63 sectors * 4096 bytes = 258048 bytes

そしてそれをlosetupで使用します。

$ Sudo losetup /dev/loop0 /dev/sdb -o 258048
$ Sudo mount /dev/loop0 /mnt

これで、パーティションが/mntにマウントされます。

長期的な修正のために、私はsfdiskを使用してパーティションレイアウトをダンプしました。

$ Sudo sfdisk -d /dev/sdb > sdb.partitions.sfdisk.text

必要に応じて、最初のセクターに8を掛けてパーティションテーブルを修正します。ここで、パーティションテーブルが最初から少しねじ込まれていることに気付きました。

nano sdb.partitions.sfdisk.textでパーティションテーブルダンプを編集しました。

/dev/sdb1 : start=       63, size=623708785, Id=83

に:

/dev/sdb1 : start=      504, size=623708785, Id=83

その後、パーティションを拡張して、使用可能なすべてのスペースを使用します(他の方法で決定しました)。

/dev/sdb1 : start=      504, size=625141944, Id=83

最後のステップは、パーティションテーブルを次のように書き戻すことです。

$ Sudo sh -c 'cat sdb.partitions.sfdisk.text | sfdisk /dev/sdb'
6

一時的なアクセスを取得するもう1つの方法(実際にはここで説明した方法を改善)は、losetupkpartxを使用することです。ここで私がしたこと:

losetup -f /dev/sdl
kpartx -a /dev/loop2

これで、/dev/mapper/loop2pXの代わりに/dev/sdlXを使用できます。

2
loshad vtapkah

これは、大容量(> = 512 GB)の最近の外付けハードドライブの一般的な機能です。セクターサイズは、外付けハードドライブのエンクロージャーにあるUSBボードによって変換されます。このトリックは、さまざまなOS(古いWindows XPなど)との互換性を確保するために使用されているようです。

これはSaikeeによって徹底的にテストされ、ここで説明されています: http://forums.justlinux.com/showthread.php?153881-3TB-hard-disk-used-as-external-USB-connection-or-internal- SATA接続

2番目の質問については、理論的には可能と思われる場合でも、この動作を変更および修正できる人は見つかりませんでした。ドライブは書き込みを受け入れません。

1
gaborous

WDブランドのような新しい外付けHDDは、事前定義されたフォーマットを使用します。したがって、結果は決して保証されません。それでも試してみたい場合は、低レベルフォーマットをお勧めします。これは機能するかもしれませんまたは機能しないかもしれません動作します。

0
Sup_Fresh