1. ホーム
  2. linux

[解決済み] dd: 最適なブロックサイズを計算するには?[クローズド]

2022-05-16 04:26:54

質問

を実行する際に、最適なブロックサイズをどのように計算するのですか? dd ? 少し調べてみましたが、これがどのように達成されるかを示唆するものは見つかりませんでした。

私は、ブロックサイズを大きくすると、より速く、より速く、より速くという印象を抱いています。 dd ... これは本当ですか?

私は、これから dd 4GB DDR3 1333mhz RAM を搭載した Intel Core i3 を実行しているマシンに、7200rpm で動作する 2 つの同一の 500gb 日立 HDD を搭載しようとしているので、どのブロック サイズを使用すべきか考えているところです。(フラッシュ ドライブから Ubuntu 10.10 x86 を起動し、そこから実行するつもりです。)

どのように解決するのですか?

最適なブロック サイズは、オペレーティング システム (およびそのバージョン)、関連するさまざまなハードウェア バスおよびディスクを含むさまざまな要因に依存します。いくつかの Unix ライクなシステム (Linux や少なくともいくつかの BSD を含む) は st_blksize メンバを struct stat のメンバーで、カーネルが最適なブロックサイズと考えるものを提供します。

#include <sys/stat.h>
#include <stdio.h>

int main(void)
{
    struct stat stats;

    if (!stat("/", &stats))
    {
        printf("%u\n", stats.st_blksize);
    }
}

最良の方法は、様々なブロックサイズでギガバイトをコピーし、時間を計ってみることでしょう。(各実行の前にカーネル バッファ キャッシュをクリアすることを忘れないでください。 echo 3 > /proc/sys/vm/drop_caches ).

しかし、経験則から言うと、十分な大きさのブロックサイズによって dd は良い仕事をし、たとえば、64 KiB と 1 MiB の違いは、4 KiB と 64 KiB の違いに比べてわずかなものであることがわかりました。(ただし、確かに、それをやってからしばらく経ちました。今はデフォルトで1メビバイトを使うか、あるいは単に dd にサイズを選ばせています)。