“fdisk -l”类似于 LVM 逻辑卷的分区列表及其类型?

22 linux partition lvm

您知道“fdisk -l”如何列出驱动器分区表并显示每个分区的分区 ID/类型?

是否有类似的方法来获取 LVM 逻辑卷的分区 ID?

编辑:我知道“lvs”,这主要是我正在寻找的(它给了我逻辑卷的列表,有点像“fdisk -l”......除了知道什么也很有用逻辑卷的分区类型(我喜欢将其视为“虚拟分区”)。该信息是“fdisk -l”在右侧最后两列中列出的信息。(例如“8e”表示物理分区LVM 分区,或者 Linux ext 等的“83”)。

我正在寻找的工具可能不是 LVM 的一部分;也许只是其他一些可以在给定分区的情况下打印分区 ID/类型的实用程序?

jti*_*man 16

Linux LVM 的分区 ID 是 8e,由 fdisk 报告。

$ sudo fdisk -l

Disk /dev/sda: 8589 MB, 8589934592 bytes
255 heads, 63 sectors/track, 1044 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x00008ec7

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1        1013     8136891   8e  Linux LVM
/dev/sda2            1014        1044      249007+   5  Extended
/dev/sda5            1014        1044      248976   83  Linux
Run Code Online (Sandbox Code Playgroud)

LVM 是位于存储设备之上的抽象层,可以让您更轻松地对其进行管理。我不确定 fdisk 提供的信息之外还有什么您想要的信息,因为显示的是 LVM 的分区 ID。但是,有关 LVM 逻辑卷的其他信息,您可以使用“lvscan”、“lvs”和“lvdisplay”。

$ sudo lvscan 
  ACTIVE            '/dev/ops1test/root' [7.35 GB] inherit
  ACTIVE            '/dev/ops1test/swap_1' [388.00 MB] inherit

$ sudo lvs 
  LV     VG       Attr   LSize   Origin Snap%  Move Log Copy%  Convert
  root   ops1test -wi-ao   7.35G                                      
  swap_1 ops1test -wi-ao 388.00M                                      

$ sudo lvdisplay
  --- Logical volume ---
  LV Name                /dev/ops1test/root
  VG Name                ops1test
  LV UUID                BfKOpy-L7Ql-905o-7tFk-nnsV-0c7I-w4g9y6
  LV Write Access        read/write
  LV Status              available
  # open                 1
  LV Size                7.35 GB
  Current LE             1881
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           252:0

  --- Logical volume ---
  LV Name                /dev/ops1test/swap_1
  VG Name                ops1test
  LV UUID                8SNfQ9-Hlfk-Edsb-vmL1-DeE3-nBRR-YAM1dV
  LV Write Access        read/write
  LV Status              available
  # open                 2
  LV Size                388.00 MB
  Current LE             97
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           252:1
Run Code Online (Sandbox Code Playgroud)

同样,您可以使用“vgscan”、“vgs”和“vgdisplay”了解有关卷组本身的信息。

$ sudo vgscan
  Reading all physical volumes.  This may take a while...
  Found volume group "ops1test" using metadata type lvm2

$ sudo vgs
  VG       #PV #LV #SN Attr   VSize VFree 
  ops1test   1   2   0 wz--n- 7.76G 32.00M

$ sudo vgdisplay
  --- Volume group ---
  VG Name               ops1test
  System ID             
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  3
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                2
  Open LV               2
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               7.76 GB
  PE Size               4.00 MB
  Total PE              1986
  Alloc PE / Size       1978 / 7.73 GB
  Free  PE / Size       8 / 32.00 MB
  VG UUID               ofpvks-2EDZ-limu-0wAh-tYUN-ISG3-mSS65O
Run Code Online (Sandbox Code Playgroud)

  • 另外:pvs、pvdisplay 和 pvscan 用于获取有关物理卷的数据... (4认同)

Ted*_*ddy 10

逻辑卷不像旧的 DOS 分区那样具有“类型”。像 Unix 文件一样,您必须阅读它们才能了解它们是什么。像这样的事情应该可以解决问题:

lvs --all --noheadings | while read lv vg rest; do file --dereference --special-files "/dev/mapper/$(echo $vg | sed 's/-/--/')-$lv"; done
Run Code Online (Sandbox Code Playgroud)

这是此命令将给出的输出示例(截断了一点):

[...]
/dev/mapper/VolGroup00-LogVol00: Linux rev 1.0 ext4 filesystem data, UUID=b000000e-00f0-0cde-b000-fa0d000ddc00 (extents) (64bit) (large files) (huge files)
[...]
Run Code Online (Sandbox Code Playgroud)

  • 很好的答案。似乎没有其他人了解 OP 的要求。我必须对您的脚本进行一项更改:我在 file 命令中添加了 --dereference 选项。每个 LV 都通过设备映射器链接到 /dm-X。 (2认同)
  • 这应该是公认的答案! (2认同)

小智 7

LVM 是物理磁盘之上的抽象。

逻辑卷(您可以对其进行格式化和放置文件)是从卷组中分配的,这些卷组可能由一个或多个物理盘区——实际的物理磁盘分区组成。

你的问题有点不清楚。如果您想显示逻辑卷实际驻留在哪些磁盘分区,lvdisplay --maps 可能会有所帮助:

# lvdisplay --maps
  --- 逻辑卷 ---
  LV 名称 /dev/VolGroup00/root
  VG 名称 VolGroup00
  LV UUID xxxxxx-xxxx-xxxx-xxxx-xxxx-xxxx-xxxxxx
  LV 写访问读/写
  LV 状态可用
  # 打开 1
  LV 大小 5.00 GB
  当前 LE 160
  段 1
  分配继承
  预读扇区自动
  - 当前设置为 256
  块设备 253:0

  --- 细分市场 ---
  逻辑范围 0 到 159:
    类型线性
    物理卷 /dev/sda2
    物理范围 0 到 159


wom*_*ble 6

逻辑卷没有“类型”的概念,它们只是块设备。如果您想检查块设备的内容并确定其中的内容,您可能需要查看该blkid工具,它正是这样做的。


Woj*_*ski 5

1) 逻辑卷不是(物理)磁盘分区。它是在 Linux 内核中使用 Device Mapper 创建的虚拟块设备。这是一种可用于使用两个磁盘分区设置单个块设备以及使用单个磁盘分区设置两个块设备的技术,等等。

