我最近开始在一些大于1TB的硬盘上使用LVM。 他们是有用的,可扩展的,并且很容易安装。 但是,我找不到有关LVM的危险和警告的任何数据。
使用LVM有什么缺点?
概要
使用LVM的风险:
前两个LVM问题结合在一起:如果写入caching不能正常工作,并且出现电源丢失(例如PSU或UPS故障),则可能需要从备份中恢复,这意味着显着的停机时间。 使用LVM的一个关键原因是正常运行时间更长(添加磁盘,调整文件系统大小等),但正确设置写入caching设置非常重要,以避免LVM实际上减less正常运行时间。
– 2017年9月更新:使旧的内核材料不那么突出
减轻风险
如果您:
细节
在过去,我经历了一些与LVM相关的数据丢失的研究。 我所知道的主要LVM风险和问题是:
由于虚拟机pipe理程序,磁盘caching或旧的Linux内核 , 易受硬盘写入caching的影响 ,并且由于更复杂的磁盘结构而使恢复数据变得更加困难 – 详情请参阅下文。 我已经看到几个磁盘上的完整LVM设置被破坏,没有任何恢复的机会,LVM加硬盘写入caching是一个危险的组合。
data=ordered
选项(或data=journal
以获得额外的安全性),以及barrier=1
以确保内核caching不会影响完整性。 (或者使用默认启用屏障的 ext4)。这是最简单的select,并且以性能为代价提供了良好的数据完整性。 (Linux 将默认的ext3选项更改为更危险的data=writeback
,因此不要依赖于FS的默认设置。) /etc/rc.local
(对于SATA)中的所有驱动器添加hdparm -q -W0 /dev/sdX
sdX,或使用SCSI / SAS的sdparm。 但是,根据XFS常见问题解答中的这个条目 (这个问题非常好),在驱动器出错恢复后,SATA驱动器可能会忘记这个设置 – 所以您应该使用SCSI / SAS,或者如果您必须使用SATA, hdparm命令在每分钟左右运行一个cron作业。 保持写caching启用性能(和处理撒谎的驱动器)
一个更复杂但性能最好的select是保持SSD /硬盘驱动器写入caching启用,并依靠内核2.6.33+上的内核写入障碍与LVM一起工作(通过在日志中查找“barrier”消息进行检查)。
您还应该确保RAID设置,虚拟机pipe理程序设置和文件系统使用写入屏障 (即要求驱动器在关键元数据/日志写入之前和之后刷新挂起写入)。 XFS在默认情况下会使用屏障,但是ext3不会 ,所以在ext3中,您应该在挂载选项中使用barrier=1
,并仍然使用data=ordered
或data=journal
。
固态硬盘是有问题的,因为使用写入高速caching对固态硬盘的使用寿命至关重要。 最好使用具有超级电容器的SSD(在电源故障时启用高速caching刷新,从而使高速caching不被写回)。
高级格式驱动器设置 – 写入caching,alignment,RAID,GPT
pvcreate
上的选项来alignmentPV。 此LVM电子邮件列表线程指向2011年在内核中完成的工作,以及在单个LV中混合具有512字节和4个KiB扇区的磁盘时发生的部分块写入问题。 由于更复杂的磁盘结构,难以恢复数据 :
/etc/lvm
下备份元数据,这有助于恢复LV,VG和PV的基本结构,但不会帮助丢失文件系统元数据。 很难正确调整文件系统的大小 – 简单的文件系统resize通常是LVM的一个好处,但是您需要运行6个shell命令来调整基于LVM的FS的大小 – 这可以在整个服务器仍然运行的情况下完成,在某些情况下与FS安装,但我永远不会冒险后者没有最新的备份和使用命令预先testing在一个等效的服务器(例如生产服务器的灾难恢复克隆)。
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只是为了安全。 要检查PE大小和逻辑卷+ FS大小,使用4 KiB = 4096字节块:
以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所需的大小,然后它将为您做所有事情。 在服务器上,您可以使用从shell parted
。
快照难以使用,速度慢,错误 – 如果快照耗尽预分配的空间,它将自动丢弃 。 给定LV的每个快照是针对该LV的增量(而不是针对之前的快照),这在快照具有显着写入活动的文件系统时可能需要大量空间。 创build与原始LV大小相同的快照LV是安全的,因为快照永远不会耗尽可用空间。
快照也可能非常慢(意味着这些MySQLtesting比无LVM的速度慢3到6倍) – 请参阅此答案,其中包含各种快照问题 。 速度的缓慢部分是因为快照需要许多同步写入 。
快照有一些重大的错误,例如, 在某些情况下,它们可能会导致启动速度非常慢,或导致启动失败(因为内核可以超时等待根FS是LVM快照[在Debian initramfs-tools
update, 2015])。
快照备选scheme – 文件系统和虚拟机pipe理程序
VM /云快照:
文件系统快照:
使用ZFS或btrfs的文件系统级快照易于使用,并且通常比LVM更好,尽pipeLinux上的文件系统都不是非常成熟,但对于真正需要快照而不需要VM /云路由的用户来说,它们可能是更好的select:
在线备份和fsck的快照
只要您仔细分配空间(理想情况下快照与备份的LV大小相同),快照可用于为备份提供一致的源 。 优秀的rsnapshot (自1.3.1以来)甚至为您pipe理LVM快照创build/删除 – 请参阅使用LVM的rsnapshot上的此HOWTO 。 但是,请注意快照的一般问题,并且快照本身不应被视为备份。
您还可以使用LVM快照来执行在线fsck:快照LV和fsck快照,同时仍然使用此处描述的主要非快照FS – 但是,这并不是完全简单,因此最好使用Ted Ts所述的 e2croncheck 'o ,ext3的维护者。
在拍摄快照时,您应该临时“冻结”文件系统 – 当LVM创build快照时,一些文件系统(如ext3和XFS)会自动执行此操作 。
结论
尽pipe如此,我仍然在一些系统上使用LVM,但是对于桌面设置,我更喜欢裸分区。 我可以从LVM中看到的主要好处是, 当您必须在服务器上具有较高的正常运行时间时,可以灵活地移动和调整FS的大小 – 如果您不需要,可以更轻松地减less数据丢失的风险。
由于虚拟机pipe理程序,硬盘驱动器/ SSD写入caching等因素,LVM需要非常小心地进行写入caching设置,但是同样适用于将Linux用作数据库服务器。 缺乏大多数工具(包括临界尺寸计算和testdisk
等)的支持使得使用比应该更难。
如果使用LVM,则需要格外小心:如果可能,请使用VM /云快照,或者调查ZFS / btrfs以完全避免LVM – 您可能会发现ZFS或btrs与具有快照的LVM相比已经足够成熟。
底线:如果您不知道上面列出的问题以及如何解决这些问题,最好不要使用LVM。
我[+1]这个post,至less对我来说,我认为大多数问题确实存在。 在运行几百台服务器和几百个100TB的数据的时候看到它们。 对我来说,Linux中的LVM2就像是某个人的“聪明主意”。 就像其中的一些,他们有时会变得“不聪明”。 即没有严格分离内核和用户空间(lvmtab)状态可能感觉真的很聪明,因为可能存在腐败问题(如果你没有得到正确的代码)
那么,这种分离是出于某种原因 – 差异performance为光伏损失处理,以及在线重新激活VG(即缺lessPV)以使其重新起作用 – “原始LVM”(AIX ,HP-UX)在LVM2上变成垃圾,因为状态处理不够好。 甚至没有让我谈论法定人数损失检测(哈哈)或状态处理(如果我删除一个磁盘,不会被标记为不可用,它甚至没有该死的状态栏)
回复:稳定 pvmove …为什么
pvmove数据丢失
这样的博客上的排名最高的文章,嗯? 刚才我看了一个磁盘,在这个磁盘里,phymotion lvm的数据还是从中间挂在了状态。 我觉得有一些memleaks,一般的想法是从用户空间复制活动块数据是一件好事,只是伤心。 从lvm列表的好引用“似乎vgreduce – 发射不处理pvmove”实际上,如果在pvmove期间磁盘分离,则lvmpipe理工具从lvm更改为vi。 哦,还有一个错误,在块读取/写入错误后,pvmove会继续执行,并且实际上不再将数据写入目标设备。 WTF?
Re:快照 CoW是通过将新数据更新到快照lv区域,然后在删除快照后合并回来而不安全地完成的。 这意味着,在最终将新数据合并到原始LV中时,会产生大量的IO尖峰,更重要的是,您当然也有更高的数据损坏风险,因为一旦您点击了快照,快照就不会被破坏墙壁,但原来的。
优点是在性能上,做1写,而不是3。select快速但不安全的algorithm是一个明显期望像VMware和MS这样的人,在“Unix”上,我宁愿猜测事情会“做对”。 只要将快照备份存储在与主数据不同的磁盘驱动器上,我就没有看到太多的性能问题(当然还有另一个备份)
回复:障碍我不确定是否可以指责LVM。 就我所知,这是一个devmapper问题。 但是至less从内核2.6直到2.6.33,可能会有一些责任没有真正关心这个问题。AFAIK Xen是唯一使用O_DIRECT作为虚拟机的pipe理程序,问题在于使用“loop”时,因为内核仍然会使用该caching。 Virtualbox至less有一些设置来禁用像这样的东西,Qemu / KVM通常似乎允许caching。 所有的FUSE FS也有问题(没有O_DIRECT)
Re:大小我认为LVM会对显示的大小进行“四舍五入”。 或者它使用GiB。 无论如何,您需要使用VG Pe尺寸,并将其乘以LV的LE编号。 这应该给正确的networking大小,这个问题总是一个使用问题。 在fsck / mount(hello,ext3)或没有在线工作的fsck -n(hello,ext3)文件系统中,
当然,这是说,你不能find这样的信息的好来源。 “VRA有多lessLE?” “什么是PVRA,VGDA,等等的金额抵消”
与原来的LVM2相比,“那些不懂UNIX的人被谴责重塑它,糟糕透顶”。
几个月后更新:到目前为止,我一直在进行“完整快照”场景的testing。 如果他们满了,快照块,而不是原来的LV。 当我第一次发布这个时,我错了。 我从一些文件中find了错误的信息,或者我已经理解了它。 在我的设置中,我总是非常偏执,不让他们填满,所以我从来没有结束纠正。 也可以扩展/缩小快照,这是一种享受。
我仍然无法解决的是如何确定快照的年龄。 至于他们的performance,有一个关于“thinp”fedora项目页面的说明,说快照技术正在被修改,以便每个快照都不会变慢。 我不知道他们是如何实施的。
如果您计划使用快照进行备份,请在快照存在时做好主要性能的准备。 在这里阅读更多。 否则这一切都很好。 我已经在几十台服务器上使用lvm进行了几年的生产,虽然我使用它的主要原因是primefaces快照不能轻松扩展卷。
顺便说一句,如果你要使用1TB的驱动器,记住分区alignment – 这个驱动器最有可能有4kB物理扇区。
亚当,
另一个优点是:您可以添加新的物理卷(PV),将所有数据移动到该PV,然后在没有任何服务中断的情况下移除旧的PV。 我在过去的五年里至less使用了四次这个function。
我还没有明确指出的一个缺点:LVM2的学习曲线有些陡峭。 大多数情况下,它会在文件和底层媒体之间创build抽象。 如果你只与一些在一组服务器上分担家务的人一起工作,那么你可能会发现整个团队的额外复杂性。 致力于IT工作的大型团队通常不会有这样的问题。
例如,我们在工作中广泛使用它,并且花时间向整个团队讲授恢复无法正确引导的系统的基本知识,语言和基本知识。
要特别注意的一点是:如果从LVM2逻辑卷启动,则发现服务器崩溃时,恢复操作很困难。 Knoppix和朋友并不总是有正确的东西。 所以,我们决定我们的/ boot目录是在自己的分区上,并且总是很小而且是原生的。
总的来说,我是LVM2的粉丝。