Devices have inconsistent logical block sizes 出現的原因
問題在於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: 修改 其中一些硬盤的 logical block sizes, 使全部硬盤保持一致
查看硬盤的logical block sizes
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
|
Sector size physical 顯示了物理扇區大小,Sector size logical 顯示了邏輯扇區大小。
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
...
|
查看 Supported LBA Sizes, 支持的 LBA, +部分為當前選擇的LBA Size
修改 修改扇區 LBA 大小
警告: 修改硬盤的扇區大小將不可恢復地抹除所有數據。
部分NVMe 和“企業級”SATA 硬盤分別支持通過標準的NVMe(NVMe 命令集標準1.0 或以上的Format NVM)或ATA(ATA 命令集- 4 或以上的SET SECTOR CONFIGURATION EXT)命令修改它們匯報的扇區大小。對於機械硬盤而言,這一操作通過修改它們的邏輯扇區大小到與物理扇區大小一致,優化了硬盤性能。而對於 NVMe 固態硬盤而言,邏輯扇區和物理扇區的大小都受到更改。
SATA 固態硬盤通常不支持修改扇區大小。部分 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 命令(例如希捷宣傳帶有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)經常使用較大的物理塊(通常為 4 KiB,8 KiB,有時會更大),它們通常還是將自己的邏輯塊大小匯報為 512 字節。
可以通過 nvme-cli包 使用 Identify Namespace 命令來查看 NVMe 硬盤的格式化後邏輯塊地址大小(Formatted Logical Block Address Size, 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
|
Metadata Size 是每個邏輯塊地址(Logical Block Address, LBA)的額外元數據字節大小。這一功能在 Linux 上尚無完善支持,所以最好是使用該值為 0 的格式。
Relative Performance 代表各類格式所提供的性能級別(包括 degraded,good,better 和 best)。
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值, 修改需要數秒來完成。