web-dev-qa-db-ja.com

(X)ubuntuでUSB転送速度を向上させる方法を教えてください。

USB 2.0ドライブをXubuntuに接続して大きなファイルを転送しようとすると、転送速度は最初は適切ですが、数秒後に1-2 Mib/sに低下します。私が読んだものから、最初の高速転送はキャッシュがいっぱいになるまでで、実際のUSB転送速度が使用されます。

Windowsでは、速度は約25Mib/s、同じスティック、同じポートに接続された一定です。

これはスティックを接続したときのdmesgからの出力です。

[ 5237.580084] usb 1-4: new high speed USB device using ehci_hcd and address 6
[ 5237.714318] scsi4 : usb-storage 1-4:1.0
[ 5238.713909] scsi 4:0:0:0: Direct-Access     SanDisk  Cruzer           8.02 PQ: 0 ANSI: 0 CCS
[ 5238.715264] sd 4:0:0:0: Attached scsi generic sg2 type 0
[ 5238.727225] sd 4:0:0:0: [sdb] Attached SCSI removable disk
[ 5242.308981] sd 4:0:0:0: [sdb] 31301631 512-byte logical blocks: (16.0 GB/14.9 GiB)
[ 5242.309589] sd 4:0:0:0: [sdb] Assuming drive cache: write through
[ 5242.311228] sd 4:0:0:0: [sdb] Assuming drive cache: write through
[ 5242.311238]  sdb: sdb1

スティックは自動マウントされます。「mount」の出力は次のとおりです。

/dev/sdb1 on /media/B82C-6B07 type vfat (rw,nosuid,nodev,uhelper=udisks,uid=1000,gid=1000,shortname=mixed,dmask=0077,utf8=1,showexec,flush)

PlayStation3システムにファイルを転送したいので、vfatを使用する必要があります。以下のテストでは、これが主な原因ではないことを示しています。

これは(X)ubuntuの一般的な問題のようです。明確な解決策はまだ見つかりません。スティックはフラッシュではなく非同期としてマウントする必要があるようですが、これを実現する方法は正確にはわかりません。転送速度が優れている限り、取り外す前に毎回スティックをアンマウントする必要があってもかまいません。

何か案は?

11月2日:このバグレポートは関連しているようです: https://bugs.launchpad.net/ubuntu/+source/linux/ +バグ/ 182931 。私が心配しているのは、問題が2年以上前のようであり、それでも解決されないことです。

11月10日:palimpstestを使用して読み取りテストを開始しました(gnome-disk-utilityプロジェクトから)。これにより、最小転送速度は23 MBit/sになります。また、現在クルセーダーで試してみましたが、読み取り速度は常に> 20 MBit/sです。したがって、問題は本当にスティックに書き込むことです!

これは、同じプログラムでの読み取り/書き込みテストのイメージです。

enter image description here

上記のようにvfatが主な原因ではないことを示すテストの前に、ファイルシステムを完全に削除する必要がありました。

別のヒント:100 MBのファイルを転送すると、100%になると、実際に転送が完了するまでに異常に長い時間がかかります。これもまた、ファイルは確かにキャッシュにあるが、USBデバイスへの書き込みが非常に遅いことを私に見えます。

11月12日:「朗報」。問題はメモリスティック自体にあるようです。外付けハードドライブ(My Book Elite 1TB)を試してみると、約20 MiB /秒の一定の書き込み速度が得られます。最初にメモリスティックを再フォーマットして、2つを実際に比較できるようにしました(ファイルシステムが異なっていました)。再フォーマット後、両方のドライブはまったく同じ方法でマウントされます。

/dev/sdb1 on /media/My Book type fuseblk (rw,nosuid,nodev,allow_other,blksize=4096,default_permissions)
/dev/sdc1 on /media/cruzer_ type fuseblk (rw,nosuid,nodev,allow_other,blksize=4096,default_permissions)

Cruzerはスティック(数秒後も速度はまだ低下しています)、My Bookは20 MiB /秒の一定の書き込み速度を備えた外付けハードドライブです。

そのとき問題が本当に何であるか言うのは難しい。私が言ったように、Windowsでは、SanCruzerでも同等に速い書き込み速度が得られます。

バウンティの最後に編集:残念ながら、スティックの問題はまだ解決されていません。しかし、7日後にはもちろん、賞金を授与したいと思います。 aking1012からのコメントは、問題に新たな光を投げかけたので、本当に役に立ちました。しかし、ハリーマックが問題を解決するために最も努力したことを示したので、私はハリーマックに賞金を与えなければならないと感じています。皆さんありがとう。

14
pgruetter

記事 遅いUSB 2.0大量ストレージ転送レート は、これが同期オプションでデバイスがデフォルトでマウントされる問題である可能性があることを示唆しています:

デスクトップに「デバイス」アイコンがありますか?
開いている場合は開きます。そうでない場合は、konquerorでmedia:/を開いてみてください。

次にデバイスを選択します->プロパティ-> Mounting(tag)と同期ボックスのチェックを外します。 (これは記憶されるため、デバイスごとに1回だけ実行する必要があります)。


