LVM 如何在设置后找到驱动器

qaw*_*drf 7 linux lvm

我想将我所有的 14.5 TB 媒体驱动器(不是操作系统)移动到一个组合的 LVM 文件系统,因为在安排东西以适应多个较小的文件系统时经常出现问题。

我的问题是,如果设置后 6 个驱动器中的任何一个移动到不同的位置 ( /dev/sd*),那会不会有问题?我总是根据 UUID 安装它们,但我对 LVM 的了解不够了解它如何与多个驱动器配合使用。我知道我仍然可以根据 UUID 挂载文件系统,但我想确保 LVM 不会因为查找系统的各个部分而陷入困境。

我不得不问这个,因为出于某种原因,如果我在插入 USB 驱动器的情况下重新启动,它们的sd*字母会比某些媒体驱动器低,这会导致这些媒体驱动器仅为该启动而重新排列。

附注。我维护我的媒体的异地备份,所以我不必担心一个驱动器是否会破坏某些东西。之所以提到,是因为我对 LVM 的 Google 搜索总是有人试图说服这个人退出,因为一个问题会失去一切。

slm*_*slm 5

关于 RAID 的一点抱怨

注意 #1:设置 LVM 时要小心。在旧版本中,不支持 RAID,因此必须将 RAID (mdadm) 与 LVM 一起设置。仅使用 LVM 设置磁盘来池化磁盘会使您的数据面临风险!更明智的做法是使用磁盘创建 RAID,然后将 LVM 分层放置在 RAID 阵列之上。

注意#2:在最新版本的 LVM 中,现在已将实际的 RAID 功能融入到 LVM 中。

摘自LVM 维基百科页面

特征:

例子

lvcreate手册页。

  • 创建一个 5GiB RAID10 逻辑卷“vg00/my_lv”,在 2 个 2 路镜像上有 2 个条带。请注意 -i 和 -m 参数的行为不同。-i 指定条带数。-m 指定附加副本的数量:

    $ sudo lvcreate --type raid10 -L 5G -i 2 -m 1 -n my_lv vg00
    
    Run Code Online (Sandbox Code Playgroud)
  • 以下命令在大小为 1G 的卷组 my_vg 中创建名为 my_lv 的 RAID6 阵列(3 个条带 + 2 个隐式奇偶校验驱动器)。

    $ sudo lvcreate --type raid6 -i 3 -L 1G -n my_lv my_vg
    
    Run Code Online (Sandbox Code Playgroud)

您关于 UUID 的问题

如果您查看lvm.conf通常存储在此处的系统文件,/etc/lvm/lvm.conf您会注意到有一些规则指定要扫描哪些块设备。

摘自我的 Fedora 19 系统

# By default we accept every block device:
filter = [ "a/.*/" ]

# Exclude the cdrom drive
# filter = [ "r|/dev/cdrom|" ]

# When testing I like to work with just loopback devices:
# filter = [ "a/loop/", "r/.*/" ]

# Or maybe all loops and ide drives except hdc:
# filter =[ "a|loop|", "r|/dev/hdc|", "a|/dev/ide|", "r|.*|" ]

# Use anchors if you want to be really specific
# filter = [ "a|^/dev/hda8$|", "r/.*/" ]
Run Code Online (Sandbox Code Playgroud)

以添加设备开头的规则a|,以删除设备开头的规则r|

注意:您还可以使用命令转储配置sudo lvm dumpconfig。这将向您显示运行配置。

