为什么驱动器的大小有两个不同的值,以及如何与device-mapper和LVM协调它们?


13

我有一个通过USB连接的1 TB驱动器。它包含一个LVM 物理卷,它填充了整个设备(没有任何分区表)。当我尝试通过使用整个PV 扩展逻辑卷时设备映射器开始抱怨LVM在PV上分配的部分大于设备。来自设备映射器的错误消息(如所示dmesg)报告的大小为1953320367 [dm]扇区:

device-mapper: table: 254:0: sdf too small for target: start=1821353984, len=132169728, dev_size=1953320367

但是LVM创建了具有238467个物理范围的PV ,这是1953521664 [lvm]个扇区(大约多了100 MB):

$ 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

现在,如果我hdparm -gI在设备上运行,则可以看到两个有关设备大小的值。在geometry下,设备映射器报告的值与设备的大小相同。但是在LBA48用户可寻址扇区下,值为1953525168 [lba],该值比PV的PE的合并大小大不到一个PE。这使我认为这是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
...

现在我的问题是:

  • 为什么内核的不同部分使用两个不同的设备大小值?
  • 而且,如何处理/修复这种情况,以使LVM不会使PV大于设备映射器愿意/能够访问的空间?

扩展时正在运行的确切命令是什么?LVM磁头通常分配2MB,大约与您的差异大小相同。
Bratchley 2014年

7
报告的较小尺寸hdparm是最大数字,它是255 * 63扇区的倍数,小于实际尺寸。此限制是由于具有30年历史的BIOS界面中的柱面/头部/扇区格式所致。较新的LBA48接口可以很好地报告磁盘的大小。我不知道为什么Linux使用CHS大小做任何事情。
吉尔斯(Gillles)“所以-别再邪恶了”

我在方括号中标记了不同的值,以方便地引用它们。
Feuermurmel 2014年

1
@JoelDavis我用纯文本扩展了VG vgextend <vg-name> /dev/sdf。LVM完全符合我的期望。pvdisplay甚至说1.71 MiB是unusabe,正好是[lvm]和[lba]之差的大小。
Feuermurmel 2014年

2
@Feuermurmel,请编辑您的问题以提供其他信息-请勿使用评论。
贡伯特

Answers:


1

这里的关键问题是您的Free PE价值。请注意,它说只有100个扩展区是免费的吗?这意味着您将无法扩展它。如果先执行vgscan,pvscan,然后再执行vgdisplay(也包括vgs),您可能会看到您的设备已经属于vg(也可能是lv)的一部分,这就是扩展区不是免费的原因。

您能否提供以下产品的输出:

vgscan;pvscan;vgdisplay;vgs

您应该能够根据盘区的大小以及多少空闲空间来获得额外的400MB。


是的,该PV已为LV分配了238367 PE。那100个扩展是免费的,因为在设备映射器抱怨LVM请求的映射超出范围后,我缩小了LV。我的问题是,由LVM创建的PV实际上大于物理磁盘。该磁盘已不再是系统的一部分,因此我无法提供您要求的输出。
Feuermurmel
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.