バグレポートからさらにいくつかのアイデアが出てきます 書き込みを非常に遅くする外部のhddで書き込みます

  • 実行時に 'Sudo mount -o remount、async/dev/sda1'(またはマウントされているパーティションが何か)によって非同期に変更する
  • 非同期でマウントするsdaのfstabエントリを作成します(これには、デバイスがブート時に常に接続されている必要があります)
  • pmountソースで 'sync'を 'async'に変更し、パッケージを再ビルドします

これがシステムに当てはまる場合は、pmountに関する記事の説明も参照してください。


別の魔法の解決策は SB 2.0遅い書き込みだが速い読み取り、まだ解決策? から来て、再マウントを含みます:

次の行で/ dev/sdc1にUSBドライブをマウントすると

/dev/sdc1       /mnt/sdc1     auto    sync,noauto,user,exec     0       0

/ etc/fstabで、5.2 MBのファイルをローカルハードディスクからドライブにコピーしようとすると、1分後に244 KBが転送されます。 29 MBのファイルを外部ドライブからローカルドライブにコピーするには、約10秒かかります。

次に、マウントを解除する場合は、/ etc/fstabの行を

/dev/sdc1       /mnt/sdc1     auto    noauto,user,exec     0       0

次に、29 MBのファイルを外部ディスクにコピーすると、目立たないほどの秒数の時間がかかります。外部ディスクからローカルディスクへのコピーと同じです。


この記事と「usbtree」への参照を参照してください。これは、USBが1.1または2.0として機能しているかどうかを確認する方法を示しています。

LinuxおよびUSB 2.

11
harrymc

私の転送は75kb/sで実行されていたので、同じ問題(「ubuntu 15 USB転送の高速化」)をgoogle検索してこのページにアクセスしました。

これはおそらく私のセットアップの唯一の解決策でしたが、私の16GB USB 3ドライブはGPT fat32にフォーマットされ、すべてのパーティションを削除し、MBRに初期化し、単一のNTFSパーティションを作成し、Ubuntu PCに再度プラグインして、10GBファイルを転送しています50MB /秒以上。私にとって、問題は解決しました。

1
Orb Servers

WD外付けディスクの転送速度にも問題がありました。WindowsSOで開いた後、常にLINUXを使用しました。その後、外付けハードドライブをマウント解除するよりも転送速度が1.5 mb/sのようになり、そこでdmesgを実行しました。 sdb1が乱暴にアンマウントされ、fsckが実行され、いくつかの修復が行われ、その後、sdaから外部ディスクにコピーするときに再び20mb/sの転送速度であると述べていました。
"fsckは、データがある場合は常にリスクですが、データが失われることなく機能しました。"

0
anymamundy

システムがプログラム/消去ブロックチャンクへの書き込みを試行することを確認する必要があります。最新のフラッシュメモリでは、通常1M〜4Mのサイズです。これを行うには、自分のFSがブロックを消去するように調整されており、そのインターフェイスでブロック全体を一度に転送できる(安価なスティックの場合)ことを確認する必要があります。それ以外の場合は、システムは、ブロックの消去(読み取り/変更/書き込みを行う)+ブロックのミスアライメントよりも小さいチャンクで書き込みを試みます。

現在の設定を確認するには、次のようにします。

cat /sys/block/sd**X**/device/max_sectors

これらのデバイスのホールルールを調整できます。 https://unix.stackexchange.com/questions/67719/change-value-of-usb-max-sectors-for-an-entire-family-of-devices を参照してください。

この場合、デフォルトの240(USBストレージ)を使用するすべてのデバイスのmax_sectorsを32Kセクターまたは2Kセクターに置き換えました。

(==を使用して確認し、=を割り当てます):

私のシステム(Mageia 4、3.14.24 core i7)では、Kingston DT101 G2 16GBの書き込み速度が非常に遅い(2MB /秒)ため、これを行う必要がありました。

vi /usr/lib/udev/rules.d/81-udisks_maxsect.rulesと追加:

SUBSYSTEMS == "scsi"、ATTR {max_sectors} == "240"、ATTR {max_sectors} = "32678"

そして、dd書き込み速度が3倍になりました:-) mc cpおそらく10〜20倍になりました(最初のパーティションを8192番目のセクターで開始し、64kアライメントのクラスターで再フォーマットした後):

fdisk -u /dev/sdh(オンの場合はDOS互換をオフにします)、

mkfs.vfat /dev/sdh1 -n Kingston16G -s 128 **-R 4592**を使用し、fsck.vfat -v /dev/sdh1を使用してアライメントを確認します([データ開始セクター]が128(クラスターサイズ)の倍数であることを確認します)。必要に応じて、予約済みセクターの数を調整します(-R)。

デフォルトのmax_sectors(240)は、安価な新しいドライブの一部で高い書き込み増幅を引き起こすようです。ただし、このような高い設定には十分注意してください。2048セクターでも同様の効果が得られます(おそらく1Mの消去ブロック:

SUBSYSTEMS == "scsi"、ATTR {max_sectors} == "240"、ATTR {max_sectors} = "2048"

古いUSBデバイスをすべてテストし、それらがまだ正常に機能することを確認します。ルールファイルでベンダー/モデル属性を使用して、より具体的にします。

PS:ext3/4を使用している場合:

ジャーナリングを無効にし、mkfs.ext3のストライド/ストライプ_幅を設定します。

mkfs.ext3 -O ^ has_journal -E stride = [read page fs blocks] -E stripe-width = [erase block fs blocks]

0
Mark