$ sudo lvm dumpconfig | head -10
devices {
    dir="/dev"
    scan="/dev"
    obtain_device_list_from_udev=1
    preferred_names=["^/dev/mpath/", "^/dev/mapper/mpath", "^/dev/[hs]d"]
    filter="a/.*/"
    cache_dir="/etc/lvm/cache"
    cache_file_prefix=""
    write_cache_state=1
    sysfs_scan=1
...
Run Code Online (Sandbox Code Playgroud)

步行穿过

所以当你的系统第一次启动时,会有一个 init/systemd/etc。启动并调用 的服务vgscan。该应用程序使用该lvm.conf文件来确定哪些块设备正在使用,哪些没有。

您可以vgscan使用附加开关运行来查看它在做什么。之后运行此命令是安全的。

例子

要获得更多详细信息,只需添加额外的-v开关即可获得更多或更少。

$ sudo vgscan -vvv |& less
Run Code Online (Sandbox Code Playgroud)

步骤#1 - 查找设备

当它运行时,您可以看到它遍历所有块设备,如下所示:

Wiping cache of LVM-capable devices
    /dev/sda: Added to device cache
    /dev/disk/by-id/ata-ST95005620AS_5YX1K0Q5: Aliased to /dev/sda in device cache
    /dev/disk/by-id/wwn-0x5000c50044b84d12: Aliased to /dev/sda in device cache
    /dev/sda1: Added to device cache
    /dev/disk/by-id/ata-ST95005620AS_5YX1K0Q5-part1: Aliased to /dev/sda1 in device cache
    /dev/disk/by-id/wwn-0x5000c50044b84d12-part1: Aliased to /dev/sda1 in device cache
    /dev/disk/by-uuid/190ba40f-0c79-462c-b592-0b3d6450f40a: Aliased to /dev/sda1 in device cache
    /dev/sda2: Added to device cache
Run Code Online (Sandbox Code Playgroud)

最终它将到达属于 LVM 一部分的多个设备。

TH7Tn397qrQAETbHjeSaO0AwZk7zbm7r7NnkhRk9ndQ65S0K: Aliased to /dev/disk/by-id/dm-name-fedora_greeneggs-swap in device cache
        /dev/disk/by-uuid/5c863357-78a9-4e8d-a66a-c3bc25695ce8: Aliased to /dev/disk/by-id/dm-name-fedora_greeneggs-swap in device cache
        /dev/fedora_greeneggs/swap: Aliased to /dev/disk/by-id/dm-name-fedora_greeneggs-swap in device cache (preferred name)
        /dev/mapper/fedora_greeneggs-swap: Aliased to /dev/fedora_greeneggs/swap in device cache
        /dev/dm-1: Added to device cache
        /dev/disk/by-id/dm-name-fedora_greeneggs-root: Aliased to /dev/dm-1 in device cache (preferred name)
        /dev/disk/by-id/dm-uuid-LVM-UHlsLRdlvpobBVb5TH7Tn397qrQAETbHH5YiQx0WJaOqsUAs7hyr5FK8r0i0fR8D: Aliased to /dev/disk/by-id/dm-name-fedora_greeneggs-root in device cache
Run Code Online (Sandbox Code Playgroud)

步骤#2 - 找到 VG

然后它会找出存在哪些 VG(卷组):

  Setting name to fedora_greeneggs
  Setting metadata/format to lvm2
  Setting id to 6Cf2tN-ayiy-PIO7-44We-20vs-oTEt-QWS3JR
Run Code Online (Sandbox Code Playgroud)

步骤#3 - 识别 LV

一旦识别出 VG,它就会寻找识别 LV(逻辑卷)。

        Allocated VG fedora_greeneggs at 0x206a1d0.
        /dev/sda2 0:      0   1956: swap(0:0)
        /dev/sda2 1:   1956 104353: home(0:0)
        /dev/sda2 2: 106309  12800: root(0:0)
  Found volume group "fedora_greeneggs" using metadata type lvm2
Run Code Online (Sandbox Code Playgroud)

此时,LVM(和您的系统)现在已经确定哪些块设备是哪些 VG 的成员。

UUID

如果您仍然不相信这些在整个 LVM 堆栈中用于标识物理卷、卷组和逻辑卷,您可以扫描输出vgscan以查找 UUID 字符串。

例如,我的 LVM VG 中的一个 LV 在其 UUID 中具有这一位5ece678c。在输出中查找该字符串blkidvgscan显示以下内容:

$ blkid | grep 5ece678c
/dev/mapper/fedora_greeneggs-home: UUID="5ece678c-0382-4015-94e8-88c06ecdd872" TYPE="ext4" 

$ sudo vgscan -vvv |& grep 5ece678c
        /dev/disk/by-uuid/5ece678c-0382-4015-94e8-88c06ecdd872: Aliased to /dev/disk/by-id/dm-name-fedora_greeneggs-home in device cache
Run Code Online (Sandbox Code Playgroud)

属于该 VG 的物理磁盘的 UUID 中有此位6Cf2tN

$ blkid | grep 6Cf2tN
/dev/sda2: UUID="6Cf2tN-ayiy-PIO7-44We-20vs-oTEt-QWS3JR" TYPE="LVM2_member" 

$ sudo vgscan -vvv |& grep 6Cf2tN
      Setting id to 6Cf2tN-ayiy-PIO7-44We-20vs-oTEt-QWS3JR
Run Code Online (Sandbox Code Playgroud)

VG 的 UUID 中有这个位,UHlsLR. 这不会显示在 的输出中blkid,但您可以使用它vgs来查找所有 VG 的 UUID。

$ sudo vgs -v |& grep UHlsLR
  fedora_greeneggs wz--n- 4.00m   1   3   0 465.27g    0  UHlsLR-dlvp-obBV-b5TH-7Tn3-97qr-QAETbH

$ sudo vgscan -vvv |& grep UHlsLR
        /dev/disk/by-id/dm-uuid-LVM-UHlsLRdlvpobBVb5TH7Tn397qrQAETbHjeSaO0AwZk7zbm7r7NnkhRk9ndQ65S0K: Aliased to /dev/disk/by-id/dm-name-fedora_greeneggs-swap in device cache
        /dev/disk/by-id/dm-uuid-LVM-UHlsLRdlvpobBVb5TH7Tn397qrQAETbHH5YiQx0WJaOqsUAs7hyr5FK8r0i0fR8D: Aliased to /dev/disk/by-id/dm-name-fedora_greeneggs-root in device cache
        /dev/disk/by-id/dm-uuid-LVM-UHlsLRdlvpobBVb5TH7Tn397qrQAETbHF4nEeJnAPJdZG6gNAs8DRGW7FegWi5JI: Aliased to /dev/disk/by-id/dm-name-fedora_greeneggs-home in device cache
        lvmcache: /dev/sda2: setting fedora_greeneggs VGID to UHlsLRdlvpobBVb5TH7Tn397qrQAETbH
Run Code Online (Sandbox Code Playgroud)

最后一组命令很有趣,因为它显示了 VG UUID (VGID) 以及其中的 LV。请注意 VG 的 UUID 是如何合并到/dev/disk/by-id/...设备 ID 中的?

更进一步

如果您是好奇的类型,我鼓励您看一下输出,vgscan -vvv至少熟悉一下内容。如果您稍后想进一步探索,可以使用man lvm手册页中列出的命令行工具与 LVM 的各个级别进行交互。

  • pvs- 物理卷
  • vgs- 卷组
  • lvs- 逻辑卷

还有很多其他工具,这些是一些更常见的工具。

参考


Gil*_*il' 2

每个LVM对象(物理卷、卷组、逻辑卷)都有一个UUID。LVM 不关心物理卷位于何处,只要能找到它们就会组装它们。

默认情况下,LVM(具体来说vgscan,从 init 脚本调用)会在启动时扫描所有看起来可能的块设备。您可以在 中定义过滤器/etc/lvm.conf。只要您不定义限制性过滤器,如何连接驱动器就无关紧要。您甚至可以在系统未运行时移动分区,LVM 仍然知道如何组装它们。

您几乎不需要与 LVM 的 UUID 进行交互。通常,您可以按名称引用卷组,并按其所在卷组内的名称引用逻辑卷。

如果您对所有卷使用 LVM,则唯一可能受到磁盘整理影响的就是您的引导加载程序。