我最近开始在某些服务器上对大于 1 TB 的硬盘驱动器使用 LVM。它们很有用、可扩展且非常易于安装。但是,我找不到任何关于 LVM 的危险和警告的数据。
使用 LVM 的缺点是什么?
我有一个包含两个物理卷 (PV) 的卷组 (VG)。VG 中的几个逻辑卷 (LV) 可能在两个 PV 上都使用扩展区。
有没有办法判断哪些LV占用哪些PV上的空间?
今天我在我的机器上用 OpenSUSE 12.3(内核 3.7)尝试了这个:
# resize2fs /dev/mapper/system-srv 2G
resize2fs 1.42.6 (21-Sep-2012)
Filesystem at /dev/mapper/system-srv is mounted on /srv; on-line resizing required
resize2fs: On-line shrinking not supported
Run Code Online (Sandbox Code Playgroud)
/dev/mapper/system-srv 是 EXT4 卷。
它真的不受支持还是我遗漏了什么?
我目前在软件 RAID 上安装了 LVM,但我想问你,你认为它是更好的解决方案,也许有一些优点和缺点?
编辑:这是关于lvm上的软件raid或软件raid上的lvm。如果我们考虑性能,我知道比硬件突袭更好。
据我所知,LVM 可以拍摄卷的快照。还有许多支持快照的文件系统(ZFS、Btrfs、reiserfs 等)。
但是,我一直不明白 LVM 快照和文件系统快照之间的区别。如果可以使用 LVM 拍摄快照,为什么有人要花时间在文件系统中实现它?
编辑:在某些情况下,他们中的任何一个是首选吗?为什么?
我们在服务器中遇到磁盘故障并在从 LVM 中移除驱动器之前更换了它。
服务器有 4 个物理驱动器 (PV),每个驱动器都有自己的卷组 (VG)。每个 VG 有 2 个或更多逻辑卷 (LV)。现在 LVM 抱怨缺少驱动器。因此,我们有一个 VG (vg04),其中有两个 LV 已成为孤儿,而我们需要从系统中清除。
问题是每次我们运行任何 LVM 命令时,我们都会收到这些“读取失败”错误:
# lvscan
/dev/vg04/swap: read failed after 0 of 4096 at 4294901760: Input/output error
/dev/vg04/swap: read failed after 0 of 4096 at 4294959104: Input/output error
/dev/vg04/swap: read failed after 0 of 4096 at 0: Input/output error
/dev/vg04/swap: read failed after 0 of 4096 at 4096: Input/output error
/dev/vg04/vz: read failed after 0 of 4096 at 995903864832: Input/output error
/dev/vg04/vz: …Run Code Online (Sandbox Code Playgroud) 我连接了一个 iSCSI 目标,在其上创建了一个物理卷和卷组。
然后我创建了一个 LV,然后
mkfs.ext3 /dev/vg00/vm
Run Code Online (Sandbox Code Playgroud)
一切都很好。
然后我断开目标
iscsiadm -m node -T iqn.2004-04.com.qnap:ts-509:iscsi.linux01.ba4731 -p 192.168.0.4 -u
Run Code Online (Sandbox Code Playgroud)
登录到另一台 Linux 服务器,并在那里连接目标
iscsiadm -m node -T iqn.2004-04.com.qnap:ts-509:iscsi.linux01.ba4731 -p 192.168.0.4 -l
Run Code Online (Sandbox Code Playgroud)
我得到:
linux01:~ # lvdisplay
--- Logical volume ---
LV Name /dev/vg00/vm
VG Name vg00
LV UUID NBNRGV-FkSR-ZNZ9-9AVk-chLQ-j5nc-RazeBw
LV Write Access read/write
LV Status NOT available
LV Size 17.00 GB
Current LE 4352
Segments 1
Allocation inherit
Read ahead sectors 0
Run Code Online (Sandbox Code Playgroud)
我可以看到它/dev/vg00/vm不存在,正如我所期望的那样。
我究竟做错了什么?
如果有人了解 LVM 的工作原理,可以告诉我一个粗略的估计,使用 LVM(带有软件 RAID1)会慢多少,我将不胜感激。
(如果 LVM 卷当前处于快照模式执行写时复制,我不想知道 LVM 会慢多少)。我只需要粗略估计 LVM 在正常操作场景中会减慢读写速度。
任何链接也非常感谢我找不到关于这个问题的任何良好的性能基准。
在多层(物理驱动器 -> md -> dm -> lvm)的情况下,调度程序、预读设置和其他磁盘设置如何交互?
假设您有多个磁盘 (/dev/sda - /dev/sdd),它们都是使用 mdadm 创建的软件 RAID 设备 (/dev/md0) 的一部分。每个设备(包括物理磁盘和 /dev/md0)都有自己的 IO 调度程序设置(像这样更改)和预读(使用 blockdev 更改)。当你加入 dm(加密)和 LVM 之类的东西时,你会添加更多具有自己设置的层。
例如,如果物理设备有 128 个数据块的预读,而 RAID 有 64 个数据块的预读,当我从 /dev/md0 读取时,这是正确的吗?md 驱动程序是否尝试读取 64 个块,然后物理设备驱动程序将其转换为 128 个块的读取?或者 RAID 预读是否“直通”到底层设备,导致读取 64 个块?
同样的问题也适用于调度程序?我是否必须担心多层 IO 调度程序以及它们如何交互,或者 /dev/md0 是否有效地覆盖了底层调度程序?
在我试图回答这个问题时,我挖掘了一些关于调度程序和工具的有趣数据,这些数据可能有助于解决这个问题:
我一直试图在这个问题上找到一个直接的答案,但事实证明这是难以捉摸的。这个问题和它的答案是接近,但并没有真正给我,我想细节。让我们从我认为我知道的开始。
如果你有一个标准的块设备并且你运行sudo blockdev --report你会得到这样的东西:
RO RA SSZ BSZ StartSec Size Device
rw 256 512 4096 0 500107862016 /dev/sda
rw 256 512 4096 2048 399999238144 /dev/sda1
rw 256 512 1024 781252606 1024 /dev/sda2
Run Code Online (Sandbox Code Playgroud)
现在,您决定使用--setra任何分区将默认值 256 更改为 128 ,并且它会发生在整个块设备上,如下所示:
sudo blockdev --setra 128 /dev/sda1
sudo blockdev --report
RO RA SSZ BSZ StartSec Size Device
rw 128 512 4096 0 500107862016 /dev/sda
rw 128 512 4096 2048 399999238144 /dev/sda1
rw 128 512 1024 781252606 1024 …Run Code Online (Sandbox Code Playgroud) lvm ×10
linux ×8
raid ×2
block-device ×1
btrfs ×1
ext4 ×1
filesystems ×1
hard-drive ×1
iscsi ×1
md ×1
performance ×1
snapshot ×1
zfs ×1