我想将我所有的 14.5 TB 媒体驱动器(不是操作系统)移动到一个组合的 LVM 文件系统,因为在安排东西以适应多个较小的文件系统时经常出现问题。
我的问题是,如果设置后 6 个驱动器中的任何一个移动到不同的位置 ( /dev/sd*),那会不会有问题?我总是根据 UUID 安装它们,但我对 LVM 的了解不够了解它如何与多个驱动器配合使用。我知道我仍然可以根据 UUID 挂载文件系统,但我想确保 LVM 不会因为查找系统的各个部分而陷入困境。
我不得不问这个,因为出于某种原因,如果我在插入 USB 驱动器的情况下重新启动,它们的sd*字母会比某些媒体驱动器低,这会导致这些媒体驱动器仅为该启动而重新排列。
附注。我维护我的媒体的异地备份,所以我不必担心一个驱动器是否会破坏某些东西。之所以提到,是因为我对 LVM 的 Google 搜索总是有人试图说服这个人退出,因为一个问题会失去一切。
注意 #1:设置 LVM 时要小心。在旧版本中,不支持 RAID,因此必须将 RAID (mdadm) 与 LVM 一起设置。仅使用 LVM 设置磁盘来池化磁盘会使您的数据面临风险!更明智的做法是使用磁盘创建 RAID,然后将 LVM 分层放置在 RAID 阵列之上。
注意#2:在最新版本的 LVM 中,现在已将实际的 RAID 功能融入到 LVM 中。
特征:
- 创建 RAID 逻辑卷(自最近的 LVM 实施以来,例如Red Hat Enterprise Linux v6 1):RAID1、RAID5、RAID6等。
- 以类似于RAID 0的方式将整个或部分逻辑卷跨多个 PV 进行条带化。
- 以类似于RAID 1 的方式镜像整个或部分逻辑卷。
从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)如果您查看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)
当它运行时,您可以看到它遍历所有块设备,如下所示:
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)
然后它会找出存在哪些 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)
一旦识别出 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 的成员。
如果您仍然不相信这些在整个 LVM 堆栈中用于标识物理卷、卷组和逻辑卷,您可以扫描输出vgscan以查找 UUID 字符串。
例如,我的 LVM VG 中的一个 LV 在其 UUID 中具有这一位5ece678c。在输出中查找该字符串blkid并vgscan显示以下内容:
$ 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- 逻辑卷还有很多其他工具,这些是一些更常见的工具。
每个LVM对象(物理卷、卷组、逻辑卷)都有一个UUID。LVM 不关心物理卷位于何处,只要能找到它们就会组装它们。
默认情况下,LVM(具体来说vgscan,从 init 脚本调用)会在启动时扫描所有看起来可能的块设备。您可以在 中定义过滤器/etc/lvm.conf。只要您不定义限制性过滤器,如何连接驱动器就无关紧要。您甚至可以在系统未运行时移动分区,LVM 仍然知道如何组装它们。
您几乎不需要与 LVM 的 UUID 进行交互。通常,您可以按名称引用卷组,并按其所在卷组内的名称引用逻辑卷。
如果您对所有卷使用 LVM,则唯一可能受到磁盘整理影响的就是您的引导加载程序。
| 归档时间: |
|
| 查看次数: |
9946 次 |
| 最近记录: |