# dmsetup targets 
Run Code Online (Sandbox Code Playgroud)

如果您想了解更多关于 DM 的信息,请访问它的主页,查看它的手册页,阅读 RedHat手册或例如这篇文章。这是仅在维基百科中提到的伟大技术。

2) 例如,在我的家用计算机上,我有物理磁盘分区以及 DM 设备(逻辑卷)。

# cat /proc/partitions
Run Code Online (Sandbox Code Playgroud)

主要次要#blocks 名称

   3     0   80043264 hda
   3     1     204800 hda1
   3     2   79831029 hda2
   3    64   19589976 hdb
   3    65     104391 hdb1
   3    66   19478812 hdb2
 253     0   17432576 dm-0
 253     1    2031616 dm-1
 253     2   77762560 dm-2
 253     3    2064384 dm-3
Run Code Online (Sandbox Code Playgroud)

它们主要没有任何类型或 ID,它们仅用起始扇区编号和长度定义。

# dmsetup status -j 253 -m 0
0 34865152 linear
Run Code Online (Sandbox Code Playgroud)

所以 dm-0 是一个由某个物理设备的 34865152 个扇区组成的片段。

# dmsetup deps -j 253 -m 0
1 dependencies  : (3, 66)
Run Code Online (Sandbox Code Playgroud)

而这个设备就是/dev/hdb2分区!

# fdisk /dev/hdb
Command (m for help): p
   Device Boot      Start         End      Blocks   Id  System
/dev/hdb1   *           1          13      104391   83  Linux
/dev/hdb2              14        2438    19478812+  8e  Linux LVM
Run Code Online (Sandbox Code Playgroud)

它是木材人提到的 LVM (8e) 类型分区。

# pvs
  PV         VG         Fmt  Attr PSize  PFree
  /dev/hda2  VolGroup   lvm2 a-   76,13G    0 
  /dev/hdb2  VolGroup00 lvm2 a-   18,56G    0 
Run Code Online (Sandbox Code Playgroud)

这个单个(物理)磁盘分区可以在一个组中保存逻辑卷。我有两个磁盘,所以有两个这样的组,每个组都有两个逻辑设备。

# lvs
  LV       VG         Attr   LSize  Origin Snap%  Move Log Copy%  Convert
  lv_root  VolGroup   -wi-a- 74,16G                                      
  lv_swap  VolGroup   -wi-a-  1,97G                                      
  LogVol00 VolGroup00 -wi-ao 16,62G
  LogVol01 VolGroup00 -wi-ao  1,94G 
Run Code Online (Sandbox Code Playgroud)

所以 dm-0 和 dm-1 是在我的第一个磁盘(使用 CentOS)的 /dev/hdb2 分区上创建的两个 LV(lvroot 和 lvswap),而 dm-2 和 dm-3 是在我的 /dev/hda2 分区上创建的 LV我的第二个磁盘(使用 Fedora)。

逻辑设备可以有标签 (UUID)。您可以使用上面提到的 lvdisplay 命令检查它们。但它们只是标签,您可以使用 (-u) 代替主要、次要数字(-j -m 开关)。