Vgextend の失敗を処理する際のエラー「デバイスの論理ブロック サイズが一貫していません」

Vgextend エラー「デバイスの論理ブロック サイズが一貫していません」の対処方法

デバイスの論理ブロック サイズが一致しない 発生理由

問題は、Vgextend に新しく追加されたディスクの論理ブロック サイズが、VG 内の元のディスクの論理ブロック サイズと異なることです。 たとえば、元の VG が論理ブロック サイズ 512 のディスク デバイス上に構築されているが、Vgextend 中に新しく追加されたデバイスの論理ブロック サイズが 4K である場合、この問題が発生します。

解決策 1: lvm.conf でallow_mixed_block_sizes=1 を有効にする

/etc/lvm/lvm.conf ファイルを開き、allow_mixed_block_sizes=1 を変更します。

しかし、このように、同じ LV 上でブロック サイズを混在させても安全でしょうか? https://serverfault.com/questions/1150643/is-it-safe-to-use-allow-mixed-block-sizes-1-in-lvm-when-using-ext4-with-4k-blo

解決策 2: 一部のハード ドライブの論理ブロック サイズを変更して、すべてのハード ドライブの一貫性を保つ

ハードディスクの論理ブロックサイズを確認する

lsblk

1
2
3
4
5
6
7
$ lsblk -td
NAME    ALIGNMENT MIN-IO OPT-IO PHY-SEC LOG-SEC ROTA SCHED       RQ-SIZE  RA WSAME
sda             0   8192   8192    4096     512    0 mq-deadline     256 128    0B
sdb             0   4096      0    4096     512    0 mq-deadline     256 128    0B
sdc             0   4096      0    4096     512    1 mq-deadline     256 128    0B
nvme1n1         0    512      0     512     512    0 none           1023 128    0B
nvme0n1         0    512      0     512     512    0 none           1023 128    0B

PHY-SEC は物理セクタ サイズを示し、LOG-SEC は論理セクタ サイズを示します。

sysfs

1
2
3
4
$ cat /sys/class/block/sda/queue/physical_block_size
4096
$ cat /sys/class/block/sda/queue/logical_block_size
512

sda はデバイス名です

fdisk

1
2
3
4
5
6
$ sudo fdisk -l /dev/sda
Disk /dev/sda: 745.22 GiB, 800176914432 bytes, 1562845536 sectors
Disk model: P1635N08CLAR800 
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 8192 bytes / 8192 bytes

セクタサイズ物理は物理セクタサイズを示し、セクタサイズ論理は論理セクタサイズを示します。

smartctl

1
2
3
4
5
6
7
$ sudo smartctl -a /dev/nvme0n1
...
Supported LBA Sizes (NSID 0x1)
Id Fmt  Data  Metadt  Rel_Perf
 0 +     512       0         2
 1 -    4096       0         1
...

サポートされている LBA サイズを表示、サポートされている LBA、+ セクションは現在選択されている LBA サイズです

変更 セクター LBA サイズの変更

警告: ハードディスクのセクター サイズを変更すると、すべてのデータが消去され、回復不能になります。

一部の NVMe および「エンタープライズ」SATA ドライブは、それぞれ標準 NVMe (NVMe Command Set Standard 1.0 以降の場合は NVM のフォーマット) または ATA (ATA Command Set Standard 1.0 以降の場合は SET SECTOR CONFIGURATION EXT) を介して報告されたセクター サイズの変更をサポートします。機械式ハードディスクの場合、この操作は物理セクター サイズと一致するように論理セクター サイズを変更することにより、ハードディスクのパフォーマンスを最適化します。 NVMe SSD の場合、論理セクター サイズと物理セクター サイズの両方が変更されます。

SATA SSD は通常、セクター サイズの変更をサポートしていません。一部の Intel SATA SSD は、報告された物理セクター サイズのみを変更でき、論理セクター サイズは変更できません。 セクター サイズの変更には、低レベルのフォーマットを含む一連の複雑な操作が必要です。別の方法として、ハード ドライブ上にファイル システムを作成するときにセクター サイズを手動で指定することで、パフォーマンスを最適化することもできます。

機械式ハードドライブを変更する

