我最近开始在某些服务器上对大于1 TB的硬盘使用LVM。它们非常有用,可扩展且易于安装。但是,我找不到有关LVM的危险和警告的任何数据。
使用LVM有什么弊端?
我最近开始在某些服务器上对大于1 TB的硬盘使用LVM。它们非常有用,可扩展且易于安装。但是,我找不到有关LVM的危险和警告的任何数据。
使用LVM有什么弊端?
Answers:
摘要
使用LVM的风险:
前两个LVM问题结合在一起:如果写缓存无法正常工作并且断电(例如PSU或UPS故障),则您可能必须从备份中恢复,这意味着大量的停机时间。使用LVM的一个关键原因是正常运行时间较长(添加磁盘,调整文件系统大小等),但是正确设置写入缓存设置对避免LVM实际减少正常运行时间很重要。
-2018年12月更新:更新了快照材料,包括ZFS和btrfs的稳定性作为LVM快照的替代品
减轻风险
如果您满足以下条件,LVM仍然可以正常工作:
细节
过去,我已经对LVM进行了一些数据丢失研究,对此进行了很多研究。我知道的主要LVM风险和问题是:
由于VM虚拟机管理程序,磁盘缓存或旧的Linux内核而易受硬盘写入缓存的影响,并且由于磁盘结构更加复杂,恢复数据也变得更加困难-有关详细信息,请参见下文。我已经看到几个磁盘上的完整LVM设置被破坏,没有恢复的机会,并且LVM和硬盘写缓存是一种危险的组合。
data=ordered
选项(或data=journal
为了增加安全性),并barrier=1
确保内核缓存不会影响完整性。(或使用ext4,默认情况下会启用障碍。)这是最简单的选项,以性能为代价提供良好的数据完整性。(Linux 将默认的ext3选项更改为更加危险data=writeback
的状态,因此不要依赖FS的默认设置。)hdparm -q -W0 /dev/sdX
为中的所有驱动器添加/etc/rc.local
(对于SATA),或将sdparm用于SCSI / SAS。然而,根据本项的XFS FAQ(这是非常好的关于这个主题),SATA驱动器可能会忘记驱动器错误恢复后,该设置-所以你应该使用SCSI / SAS,或者如果你必须使用SATA然后把大约每分钟运行一次的cron作业中的hdparm命令。保持启用写入缓存以提高性能(并应对说谎的驱动器)
一个更复杂但性能更高的选项是保持SSD /硬盘驱动器写缓存处于启用状态,并依靠与内核2.6.33+上的LVM配合使用的内核写障碍(通过在日志中查找“障碍”消息来进行双重检查)。
您还应确保RAID设置,VM虚拟机管理程序设置和文件系统使用写屏障(即要求驱动器在关键元数据/日志写之前和之后刷新挂起的写操作)。 XFS在默认情况下确实使用屏障,但是ext3不会使用bar3,因此对于ext3,您应该barrier=1
在mount选项中使用,并且仍然使用data=ordered
或data=journal
如上所述。
SSD存在问题,因为使用写入缓存对于SSD的生命周期至关重要。最好使用具有超级电容器的SSD(以在电源故障时启用缓存刷新,从而使缓存能够回写而不是直写)。
高级格式驱动器设置-写入缓存,对齐,RAID,GPT
pvcreate
来对齐PV。该LVM电子邮件列表线程指出了2011年在内核中完成的工作以及在单个LV中混合具有512字节和4 KiB扇区的磁盘时的部分块写入问题。由于磁盘上的结构更加复杂,因此难以恢复数据:
/etc/lvm
,这可以帮助恢复LV,VG和PV的基本结构,但不会帮助丢失文件系统元数据。难以正确调整文件系统的大小-LVM的好处通常是易于调整文件系统的大小,但是您需要运行六个shell命令来调整基于LVM的FS的大小-这可以在整个服务器仍然运行的情况下完成。在安装了FS的情况下,但是如果没有最新的备份并使用在等效服务器上预先测试的命令(例如生产服务器的灾难恢复克隆),我绝不会冒险。
lvextend
支持-r
(--resizefs
)选项的最新版本-如果可用,这是一种更安全,更快捷的方式来调整LV和文件系统的大小,尤其是在缩小FS的情况下,您几乎可以跳过本节。resize2fs
ext3和lvextend
或lvreduce
。如果不小心,大小可能会因1 GB(10 ^ 9)和1 GiB(2 ^ 30)之间的差异或各种工具向上或向下舍入大小的方式而略有不同。看来LV大小应该比FS大小大2倍于LVM物理范围(PE)大小-但请查看上面的链接以获取详细信息,因为这样做的来源并不权威。通常,允许8 MiB就足够了,但为了安全起见,最好允许更多,例如100 MiB或1 GiB。要使用4 KiB = 4096字节块检查PE大小以及逻辑卷+ FS大小:
在KiB中显示PE大小:
vgdisplay --units k myVGname | grep "PE Size"
所有LV的
lvs --units 4096b
大小:(ext3)FS的大小,假定4 KiB FS块大小:
tune2fs -l /dev/myVGname/myLVname | grep 'Block count'
相比之下,非LVM设置使调整FS的大小非常可靠和容易-运行Gparted并调整所需FS的大小,然后它将为您完成所有工作。在服务器上,可以parted
从外壳使用。
快照难于使用,速度慢且容易出错 -如果快照用尽了预分配的空间,则会自动将其删除。给定LV的每个快照都是相对于该LV的增量(而不是先前的快照),在对具有大量写入活动的文件系统进行快照(每个快照都大于前一个快照)时,该快照可能需要大量空间。创建与原始LV大小相同的快照LV是安全的,因为快照将永远不会耗尽可用空间。
快照也可能非常慢(对于这些MySQL测试,快照速度比没有LVM慢3到6倍)-请参阅此答案,其中涵盖了各种快照问题。之所以缓慢,部分原因是快照需要许多同步写入。
快照存在一些重大错误,例如,在某些情况下,快照会使启动速度非常慢,或者导致引导完全失败(因为内核 是LVM快照时,内核可能会等待根FS 超时 [已在Debian initramfs-tools
更新中修复,2015年3月] )。
快照替代方案 -文件系统和VM虚拟机管理程序
虚拟机/云快照:
文件系统快照:
如果您使用裸机,则使用ZFS或btrfs的文件系统级快照易于使用,并且通常比LVM更好(但是ZFS似乎更成熟,安装起来更加麻烦):
用于在线备份和fsck的快照
快照可用于为备份提供一致的源,只要您小心分配的空间即可(理想情况下,快照的大小与要备份的LV的大小相同)。出色的rsnapshot(自1.3.1版本开始)甚至可以为您管理LVM快照的创建/删除- 有关使用LVM的rsnapshot的此HOWTO。但是,请注意快照的一般性问题,并且快照本身不应被视为备份。
您还可以使用LVM快照做一个在线的fsck:快照LV和fsck的快照,而仍然使用的主要非快照FS - 这里描述的 -但是,这并不简单,所以最好使用e2croncheck为泰德TS描述'o,ext3的维护者。
您应该在拍摄快照时临时“冻结”文件系统 -某些文件系统(例如ext3和XFS)将在LVM创建快照时自动执行此操作。
结论
尽管如此,我仍然在某些系统上使用LVM,但是对于桌面安装程序,我更喜欢原始分区。我可以从LVM中看到的主要好处是,当必须在服务器上具有较高的正常运行时间时,可以灵活移动和调整FS的大小-如果不需要,gparted会更容易并且数据丢失的风险也较小。
由于VM虚拟机管理程序,硬盘驱动器/ SSD写入缓存等原因,LVM在写入缓存设置上需要格外小心-但是将Linux用作数据库服务器时也是如此。大多数工具(gparted
包括关键尺寸计算testdisk
等)缺乏支持,使它比应使用的更难使用。
如果使用LVM,请特别注意快照:如果可能,请使用VM /云快照,或者研究ZFS / btrfs完全避免LVM-与带有快照的LVM相比,您可能会发现ZFS或btrs已经足够成熟。
底线:如果您不知道上面列出的问题以及如何解决这些问题,最好不要使用LVM。
我[+1]了那个帖子,至少对我来说,我认为大多数问题确实存在。在运行几百台服务器和几百TB数据时看到它们。在我看来,Linux中的LVM2就像是一个“聪明的主意”。像其中一些一样,它们有时有时并不“聪明”。也就是说,没有严格分开的内核和用户空间(lvmtab)状态可能真的很明智,因为可能存在损坏问题(如果您没有正确使用代码)
好吧,仅是存在这种分离是有原因的 -差异体现在PV损失处理上,以及在线重新激活带有丢失PV的VG以使它们重新发挥作用-“原始LVM”轻而易举(AIX ,HP-UX)由于状态处理不够好而在LVM2上变成废话。而且,甚至不要让我谈论仲裁丢失检测(haha)或状态处理(如果删除磁盘,则不会将其标记为不可用。它甚至没有该死的status列)
回复:稳定 pvmove ...为什么是
数据丢失
在我的博客上排名最高的文章,嗯?刚才,我看了一个磁盘,在该磁盘中,phyvscal lvm数据仍挂在从pvmove中期开始的状态。我认为有一些回忆,通常的想法是,从用户空间复制实时块数据是一件好事,这真是令人遗憾。从lvm列表中引出一个不错的引号“似乎vgreduce --missing无法处理pvmove”意味着实际上,如果在pvmove期间磁盘分离,那么lvm管理工具将从lvm变为vi。哦,还存在一个错误,其中pvmove在块读取/写入错误后继续,并且实际上不再将数据写入目标设备。WTF?
回复:快照 通过将新数据更新到快照lv区域中,然后在删除快照后合并回去,可以安全地完成CoW。这意味着在将新数据最终合并回原始LV的过程中,您会有大量的IO尖峰,更重要的是,您当然也有更高的数据损坏风险,因为一旦您击中了快照,快照就不会被破坏。墙,但是原来的。
优势在于性能,它执行1次写入而不是3次写入。选择快速但不安全的算法显然是VMware和MS等人在“ Unix”上所期望的,我宁愿事情会做对。只要我将快照后备存储存储在与主数据不同的磁盘驱动器上(当然还要备份到另一个),我就不会发现太多性能问题。
关于:壁垒 我不确定是否可以将其归咎于LVM。据我所知,这是一个开发人员问题。但是,至少从内核2.6到2.6.33才真正关心这个问题,这可能是有罪的仍会使用它进行缓存。Virtualbox至少有一些设置可以禁用此类功能,而Qemu / KVM通常似乎允许缓存。所有的FUSE FS那里也有问题(没有O_DIRECT)
回复:大小 我认为LVM可以对显示的大小进行“四舍五入”。或者使用GiB。无论如何,您需要使用VG Pe大小并将其乘以LV的LE编号。那应该给出正确的净大小,并且该问题始终是使用问题。如果文件系统在fsck / mount(hello,ext3)期间没有注意到这样的事情,或者没有在线的“ fsck -n”(hello,ext3),则使情况变得更糟。
当然,这表明您找不到此类信息的良好来源。“ VRA有多少LE?” “ PVRA,VGDA等的物理偏移是多少?”
与原始LVM2相比,LVM2是“不了解UNIX的人注定要对其进行彻底改造的典范”的典型示例。
几个月后更新:到目前为止,我已经达到了“完整快照”方案的测试要求。如果已满,快照将阻塞,而不是原始LV。当我第一次发布此消息时,我错了。我从某些文档中获取了错误的信息,或者我已经理解了。在我的设置中,我总是非常偏执,不让它们填满,所以我从来没有纠正过。也可以扩展/缩小快照,这是一种享受。
我仍然无法解决的是如何确定快照的年龄。关于它们的性能,在“ thinp” fedora项目页面上有一条注释,其中指出快照技术正在修订中,以使它们不会因每次快照而变慢。我不知道他们是如何实施的。
如果计划使用快照进行备份-准备好存在快照时的主要性能。在这里阅读更多。否则一切都很好。我已经在数十台服务器上的生产环境中使用了lvm几年了,尽管我使用它的主要原因是原子快照无法轻松扩展卷。
顺便说一句,如果您要使用1TB驱动器,请记住分区对齐方式-该驱动器很可能具有4kB物理扇区。
亚当,
另一个优点:您可以添加一个新的物理卷(PV),将所有数据移至该PV,然后删除旧的PV,而不会造成服务中断。在过去的五年中,我至少使用了四次该功能。
我还没有清楚指出一个缺点:LVM2的学习曲线有些陡峭。通常在抽象中,它在文件和基础媒体之间创建。如果只与几个人共享一组服务器上的琐事,那么您可能会发现整个团队难以承受的额外复杂性。专门从事IT工作的大型团队通常不会遇到这样的问题。
例如,在我的工作中,我们将其广泛使用,并花了一些时间向整个团队教授有关恢复无法正常启动的系统的基础知识,语言和基本知识。
需要特别指出的一项警告是:如果从LVM2逻辑卷引导,则当服务器崩溃时,使恢复操作变得困难。Knoppix和朋友并不总是拥有合适的东西。因此,我们决定将/ boot目录放在其自己的分区上,并且始终很小且本机。
总的来说,我是LVM2的粉丝。
/boot
独立永远是一个好主意
vgchange -ay
来查找LVM卷。