does not start on physical sector boundaryの解決方法

UbuntuLinkStation

故障したLinkStationの復旧の為にHDDをパソコンに搭載して、中身を全て新品のHDDにコピーした。

コピー後の新しいHDDにUbuntuからアクセスし壊れた所を修復、LinkStationに戻せるレベルまで来た。

作業環境をLinkStationに戻す前に、Ubuntuの状態で他にやっておくことは無いか?と考えたところ、新しく導入したハードディスクのphysical sector boundaryを無視して使っていたことを思い出した。

以下の記事で触れた内容である。

physical sector boundaryとは何か?【Linux上でのDisk Copy】

本記事では、この「physical sector boundary」を解決する方法を記載します。

physical sector boundaryとは

エラーメッセージ内容は、以下の通りでした。

Partition x does not start on physical sector boundary

fdiskで見るとエラーがこんな風に出ている。

# fdisk /dev/sdb6

The device presents a logical sector size that is smaller than
the physical sector size. Aligning to a physical sector (or optimal
I/O) size boundary is recommended, or performance may be impacted.

Command (m for help): p

Disk /dev/sdb: 1000.2 GB, 1000204886016 bytes
255 heads, 63 sectors/track, 121601 cylinders, total 1953525168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0xefc6301d

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1              63     2008124     1004031   83  Linux
Partition 1 does not start on physical sector boundary.
/dev/sdb2         2008125    12016619     5004247+  83  Linux
Partition 2 does not start on physical sector boundary.
/dev/sdb4        12016620  1953520064   970751722+   5  Extended
Partition 4 does not start on physical sector boundary.
/dev/sdb5        12016683    14024744     1004031   82  Linux swap / Solaris
Partition 5 does not start on physical sector boundary.
/dev/sdb6        14024808  1951544069   968759631   83  Linux

Command (m for help): q

#

メッセージの意味は、パーティションの開始位置が違いますよ・・という事と、物理セクターと論理セクターのサイズが異なっていますよ・・という事である。

physical sector boundaryの解決

/dev/sdb はもうまっさらにして良いハードディスクなので、これを機に、パーティションの開始位置を最適化することにした。

ただし、LinkStationに戻した時に自動的にRAIDに組み込めるように、パーティションのサイズだけは合わせることにした。

パーティションの削除

まず、パーティションを消す作業を開始。

# fdisk /dev/sdb

The device presents a logical sector size that is smaller than
the physical sector size. Aligning to a physical sector (or optimal
I/O) size boundary is recommended, or performance may be impacted.

Command (m for help): d
Partition number (1-6): 6

Command (m for help): d
Partition number (1-5): 5

Command (m for help): d
Partition number (1-5): 4

Command (m for help): d
Selected partition 1

Command (m for help): d
Selected partition 2

Command (m for help): p

Disk /dev/sdb: 1000.2 GB, 1000204886016 bytes
255 heads, 63 sectors/track, 121601 cylinders, total 1953525168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0xefc6301d

   Device Boot      Start         End      Blocks   Id  System

Command (m for help):

こんな感じで全てのパーティションが消えた。

パーティションの作成

次は一つ一つパーティションを作成していこう。

Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-1953525167, default 2048): 
Using default value 2048

開始位置は何故か2048からしか選べなかった。ここは従うしかない。

Last sector, +sectors or +size{K,M,G} (2048-1953525167, default 1953525167): +2008062

ここで注意するのは「単位」。
sector数とblock数は違うので、何度かやり直してみて、元のblock数×2の値をここで、+を前に付けて指定してやると出来上がったパーティションのサイズが元と同じになる。

Command (m for help): p

Disk /dev/sdb: 1000.2 GB, 1000204886016 bytes
255 heads, 63 sectors/track, 121601 cylinders, total 1953525168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0xefc6301d

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048     2010110     1004031+  83  Linux

見事、この通り。あとは同じように作ります。

Command (m for help): n
Partition type:
   p   primary (1 primary, 0 extended, 3 free)
   e   extended
Select (default p): p
Partition number (1-4, default 2): 2
First sector (2010111-1953525167, default 2011136): 
Using default value 2011136
Last sector, +sectors or +size{K,M,G} (2011136-1953525167, default 1953525167): +10008494

Command (m for help): n
Partition type:
   p   primary (2 primary, 0 extended, 2 free)
   e   extended
Select (default p): e
Partition number (1-4, default 3): 4
First sector (2010111-1953525167, default 12019712): 
Using default value 12019712
Last sector, +sectors or +size{K,M,G} (12019712-1953525167, default 1953525167): 
Using default value 1953525167

Command (m for help): n
Partition type:
   p   primary (2 primary, 1 extended, 1 free)
   l   logical (numbered from 5)
Select (default p): l
Adding logical partition 5
First sector (12021760-1953525167, default 12021760): 
Using default value 12021760
Last sector, +sectors or +size{K,M,G} (12021760-1953525167, default 1953525167): +2008062

Command (m for help): n
Partition type:
   p   primary (2 primary, 1 extended, 1 free)
   l   logical (numbered from 5)
Select (default p): l
Adding logical partition 6
First sector (14031871-1953525167, default 14032896): 
Using default value 14032896
Last sector, +sectors or +size{K,M,G} (14032896-1953525167, default 1953525167): +1937519262

Command (m for help): p

Disk /dev/sdb: 1000.2 GB, 1000204886016 bytes
255 heads, 63 sectors/track, 121601 cylinders, total 1953525168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0xefc6301d

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048     2010110     1004031+  83  Linux
/dev/sdb2         2011136    12019630     5004247+  83  Linux
/dev/sdb4        12019712  1953525167   970752728    5  Extended
/dev/sdb5        12021760    14029822     1004031+  83  Linux
/dev/sdb6        14032896  1951552158   968759631+  83  Linux

ここまでで大きさだけは全て元に戻りました。

swapエリアの設定

次に swap エリアの設定を行います。

Command (m for help): t
Partition number (1-6): 5
Hex code (type L to list codes): 82
Changed system type of partition 5 to 82 (Linux swap / Solaris)

Command (m for help): p

Disk /dev/sdb: 1000.2 GB, 1000204886016 bytes
255 heads, 63 sectors/track, 121601 cylinders, total 1953525168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0xefc6301d

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048     2010110     1004031+  83  Linux
/dev/sdb2         2011136    12019630     5004247+  83  Linux
/dev/sdb4        12019712  1953525167   970752728    5  Extended
/dev/sdb5        12021760    14029822     1004031+  82  Linux swap / Solaris
/dev/sdb6        14032896  1951552158   968759631+  83  Linux

/dev/sdb5がswapエリアになったので、完成です。

パーティションtableのwrite

パーティションが出来上がったら、書き込みを行ってfdiskを終了します。

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.

書き込みを行うとエラーが出ます。reboot後に有効になりますよ、と言っています。

これで、physical sector boundaryのエラーが無くなったので、安心して使うことが出来ますね!

Windows10にアップグレードしたら、LinkStationのHDDが壊れて立ち上がらなくなり、パソコンからLinuxの機能を駆使して完全復旧させた私の体験の一部始終を読みたい方は、以下の記事から進んで下さい。

故障したLinkStationから自力でデータ復旧した方法

コメント

タイトルとURLをコピーしました