hdparm ツールを使用して、ハード ドライブのセクター サイズを変更できるかどうかを判断します。

論理セクター サイズの変更をサポートしていないハード ドライブは、現在のセクター サイズのみを報告します。

1
2
3
4
$ sudo hdparm -I /dev/sda | grep 'Sector size:'
        Logical/Physical Sector size:           512 bytes
$ sudo hdparm -I /dev/sdb | grep 'Sector size:'
        Logical/Physical Sector size:           512 bytes

ハードディスクの論理セクターサイズの変更をサポート

1
2
3
4
5
6
$ sudo hdparm -I /dev/sdc | grep 'Sector size:'
        Logical  Sector size:                   512 bytes [ Supported: 2048 256 ]
        Physical Sector size:                  4096 bytes
$ sudo hdparm -I /dev/sdk | grep 'Sector size:'
        Logical  Sector size:                   512 bytes [ Supported: 2048 256 ]
        Physical Sector size:                  4096 bytes
hdparm ツールを使用して、メカニカル ハードディスクのセクター サイズを変更します。

SATA メカニカル ハード ドライブが複数の論理セクター サイズとオプションの SET SECTOR CONFIGURATION EXT ATA コマンドをサポートしている場合 (たとえば、Seagate は FastFormat 機能を備えたハード ドライブを推進しています)、hdparm を使用して、サポートされているさまざまな論理セクター サイズを切り替えることができます。次のコマンドを使用して、これを 4096 バイト (つまり 4Kn) に設定できます。

1
# hdparm --set-sector-size 4096 --please-destroy-my-drive /dev/sdX

変更後、hdparm は 4096 バイトの論理セクター サイズを報告するはずです。

1
2
3
# hdparm -I /dev/sdX | grep 'Sector size:'
        Logical  Sector size:                  4096 bytes [ Supported: 512 4096 ]
        Physical Sector size:                  4096 bytes

NVMe SSDを変更する

ソリッド ステート ドライブ (SSD) は多くの場合、より大きな物理ブロック (通常は 4 KiB、8 KiB、場合によってはそれよりも大きい) を使用しますが、通常、論理ブロック サイズは 512 バイトとして報告されます。 nvme-cli パッケージで Identify Namespace コマンドを使用すると、NVMe ハード ドライブのフォーマットされた論理ブロック アドレス サイズ (FLBAS) を表示できます。

1
2
3
$ sudo nvme id-ns -H /dev/nvme0n1 | grep "Relative Performance"
LBA Format  0 : Metadata Size: 0   bytes - Data Size: 512 bytes - Relative Performance: 0x2 Good (in use)
LBA Format  1 : Metadata Size: 0   bytes - Data Size: 4096 bytes - Relative Performance: 0x1 Better 

メタデータ サイズは、論理ブロック アドレス (論理ブロック アドレス、LBA) ごとの追加メタデータ バイトのサイズです。この機能は Linux ではまだ完全にはサポートされていないため、値 0 の形式を使用することをお勧めします。 相対パフォーマンスは、さまざまな形式で提供されるパフォーマンス レベル (劣化、良好、良好、最高など) を表します。

Smartctl は、デバイスがサポートする論理ブロック アドレス サイズも表示できます。

1
2
3
4
5
6
# smartctl -c /dev/nvme0n1
...
Supported LBA Sizes (NSID 0x1)
Id Fmt  Data  Metadt  Rel_Perf
 0 +     512       0         2
 1 -    4096       0         1

論理ブロック アドレス サイズは、–lbaf パラメーターを使用して nvme format コマンドにターゲット値を渡すことで変更できます。

1
2
3
4
5
6
7
8
# nvme format --lbaf=1 /dev/nvme0n1
You are about to format nvme0n1, namespace 0x1.
WARNING: Format may irrevocably delete this device's data.
You have 10 seconds to press Ctrl-C to cancel this operation.

Use the force [--force] option to suppress this warning.
Sending format operation ... 
Success formatting namespace:1

lbaf は ID 値に対応し、変更が完了するまでに数秒かかります。

记录并分享
Hugo で構築されています。
テーマ StackJimmy によって設計されています。