セクターサイズとブロックサイズの違い, RAID5+HotSpareとRAID6の比較, 不良セクタとfsck/chkdsk について

セクターサイズとブロックサイズ(クラスタサイズ)の違い

セクターサイズと Advanced Format について

セクターサイズはHDDの物理的な作りに依存するものです。昔は512B(バイト)のHDDが主流でしたが、今は4KBのものが増えてきています。他のデバイスの高速化、および扱うデータの大容量化に伴い、パフォーマンス向上のためにはセクタサイズは大きくした方がよいからです。

ですが、セクターサイズ4KBのHDDを使うには、OS側でもそれをサポートしなければなりません。そこで過渡期である現在、4KBと512Bの両方に成りすませる [ Advanced Format ] のHDDが流通しています。OS が 512B しかサポートしていない場合は "512e"(e=エミュレーション)というモードで動作し、物理セクターサイズ=4KBなのに論理セクターサイズ=512B としてOSから見たらあたかも512Bであるかのように振舞います。

Linux では fdisk -l で見た時に以下のようになります。

Sector size (logical/physical): 512 bytes / 4096 bytes

なお、SSDにはセクターという物理要素はありませんが、Advanced Format と同様、論理セクター(製品によっては仮想セクターと呼ぶ)を提供できますし、ものによっては設定でセクターサイズを変更できます。

ブロックサイズについて

一方、ブロックサイズは、ファイルシステムに依存するもので、ファイルシステム上の領域を扱う最小単位を意味します。つまり、ファイルシステムに読み書きする場合は必ず4KB単位で読み出し/書き込みを行うのです。HDDへのアクセスはセクターサイズですので、セクターサイズの整数倍にしないと非効率になります。例えば極端な例でセクターサイズが512Bでブロックサイズが513Bだと、ファイルシステムへの読み書き時において2セクターの1024B分へアクセスし、511B分を無駄に捨ててしまうことになります。

Windowsでは『クラスタサイズ』や『アロケーションユニットサイズ』とも呼ばれます。

現在のRedHat系の一般的なセッティングではXFSのデフォルトブロックサイズは 4KB となります(変更可)。ファイルシステムは HDD や SSD へのデータ配置をブロック番号で指定します。ブロック番号は64bitで指定されますので、ブロックサイズが4KBの場合は理論上、2^64(2の64乗)*4KB = 約64ゼッタバイトまで表現可能です。

XFSファイルシステムでブロックサイズを確認するには xfs_info コマンドを使います。

[root@localhost ~]# df
ファイルシス            1K-ブロック    使用   使用可 使用% マウント位置
/dev/mapper/centos-root    19056640 1112112 17944528    6% /
~~~
[root@localhost ~]# xfs_info /dev/mapper/centos-root
meta-data=/dev/mapper/centos-root isize=512    agcount=4, agsize=1191680 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=4766720, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal               bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

上記の例の場合、"data  =" の横にある bsize がブロックサイズです。4096=4K であることが分かります。またブロック数は blocks=にある通り、4766720 ブロックです。4KBと掛け算をすると約20GBですので、約20GBのHDDを使っていることが分かります。

不良セクターとファイルシステムチェック(Linux)/チェックディスク(Windows)について

不良セクターについて

不良セクターとは、HDDの物理的な不具合のことです。HDDはセクター単位で取り扱いますので、どんなに局所的な故障でもセクター毎切り捨てます。よくある誤解として、不良セクターを「修復・回復」するという表現が使われることがありますが、実際には不良セクターの故障を直しているのではなく、故障を見込んであらかじめ用意してある替わりのセクター(代替セクターと呼びます)を割り当て、OSが故障セクターへアクセスしようとした際に代替セクターへ誘導するようセッティングされるのです。

当然、代替セクターには限界がありますので、故障数が多くなると修復ができなくなります。

RAID5+HotSpare と RAID6 の比較

また、不良セクターについては1つ厄介な問題があります。それは、実際にアクセスしてみないと故障しているかどうか分からないことです。つまり、故障時すぐに気づくことは稀であり、故障した後に幾分か時間が経ち実際にアクセスしてうまく読み取り/書き込みができないと判明したタイミングで、ようやく不良セクター認定および修復が行われるのです。

chkdsk には「不良セクタをスキャンし、回復する」というオプションがありますが、これはこれまでの記載の通り、スキャンしないと不良セクタという識別ができないのであり、また回復というのもハード故障を直すのではなく代替セクターを割り当てる作業になります。

RAID6 が登場した背景も実はこの問題が関連しています。RAID5 + HotSpare で稼働中のRAIDグループが、あるディスクアクセスの時に故障を検知し、HotSpareのHDDを使ってリビルドし始めたタイミングで、以前から内在していた別のHDDでの故障が見つかり修復不能になるケースが問題視され、この解決策としてRAID6が登場したのです。

ファイルシステムチェック/チェックディスクについて

ファイルシステムチェック(Linux の fsck や xfs_repair)やチェックディスク(Windows の chkdskコマンド)の主たる目的はファイルシステムの論理的な不具合を調べることであり、物理的な不具合を調べることはオプション的要素です。

これらのチェックは、例えばOSが稼働中に突然ダウンしてしまいHDDへの処理途中で終わってしまった場合等に起こりえるファイルシステム上の不整合を確認します。

例えばある1つのブロックが複数のファイルから割り当て、参照されているような状態など、ファイルシステム内の様々な矛盾を検知します。

その性質上、HDDの全てのセクターへアクセスしますので、その中でうまく読み込めないセクターがあったらそれを不良セクターとして認識します。このチェックコマンドのオプションによっては、不良セクターの修復までやってくれます。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする