Ubuntu 12.04を実行するラップトップに外部500GB HDDを接続しました。ディスク全体にまたがる1つのext4パーティションで外部ドライブをフォーマットしました。
私の問題は、書き込みが発生するため、ディスクが毎秒ノイズを発生させることです。積極的にディスクにファイルを書き込んだり、ディスクを使用したりすることはありません。マウントされたばかりで、アイドル状態になっているはずです。
Iotopを使用すると、ディスクを接続した状態で、jbd2プロセスがディスクに書き込むことがわかります。ディスクが接続されていない場合、このjbd2プロセスは何もしません。ドライブの接続を解除しても、ノイズはすぐに停止しますが、接続したままにしておきます。
iotop:
Total DISK READ: 0.00 B/s | Total DISK WRITE: 1838.15 K/s
TID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND
3727 be/3 root 0.00 B/s 0.00 B/s 0.00 % 0.15 % [jbd2/sdb1-8]
1 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % init
2 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kthreadd]
3 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [ksoftirqd/0]
...
まず第一に、ノイズは私を夢中にさせます。私は静かな環境で働いていますが、これは非常に低いノイズであるため、どういうわけか邪魔になります。
第二に、ディスクへのこれらの連続書き込みは、ディスクの寿命を低下させる可能性があると思います。これは、ノイズが存在しないSSDドライブにとって特に重要ですが、同じ動作が観察される可能性があります。さらに、ユーザープロセスがディスクにアクセスしておらず、オペレーティングシステムがその操作のために外部HDDにアクセスする必要がないので、ディスクへの書き込みは必要ないはずだと思います。
これらの書き込みアクセスの原因とそれらの停止方法は?
から man mke2fs
ページと このリンク ext4ファイルシステムのフォーマットのデフォルトは非常にlazyであり、多くの執筆作業を終了するようですafterドライブは初めてマウントされ、作業が完了するまで毎回マウントされます。最も厄介なことに、完了するまで数秒ごとに非常にゆっくりとドライブに書き込みます。
これは、非常に大きなブロック/ページサイズを持つフラッシュドライブ(カード/ USBドライブ)にとって特に悪い可能性があるため、ほんの数バイトを書き込むと、実際には256k、512k、または1 MB以上に書き込みます。また、一部のフラッシュドライブでは、書き込みサイクルが1000回(または5000回または10,000回、場合によっては100,000回)になる場合があります。ハードドライブよりもはるかに低く、ハードドライブでさえ、すべての書き込みを一度に実行することで、実際にアイドル状態になったときにアイドル状態にできるため、おそらくさらにメリットがあります。また、ドライブへの書き込みがどのくらい続くかはわかりませんが、数分または数日かかると言う人もいます。これは、フラッシュドライブを「フォーマット」する最悪の方法のようです。
Manページからの抜粋:
-E extended-options
Set extended options for the filesystem. Extended options are
comma separated, and may take an argument using the equals ('=')
sign... The following extended options are supported:
...
lazy_itable_init[= <0 to disable, 1 to enable>]
If enabled and the uninit_bg feature is enabled, the inode
table will not be fully initialized by mke2fs. This speeds
up filesystem initialization noticeably, but it requires the
kernel to finish initializing the filesystem in the back‐
ground when the filesystem is first mounted. If the option
value is omitted, it defaults to 1 to enable lazy inode table
zeroing.
lazy_journal_init[= <0 to disable, 1 to enable>]
If enabled, the journal inode will not be fully zeroed out by
mke2fs. This speeds up filesystem initialization noticeably,
but carries some small risk if the system crashes before the
journal has been overwritten entirely one time. If the
option value is omitted, it defaults to 1 to enable lazy
journal inode zeroing.
したがって、ファイルシステムを最初にフォーマット(または再フォーマット)できる場合、これは遅延の遅いフォーマットを排除し、すべてを一度に完了する必要があります。
mkfs -t ext4 -E lazy_itable_init=0,lazy_journal_init=0 /dev/sdxN
簡単な解決策があります。ディスクを数時間PCに接続したままにしておくと、ノイズが自動的に停止します。所要時間の概算は、パーティションサイズ1TBあたり1.5時間です。
これは、ext4にフォーマットしてもファイルシステムが完全に初期化されないためです。初期化作業の多くはjbd2に委任されます。jbd2は ファイルシステムのジャーナル を維持する役割を果たします。
フォーマット時には、ディスクの使用に必要な情報のみが書き込まれます。すでにディスクを使用できますが、jbd2は追加情報を追加します。このように設計されているため、書式設定は迅速です。フォーマット後に観察している書き込み操作はディスクのパフォーマンスに影響を与えません。つまり、ファイルをディスクにコピーするとき、jbd2はジャーナルを書き込むため、コピープロセスは遅くなりません。
jbd2は、遅延した間隔で作業を行うように設計されています。ほとんどのハードディスクには省電力メカニズムが組み込まれており、ディスクをオフにしたり、 heads をパークしたりできるため、ハードディスクがアイドル状態であることを検出したり、ヘッド、およびその直後にjbd2は再びディスクにアクセスし、ヘッドを再び移動させます。これはあなたが聞いている低ノイズです。
ハードディスクの省電力メカニズムを制御できる場合(一部のHDDはこれをサポートしますが、一部はサポートしません)、次のコマンドを使用して省電力メカニズムを無効にすることができます。
Sudo hdparm -B 255 /dev/sdXY
sdXY
をハードディスクパーティションへのパスで置き換える必要があります。コマンドが失敗した場合、お使いのHDDは省電力メカニズムの制御をサポートしていないため、消音することはできません。次に、この回答の冒頭で説明したように待つ必要があります。