Mam dysk 1 TB podłączony przez USB. Zawiera wolumin fizyczny LVM wypełniający całe urządzenie (bez żadnej tablicy partycji). Kiedy próbowałem rozszerzyć wolumin logiczny przy użyciu całego PV, maper urządzeń zaczął narzekać, że sekcja przydzielona przez LVM na PV jest większa niż urządzenie. Komunikat o błędzie z urządzenia mapującego urządzenia (jak pokazano przez dmesg
) zgłasza rozmiar 1953320367 sektorów [dm]:
device-mapper: table: 254:0: sdf too small for target: start=1821353984, len=132169728, dev_size=1953320367
Ale LVM stworzył PV z 238467 zakresami fizycznymi , czyli 1953521664 sektorów [ lvm ] (czyli około 100 MB więcej):
$ pvdisplay /dev/sdf
--- Physical volume ---
PV Name /dev/sdf
VG Name apu-vg1
PV Size 931.51 GiB / not usable 1.71 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 238467
Free PE 100
Allocated PE 238367
PV UUID LrKDDW-4dXz-kDgh-CK78-OWhY-4sCH-rKT0e4
Teraz, jeśli uruchomię hdparm -gI
na urządzeniu, widzę dwie wartości wielkości urządzenia. W przypadku geometrii istnieje ta sama wartość, która jest zgłaszana przez urządzenie mapujące urządzenie, co rozmiar urządzenia. Ale w sektorach adresowalnych przez użytkownika LBA48 istnieje wartość 1953525168 [lba], która jest mniejsza niż jeden PE większy niż łączny rozmiar PE PV. To sprawia, że myślę, że jest to wartość, którą widzi LVM:
$ hdparm -Ig /dev/sdf
/dev/sdf:
geometry = 121588/255/63, sectors = 1953320367, start = 0
ATA device, with non-removable media
Model Number: ST1000LM024 HN-M101MBB
Serial Number: S2RUJ9BC702524
Firmware Revision: 2AR10001
Transport: Serial, ATA8-AST, SATA 1.0a, SATA II Extensions, SATA Rev 2.5, SATA Rev 2.6, SATA Rev 3.0
Standards:
Used: unknown (minor revision code 0x0028)
Supported: 8 7 6 5
Likely used: 8
Configuration:
Logical max current
cylinders 16383 16383
heads 16 16
sectors/track 63 63
--
CHS current addressable sectors: 16514064
LBA user addressable sectors: 268435455
LBA48 user addressable sectors: 1953525168
...
Teraz na moje pytania:
- Dlaczego istnieją dwie różne wartości rozmiaru urządzenia używane przez różne części jądra?
- I w jaki sposób poradzić sobie z tą sytuacją / naprawić ją, aby LVM nie tworzył PV, które są większe niż przestrzeń, do której urządzenie mapujące chce / ma dostęp?
hdparm
to największa liczba będąca wielokrotnością 255 * 63 sektorów i mniejsza niż rzeczywisty rozmiar. Ograniczenie to wynika z formatu cylindra / głowicy / sektorów z 30-letniego interfejsu BIOS. Nowszy interfejs LBA48 może dobrze raportować rozmiar dysku. Nie mam pojęcia, dlaczego Linux do czegoś używa rozmiaru CHS.
vgextend <vg-name> /dev/sdf
. LVM robi dokładnie to, czego oczekuję. pvdisplay
nawet mówi, że 1,71 MiB jest nieusuwalny, co jest dokładnie wielkością różnicy między [lvm] a [lba].