LVM是 Logical Volume Manager(逻辑卷管理)的简写,它是Linux环境下对磁碟分区进行管理的一种机制,它由Heinz Mauelshagen在Linux 2.4核心上实现,目前最新版本为:稳定版1.0.5,开发版 1.1.0-rc2,以及LVM2开发版。Linux用户安装Linux作业系统时遇到的一个常见的难以决定的问题就是如何正确地评估各分区大小,以分配合适的硬碟空间。普通的磁碟分区管理方式在逻辑分区划分好之后就无法改变其大小,当一个逻辑分区存放不下某个档案时,这个档案因为受上层档案系统的限制,也不能跨越多个分区来存放,所以也不能同时放到别的磁碟上。而遇到出现某个分区空间耗尽时,解决的方法通常是使用符号连结,或者使用调整分区大小的工具,但这只是暂时解决办法,没有从根本上解决问题。随着Linux的逻辑卷管理功能的出现,这些问题都迎刃而解,用户在无需停机的情况下可以方便地调整各个分区大小凳岁。
基本介绍中文名 :逻辑卷管理 外文名 :Logical Volume Manager 简称 :LVM 最新版本 :稳定版1.0.5 分类 :计算技术语 作用 :磁碟分区 前言,简介,基本术语,处理流程,优点, 前言 每个Linux使用者在安装Linux时都会遇到这样的困境:在为系统分区时,如何精确评估和分配各个硬碟分区的容量,因为系统管理员不但要考虑到当前某个分区需要的容量,还要预见该分区以后可能需要的容量的最大值。因为如果估 计不准确,当遇到某个分区不够用时管理员可能甚至要备份整个系统、清除硬碟、重新对硬碟分区,然后恢复数据到新分区。 LVM模型 虽然有很多动态调整磁碟的工具可以使用,例如PartitionMagic等等,但是它并不能完全解决问题,因为某个分区可能会再次被耗尽;另外一个方面这需要 重新引导系统才能实现,对于很多关键的伺服器,停机是不可接受的,而且对于添加新硬碟,希望一个能跨越多个硬碟驱动器的档案系统时,分区调整程式就不能解 决问题。 因此完美的解决方法应该是在零停机前提下可以自如对档案系统的大小进行调整,可以方便实现档案系统跨越不同磁碟和分区。幸运的是Linux提供的逻辑盘卷管理(LVM,LogicalVolumeManager)机制就是一个完美的解决方案。 简介 逻辑卷管理器(LogicalVolumeManager)本质上是一个虚拟设备驱动,是在核心中块设备和物理设备之间添加的一个新的抽象层次,如图所示。它可以将几块磁碟(物理卷,PhysicalVolume)组合起来形成一个存储池或者卷组(VolumeGroup)。LVM可以每次从枣扰睁卷组中划分出不同大小的逻辑卷(LogicalVolume)创建新的逻辑设备。底层的原始的磁碟不再由核心直接控制,而由LVM层来控制。对于上层套用来说卷组替代了磁碟块成为数据存储的基本单元。LVM管理著所有物理卷的物理盘区,维持着逻辑盘区和物理盘区之间的映射。LVM逻辑设备向上层套用提供了和物理磁碟相同的功能,如档案系统的创建和数据的访问等。但LVM逻辑设备不受物理约束的限制,逻辑卷不必是连续的空间,它可以跨越许多物理卷,并且可以在任何时候任意的调整大小。相比物理磁碟来说,更易于磁碟空间的管理。 从用户态套用来看,LVM逻辑卷相当于一个普通的块设备,对其的读写 *** 作和普通的块设备完全相同。而从物理设备层来看,LVM相对独立于底层的物理设备,并且禁止了不同物理设备之间的差异。因而在LVM层上实现数据的连续保李橡护问题,可以不需要单独考虑每一种具体的物理设备,避免了在数据复制过程中因物理设备之间的差异而产生的问题。从LVM的核心实现原理上看,LVM是在核心通用块设备层到磁碟设备驱动层的请求提交流之间开辟的另外一条路径,即在通用块设备层到磁碟设备驱动层之间插入了LVM管理映射层用于截获一定的请求进行处理,如图所示。 用户通过lvm提供接口,依靠核心创建一系列LVM逻辑卷,所有对lvm逻辑卷的读写 *** 作最终都会由LVM在通用块设备层下方截获下来,进行更进一步的处理。这里的进一步处理主要指的是完成写请求的映射,是将请求的数据根据实际情况进行一些拆分和重定位 *** 作,从而可以将请求和数据分发到实际的物理设备中去。 基本术语 前面谈到,LVM是在磁碟分区和档案系统之间添加的一个逻辑层,来为档案系统禁止下层磁碟分区布局,提供一个抽象的存储卷,在存储卷上建立档案系统。首先我们讨论以下几个LVM术语: *物理存储介质(PhysicalStorageMedia) 指系统的物理存储设备:磁碟,如:/dev/hda、/dev/sda等,是存储系统最底层的存储单元。 *物理卷(Physical Volume,PV) 指磁碟分区或从逻辑上与磁碟分区具有同样功能的设备(如RAID),是LVM的基本存储逻辑块,但和基本的物理存储介质(如分区、磁碟等)比较,却包含有与LVM相关的管理参数。 *卷组(Volume Group,VG) 类似于非LVM系统中的物理磁碟,其由一个或多个物理卷PV组成。可以在卷组上创建一个或多个LV(逻辑卷)。 *逻辑卷(Logical Volume,LV) 类似于非LVM系统中的磁碟分区,逻辑卷建立在卷组VG之上。在逻辑卷LV之上可以建立档案系统(比如/home或者/usr等)。 *物理块(Physical Extent,PE) 每一个物理卷PV被划分为称为PE(Physical Extents)的基本单元,具有唯一编号的PE是可以被LVM定址的最小单元。PE的大小是可配置的,默认为4MB。所以物理卷(PV)由大小等同的基本单元PE组成。 *逻辑块(Logical Extent,LE) LVM抽象模型 逻辑卷LV也被划分为可被定址的基本单位,称为LE。在同一个卷组中,LE的大小和PE是相同的,并且一一对应。 图所示LVM抽象模型,展示了PV、VG、LV三者之间关系: 和非LVM系统将包含分区信息的元数据保存在位于分区的起始位置的分区表中一样,逻辑卷以及卷组相关的元数据也是保存在位于物理卷起始处的VGDA(卷组描述符区域)中。VGDA包括以下内容:PV描述符、VG描述符、LV描述符、和一些PE描述符。 系统启动LVM时激活VG,并将VGDA载入至记忆体,来识别LV的实际物理存储位置。当系统进行I/O *** 作时,就会根据VGDA建立的映射机制来访问实际的物理位置。 处理流程 从读写请求处理流程上看,支持逻辑卷管理LVM机制的Linux的I/O子系统对逻辑卷请求的处理流程大致如下: (1) 档案系统首先调用具体的档案读写过程,将偏移和档案的起始位置转换为具体档案系统的数据块,同时将这些信息以buffer-head结构的形式传递到档案缓冲层(BUFFER层)。 (2) 缓冲层根据数据块的逻辑设备号和块号,将buffer-head结构转换成一个代表请求的bio结构,发向ivm映射层。 (3)Lvm核心处理程式,分析该请求,同时根据需要决定是否进行一些拆分 *** 作,将该拆分后的请求转化到各自对应的磁碟,并将转换后的请求挂到真正的设备上。 (4) 最后由磁碟驱动程式完成读写过程,然后再将处理后的结构依次上上层传送到达档案系统。 上图中,ll-rw-block ()是档案系统和块设备的请求传递接口,所有块设备的读写请求都会首先由这个函式进行处理。档案系统提供给ll-rw-block ()的是一个buffer-head的数组,ll-rw-block ()对其中的每一个buffer_head结构调用submit_bh,将每一个buffer-head快取结构封装成bio请求结构,然后调用submit—bio下发到具体的块设备。submit—bio会调用一个通用的generic_make_request 0方法,根据bio结构中指定的设备,调用该设备伫列的make_request函式将请求挂载到相应的设备伫列中去。对于LVM映射驱动来说,逻辑卷lvm设备伫列的make_request函式就是lvm_make_request_fn。也就是说,对LVM的读写 *** 作最终都会在这个地方被截获处理。核心在这里完成请求的拆分和重定向工作,进而调用generic make request重新确定请求的传送设备,通过具体设备伫列 *** 作函式make_request将请求传送到实际物理快设备中去。SnapCDP的主要工作就是在LVM映射层设计一定的策略和机制,实现连续数据保护功能。 优点 LVM通常用于装备大量磁碟的系统,但它同样适于仅有一、两块硬碟的小系统。 小系统使用LVM的益处 传统的档案系统是基于分区的,一个档案系统对应一个分区。这种方式比较直观,但不易改变: 1.不同的分区相对独立,无相互联系,各分区空间很易利用不平衡,空间不能充分利用; 2.当一个档案系统/分区已满时,无法对其扩充,只能采用重新分区/建立档案系统,非常麻烦;或把分区中的数据移到另一个更大的分区中;或采用符号连线的方式使用其它分区的空间。 3.如果要把硬碟上的多个分区合并在一起使用,只能 采用再分区的方式,这个过程需要数据的备份与恢复。当采用LVM时,情况有所不同: LVM 1.硬碟的多个分区由LVM统一为卷组管理,可以方便的加入或移走分区以扩大或减小卷组的可用容量,充分利用硬碟空间; 2.档案系统建立在逻辑卷上,而逻辑卷可根据需要改变大小(在卷组容量范围内)以满足要求; 3.档案系统建立在LVM上,可以跨分区,方便使用; 大系统使用LVM的益处 在使用很多硬碟的大系统中,使用LVM主要是方便管理、增加了系统的扩展性。 在一个有很多不同容量硬碟的大型系统中,对不同的用户的空间分配是一个技巧性的工作,要在用户需求与实际可用空间中寻求平衡。 用户/用户组的空间建立在LVM上,可以随时按要求增大,或根据使用情况对各逻辑卷进行调整。当系统空间不足而加入新的硬碟时,不必把用户的数据从原硬碟迁移到新硬碟,而只须把新的分区加入卷组并扩充逻辑卷即可。同样,使用LVM可以在不停服务的情况下。把用户数据从旧硬碟转移到新硬碟空间中去。如何处理系统崩溃后的Windows 7
想准备使用WindDbg来解决Windows 7系统崩溃,需要一台个人电脑满足下列要求:
32位或64位Windows 7/Vista/XP或Windows Server 2008/2003
约25MB的硬盘空间(这不包括存储转储文件或符号文件的空间)
正常的互联网连接
微软Internet Explorer 5.0或更高版本
WinDBG的最新版本是Windows SDK中的一个选项。SDK下载文件名为winsdk web.exe,大小498KB,可以免费下载。(注意:安装调试器后,可以删除庞大的下载文件,从而腾出大量空间。)
内存转储(页面文件必须在C:上,以便Windows保存内存转储文件)
安装WinDbg
下载Windows SDK、运行安装向导程序后,选择Common Utilities(常用实用程序)下面的Debugging Tools for Windows(Windows调试工具)选项。
配置启动和恢复
这一步很烦人。因为不态友和太容易找到启动和恢复对话框为了检查系统已设定成在错误检查期间采取合适的动作,包括要不要自动重新启动、保存多少大小的转储文件,需要这个对话框。
找到启动和恢复对话框:
1、选择屏幕左下角的Start(开始)按钮
2、选择Control Panel(控制面板)
3、选择System and Security(系统和安全)
4、从右边栏的选项中选择System(系统)
5、从左边栏中选择Advanced system settings(高级系统设置),显示SystemProperties(系统属性)对话框
6、在系统属性对话框中选择Advanced(高级)选项卡
7、在启动和恢复区中选择Settings(设置)按钮
看到如下所示的启动和恢复对话框:
确保启动和恢复设置是否正确
在System failure(系统故障)下
1、勾选Write an event to the system log(将事件写入系统日志)
2、勾选Automatically restart(自动重新启动)
3、选择Kernel memory dump(核心内存转储)
4、确保转储文件写入%SystemRoot%\MEMORY.DMP
5、勾选Overwrite any existing file(覆盖任何现有文件),以节省硬盘空间
请注意:这将意味着你的系统将既保存内核转储文件,又保存微型转储文件。然而,尽管你有一个微型转储用于每个事件,但保存的将是最近一个内核转储。
配置WinDbg
启动调试器:想启动WinDbg,请依次选择下列:
Start | All Programs | Debugging Tools for Windows| WinDbg
开始|所有程序| Windows调试工具|WinDbg
如果你要随时使用WindDbg,需要简化这个程序的启动:只要把它固定到Startup(启动)菜单上,或者发送告段快捷方式到桌面上。
符号有多重要?
在你想找到转储文件中的某个异常模块、急于挽救局面之前,得确保调试器已准备就绪。最重要的是,你得确信它会为你在排除故障的那个 *** 作系统的确切版本找到符号文件。
符号表是编译后的产物。当某个程序被编译后,源代码从一种高级语言转换成了机器码。与此同时,编译器会创建一个符号文件,带有标识符列表、标识符在程序中的位置及其属性。一些标识符是全局和局部变量以及函数调用。程序不需要这些信息才能执行。因而,信息可以取出来存储在另一个文件中,减小了最终可执行文件的大小。
帆盯 与较大的可执行文件相比,较小的可执行文件占用磁盘空间较少,加载到内存的速度较快。但凡事都有另一面:某程序引起问题时, *** 作系统只知道出现问题的十六进制地址。你需要比这更多的信息,才能确定哪个程序在使用该内存空间,它试图在进行什么 *** 作。Windows符号表就能解答这个问题,而可以访问针对特定系统内存的符号好比将地名加在地图上。反过来,分析符号表错误的转储文件好比拿着一张波士顿的地图在旧金山找路。
配置WinDbg以定位符号
Windows有数量多得惊人的符号表文件。之所以这样,是因为 *** 作系统的每个版本,甚至一次性版本,都会带来一个新文件。幸运的是,WinDbg可以为你处理这件事,但必须为它配置正确的搜索路径。要做到这一点,就要启动WinDbg,并依次选择下列:
File | Symbol file path
文件|符号文件路径
请注意:星号之间的地址表明你想把符号存储在何处,以便将来访问。比如说,我把符号存储在C:驱动器根目录下一个名为symbols的文件夹中,
打开内存转储时,WinDbg会查看可执行文件(.exe和.dll等文件),并提取版本信息。然后它会请求微软的符号服务器,该服务器包含该版本信息,并找到确切的符号表,从中获取信息。它不会下载你在排除故障的特定 *** 作系统的所有符号,只会下载需要的符号。另外,你可以选择从微软下载并存储完整的符号文件。然而,对于你在分析的 *** 作系统的每个版本而言,这个文件的大小在600MB到800MB之间。相比之下,WinDbg下载的文件不到100MB,即可分析测试机上 *** 作系统的好几个版本。即使如今硬盘成本很低,节省的空间还是相当大。
关于转储文件
内存转储文件是一份快照,表明了系统崩溃时内存里面有什么。虽然内存转储文件也许是你可能需要查看的最乏味、最不直观的东西,但 *** 作系统崩溃时,它是你最好的朋友。Windows创建了三种不同大小的内存转储:微型转储(minidump)、内核转储(kernel dump)和完全转储(full dump)。
1、小型转储或微型转储
Windows 7微型转储只有256K字节,不管从哪个标准来看都很小然而,它们比Windows 2000/XP时候大了不少,那时候只有64K。微型转储之所以这么小,原因之一是,它们不含有故障出现时,内存中的任何二进制文件或可执行文件。不过,那些文件对调试器在之后进行分析来说至关重要。只要你在创建转储文件的机器上调试,WinDbg就能在System Root文件夹中找到它们(除非转储文件创建后,二进制文件因系统更新而更改)。此外,调试器应该能够通过SymServ来找到它们。如果配置得当,除了内核转储外(下文有描述),Windows 7还会为每一次崩溃事件创建和保存微型转储。
2、内核转储
内核转储大小大致相当于Windows 7的内核占用的内存。在我的笔记本电脑上,内核转储约344MB大小,压缩后只有100MB多点。内核转储的一个优点是,它含有二进制文件。默认情况下,我总是让系统保存最近的内核转储。请记住:系统在保存内核转储时,也会保存微型转储。
3、完整转储或完全转储
完全内存转储大小相当于已安装内存的数量。由于许多系统有数GB内存,这方面的存储很快会成为问题,如果你频频遇到崩溃,更是如此。我通常不建议保存完全内存转储,因为它们占用太多的空间,而且一般也不需要。不过微软的Vachon倒建议:“如果你试图调试一个很复杂的问题,比如设备中多个服务之间的远程过程调用(RPC)问题,又想看看这些服务在用户模式下进行什么 *** 作,完全内存转储就大有帮助。”因此,要坚持保存内核转储,但要准备偶尔创建完全转储。
如果没有内存转储可供使用,怎么办?
如果你没有内存转储可以查看,也不用担心,可以让系统崩溃!最简单的方法(不必更改注册表的设置)是,运行一个名为NotMyFault的出色工具(这要感谢Mark Russinovich和SysInternals网站的团队)。它提供了一系列选项,可以加载行为异常的驱动程序(这需要管理员权限)。
但记住:NotMyFault会制造系统崩溃!所以要让你的系统准备好,确信让需要访问该系统的任何人注销退出几分钟。凡是含有可能会丢失的信息的文件都要保存,并关闭应用程序。如果按上述方法配置了系统,它应该没有问题。机器应该会崩溃,重新启动,这样就有了内核转储和微型转储可以查看。我用过好多次,毫无问题。
下载NotMyFault,迫使系统崩溃
1、从下列微软网址下载NotMyFault工具,将文件提取到文件夹。
2、鼠标右击NotMyFault.exe,或者在命令提示符下,键入NotMyFault。如果看到“You don't have permission to open this file”(你没有权限打开此文件)的信息,那么再试一次,但是鼠标右击时,选择“Run as Administrator”(以管理员身份运行)。
3、从菜单中选择High IRQL fault (kernelmode))和Do Bug按钮。这将生成一个内存转储文件和“Stop D1”错误。
4、稍等一下...你的系统马上会回来,会有微型转储和内核转储可以查看了。
加载转储文件
如果你看到“你没有权限打开此文件”的信息,通过鼠标右击WinDbg来进行重新启动,选择“以管理员身份运行”。
一旦调试器运行,选择菜单选项File | Open crash dump(文件|打开崩溃转储),指向它,打开你想要分析的内存转储。如果你想让它记住转储文件在哪里,那么看到Save information for workspace(为工作区保存信息)时,选择Yes(确定)。
WinDbg会寻找Windows的这个确切版本的Windows符号文件。它引用符号文件路径,访问microsoft.com,并显示结果。
注意:如果调试器似乎很忙,那可能是第一次打开特定机器的转储文件,因而,WinDbg从SymServ下载符号。下次打开同一台机器的转储时,调试器似乎会快得多,因为符号文件已在本机上。
命令窗口会出现,崩溃分析显示在该窗口上。左下角将是KD>提示符。提示符右边是一个单行窗口,你可以在这里输入命令。
可能的错误信息
如果你看到信息:
ERROR: Symbol file could not be found. Defaulted to export symbolsfor ntoskrnl.exe -
错误:符号文件找不到。默认情况下导出ntoskrnl.exe的符号-
通常是下列三种情况中有一种出错了:
路径不正确仔细检查,确保之前输入的符号文件路径没有拼写错误或其他错误(如空白处)
连接失效,检查互联网连接,确保它在正常工作
防火墙禁止访问符号文件,或者符号文件在检索过程中已损坏
如果你的路径和连接没问题,那么问题可能出在防火墙上。如果防火墙一开始阻止WinDbg下载符号表,这会导致符号文件损坏。如果对防火墙解禁,再次试图下载符号文件仍不行,那么表明符号文件已损坏。最快的解决办法是关闭WinDbg,删除symbols文件夹(最有可能设成c:\symbols),并且对防火墙解禁。现在,重新打开WinDbg和转储文件。调试器会重新创建文件夹,并重新下载符号。
如果你看到这个信息:
Kernel symbols are WRONG. Please fix symbols to do analysis.
内核符号错误。请改正符号,进行分析。
那么,WinDbg无法检索正确的符号,它会改而使用默认的符号表。但是这个警告信息表明,它无法生成正确的结果。请记住:符号表是在程序编译时生成的,所以每个Windows版本、补丁和热修复程序等都有符号表文件。返回到前一个章节,确保你设置的路径正确、连接正常,而且没有被阻止。
从头到尾浏览WinDbg的输出。你可能会看到类似以下的错误信息,表明它可能找不到信息myfault.sys:
Unable to load image \??\C:\Windows\system32\drivers\myfault.sys,Win32 error 0n2
无法加载映像\??\C:\Windows\system32\drivers\myfault.sys, Win32 error 0n2
WARNING: Unable to verify timestamp for myfault.sys
警告:无法为myfault.sys验证时间戳
ERROR: Module load completed but symbols could not be loaded formyfault.sys
错误:模块加载已完成,但无法为myfault.sys加载符号
这意味着,调试器在寻找myfault.sys方面的信息。然而,由于它像第三方驱动程序(是的,它是由微软开发,但肯定不是平常的微软产品),它没有符号(微软并不存储所有第三方驱动程序)。可以忽视 该错误信息。供应商通常在交付驱动程序时不附带符号文件,符号文件并不是你所必要的没有符号文件,你也能找到有问题的驱动程序。
当你让WinDbg打开转储文件后,它会自动进行基本的分析。甚至不用给调试器下达任何直接命令,它已报出了可疑对象,如下面屏幕所示。
命令
有数百个命令可以控制WinDbgWinDbg是个功能很强大的工具。幸运的是,我们只需要一个命令。为了让探讨更深入一点,我们将多用两个命令,总共有三个命令。它们是!analyze –v、lmv和lmvm。
!analyze –v以详细模式分析!analyze –v显示了系统崩溃时,描述系统状态的信息,遇到的故障,以及谁是主要的可疑对象。
lmv显示加载模块的
详细信息lmv显示了一系列驱动程序及路径、版本和供应商信息。它常包含产品描述。lmv输出结果可能要很长的时间。留意WinDbg界面的左下角,你通常会看到kd>提示符。获取信息时,它会显示*BUSY*。只有kd>提示符返回后,你才能使用另外的命令。
lmvm
[模块名称]显示某加载模块
(模块名称)的
详细信息lmvm[模块名称]让你能够告诉调试器只获取那个特定模块的信息。比如说:lmvm myfault.sys。
!analyze -v
在命令窗口底部的命令行上输入!analyze -v(注意yynw命令与“-v”之间的空间)。V(详细)这个参数选项符告诉WinDbg,你想要所有的详细信息。它给出的解释结合了英语和编程术语,不过这是个良好的开头。实际上,在许多情况下,你可能不需要任何下一步 *** 作。如果你明白了崩溃的原因,可能就搞定了。
下面这个例子是使用NotmyFault驱动程序来分析我们的崩溃。
如果使用!analyze –v,调试器输出结果的一个重要部分是堆栈文本。每次查看转储文件,总要关注堆栈最右边,留意任何第三方驱动程序。在本例中,我们看到了myfault。请注意:事件由下往上按年月顺序排列系统执行每个新任务时,新任务会显示在最上面,把以前的 *** 作往下移。在这个很短的堆栈中,你会看到myfault处于活跃状态,然后出现页面错误,系统声明进行错误检查,这正是系统停止(蓝屏)的时候。请注意:部分数据已被清除,以便该内容能在一个页面上显示,“truncated”注释表明了这点。
用lmv来分析
下一步是确认可疑对象的存在,并找到有关它的任何详细信息。往命令行中输入lvm,可显示已加载的模块v指调试器以详细模式输出,显示模块的所有已知详细信息。
如果运行命令lmv后,你看到WinDbg的界面左下角出现*BUSY*(*忙碌*)信息,也不用担心。这是由于它在收集系统发生故障时,加载模块的详细信息收集过程可能需要几分钟。收集完毕后,你会在原来显示BUSY的地方看到kd>。
这里有大量信息。找到所要关注的驱动程序得花点时间,所以可通过选择Edit | Find(编辑|查找)来简化这个过程,然后输入可疑的驱动程序,这里是myfault。你看到的信息多少取决于驱动程序供应商。一些供应商把很少的信息放在文件中,而微软等另一些供应商往往把全面的信息放在文件中。
用lmvm来分析
想直接找到某个特定模块,一个好方法就是使用lmvm命令。在这种情况下,输入lmvm myfault,调试器将只返回针对该模块的数据。
你找到供应商的名称后,进入其网站,检查更新、知识库文章及其他支持信息。要是没有这些内容,或未能解决问题,请联系供应商。对方可能会要你把调试信息发过去(很容易把调试器的输出结果拷贝到电子邮件或Word文档里面),或者可能会要你把内存转储发过去(先进行打包,既为了压缩内存转储,又为了保护数据完整性)。
另外的三分之一
幸运的是,你一打开转储文件就知道原因的机率大概有三分之二。但有时转储文件提供的信息具有误导性,或者不够全面。这时候,又该怎么办呢?
有时原因出在硬件上
如果你老是遇到崩溃,又没有明确或一致的原因,可能出在内存问题上。下载免费测试工具Memtest86。这个简单的诊断工具运行速度快、效果好。许多人轻视内存问题的可能性,因为内存问题仅占系统崩溃的一小部分。然而,内存问题常常是害得你一直猜测的原因。
Windows是罪魁祸首吗?
很抱歉,这不可能!虽然可能有人会觉得很意外,但事实上, *** 作系统很少出错。如果ntoskrnl.exe(Windows核心)或win32.sys(主要负责Windows上GUI层的驱动程序)被列为是罪魁祸首——它们常常被这样列为,也不要过于草率地下定论。下面这种可能性大得多:某个异常的第三方设备驱动程序调用了Windows组件,以执行一项 *** 作,然后传送了坏的指令,比如告诉它写入到根本不存在的内存。所以,尽管 *** 作系统肯定会犯错,但你在怪罪微软之前先排除掉其他的所有可能性。
冤枉驱动程序
你经常会看到反病毒驱动程序被列为是崩溃的原因。比如说,使用!analyze -v后,调试器在“IMAGE_NAME”(映像名称)这一行报告反病毒软件的驱动程序。原因可能确实出在反病毒驱动程序上,不过要牢记:这类驱动程序被冤枉的可能性更大。原因如下:反病毒代码要工作,它必须监视所有的文件打开和关闭。为了做到这一点,代码处在 *** 作系统的低层,而且在不断工作。实际上,该代码太忙碌了崩溃发生时,它常常出现在活跃的函数调用堆栈上,哪怕明明不是它导致崩溃,也这样。因为该堆栈上的任何第三方驱动程序立即成为可疑对象,所以反病毒驱动程序常常被列为崩溃的原因。不管是不是真的导致了问题,反病毒代码都经常出现在堆栈上。
缺少供应商信息?
一些驱动程序供应商并没有花时间把足够的信息附在模块后面。所以,如果lmv起不到帮助,试着查看映像路径上的子目录(如果有映像路径的话)。常常其中一个子目录就是供应商名称或者名称缩写。另一个办法就是用谷歌搜索引擎搜一下。输入驱动程序名称及/或文件夹名称。除了别人发布的关于该驱动程序的信息外,你可能还会找到相应的这家供应商。
总结
你已经花了时间来准备对付下一次蓝屏死机,记住:在大多数情况下,你打开转储文件后,立马就能知道原因,整个过程用不了一分钟。如此轻而易举地查明三分之二的严重故障的原因,真是让人满意——对你的用户们来说更是如此。
对于Linux用户而言,在安装一台Linux机器的时候,遇到的问题之一就是给各分区估计和分派足够的硬盘空盯渣毁间。无论对一个正在为服务器寻找空间的系统管理员,还是一个磁盘即将用尽的普通凯备用户来说,这都是一个非常常见的问题。解决的方法通常是使用符号链接,或者一些调整分区大小的工具(比如parted)。但是,这只是一个暂时性的解决办法,不久,我们又会面临同样的问题。如果你是一个站点的系统管理员,管理着数量众多的、连接在Internet之上的服务器,那么你每关机一分钟,都会给公司带来很大损失。此外,使用这种方法,在修改了分区表之后,每一次都得重新启动系统。LVM(逻辑卷管理程序)可以帮助我们解决这些问题。
LVM简介
Linux LVM可以使管理工作更加轻松。相对于硬盘和分区,LVM是从更高的层次来看待存储空间的。在使用LVM之前,先来看一些将要使用到的相关概念。
物理卷
物理卷是指硬盘分区或者从逻辑上看起来和硬盘分区类似的设备(比如RAID设备)。
逻辑卷
一个或者多个物理卷组成一个逻辑卷。对于LVM而言,逻辑卷类似于非LVM系统中的硬盘分区。逻辑卷可以包含一个文件系统(比如/home或者/usr)。
卷组
一个或者多个逻辑卷组成一个卷组。对于LVM而言,卷组类似于非LVM系统中的物理硬盘。卷组把多个逻辑卷组合在一起,形成一个可管理的单元。
document.body.clientWidth-450) {this.height=(document.body.clientWidth-450)*this.height/this.widththis.width=document.body.clientWidth-450}" border="0">
LVM工作方式
下面来看一看LVM到底是怎样工作的。每一个物理卷都被分成几个基本单元,即所谓的PE(Physical Extents)。PE的大小是可变的,但是必须和其所属卷组的物理卷相同。在每一个物理卷里,每一个PE都有一个惟一的编号。PE是一个物理存梁辩储里可以被LVM寻址的最小单元。
每一个逻辑卷也被分成一些可被寻址的基本单位,即所谓的LE(Logical Extents)。在同一个卷组中,LE的大小和PE是相同的,很显然,LE的大小对于一个卷组中的所有逻辑卷来说都是相同的。
在一个物理卷中,每一个PE都有一个惟一的编号,但是对于逻辑卷这并不一定是必需的。这是因为当这些PE ID号不能使用时,逻辑卷可以由一些物理卷组成。因此,LE ID号是用于识别LE以及与之相关的特定PE的。正如前面所提到的,LE和PE之间是一一对应的。每一次存储区域被寻址访问或者LE的ID被使用,都会把数据写在物理存储设备之上。
你可能会觉得奇怪,有关逻辑卷和逻辑卷组的所有元数据都存到哪儿去了。类似的在非LVM系统中,有关分区的数据是存储在分区表中,而分区表被存储在了每一个物理卷的起始位置。VGDA(卷组描述符区域)功能就好象是LVM的分区表,它存储在每一个物理卷的起始处。
VGDA由以下信息组成:
·一个PV描述符
·一个VG描述符
·LV描述符
·一些PE描述符
当系统启动LV时,VG被激活,并且VGDA被加载至内存。VGDA帮助识别LV的实际存储位置。当系统想要访问存储设备时,由VGDA建立起来的映射机制就用于访问实际的物理位置来执行I/O *** 作。
开始工作
下面具体看一看如何使用LVM。
第一步:配置内核。在安装LVM之前,内核之中应该有LVM模块,可以使用以下的步骤来完成:
#cd /usr/src/linux
#make menuconfig
选择Multi-device Support (RAID and LVM)子菜单,选中以下两个选项:
[*] Multiple devices driver support (RAID and LVM)
<*>Logical volume manager (LVM) Support.
复制代码
注:如果在安装Linux系统时已经安装了LVM相关软件包,上面几步 *** 作可以省略掉,直接到第二步.
第二步:检查驱动器上空闲硬盘空间的总量。这可以通过以下命令来未完成:
# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/hda1 3.1G 2.7G 398M 87% /
/dev/hda2 4.0G 3.2G 806M 80% /home
/dev/hda5 2.1G 1.0G 1.1G 48% /var
第三步:在硬盘上创建一个LVM分区。使用fdisk或者其它的分区工具来创建一个LVM分区。Linux LVM的分区类型为8e。
# fdisk /dev/hda
press p (to print the partition table) and n (to create a new partition)
第四步:创建一个物理卷。下述命令将在分区的起始处创建一个卷组描述符:
# pvcreate /dev/hda6
pvcreate -- -physical volume "/dev/hda6" successfully created
# pvcreate /dev/hda7
pvcreate- -- physical volume "/dev/hda7" successfully created
第五步:创建一个卷组。通过下面的方法创建一个新的卷组,并且添加两个物理卷:
# vgcreate test_lvm /dev/hda6 /dev/hda7
vgcreate- -- INFO: using default physical extent size 4 MB
vgcreate- -- INFO: maximum logical volume size is 255.99 Gigabyte
vgcreate- -- doing automatic backup of volume group "test_lvm"
vgcreate- -- volume group "test_lvm" successfully created and activated
上述命令将创建一个名为test_lvm,包含有/dev/hda6和/dev/hda7两个物理卷的卷组。使用下面命令来激活卷组:
# vgchange -ay test_lvm
使用“vgdisplay”命令来查看所建立卷组的细节信息。
# vgdisplay
--- Volume group ---
VG Name test_lvm
VG Access read/write
VG Status available/resizable
VG # 0
MAX LV 256
Cur LV 1
Open LV 0
MAX LV Size 255.99 GB
Max PV 256
Cur PV 2
Act PV 2
VG Size 3.91 GB
PE Size 4 MB
Total PE 1000
Alloc PE / Size 256 / 1 GB
Free PE / Size 744 / 2.91 GB
VG UUID T34zIt-HDPs-uo6r-cBDT-UjEq-EEPB-GF435E
第六步:创建一个逻辑卷。使用lvcreate命令在卷组中创建一个逻辑卷:
# lvcreate -L2G -nlogvol1 test_lvm
第七步:创建文件系统。在该逻辑卷上选择使用reiserfs日志文件系统:
# mkreiserfs /dev/test_lvm/logvol1
使用mount命令来加载新创建的文件系统。
# mount -t reiserfs /dev/test_lvm/logvol1 /mnt/lv1
第八步:在/etc/fstab和/etc/lilo.conf中添加一个入口。在/etc/fstab中加入以下入口,在启动时加载文件系统:
/dev/test_lvm/logvol1 /mnt/lv1 reiserfs defaults 1 1
如果没有覆盖原来的内核,那么拷贝一份重新编译后的内核,并且在启动时选择是否使用LVM。下面是LILO文件的内容:
image = /boot/lvm_kernel_image
label = linux-lvm
root = /dev/hda1
initrd = /boot/init_image
ramdisk = 8192
添加以上内容后,使用以下命令重新加载LILO:
#/sbin/lilo
第九步:修改逻辑卷的大小。可以使用lvextend命令方便地修改逻辑卷的大小,增加逻辑卷大小的方法如下:
# lvextend -L 1G /dev/test_lvm/logvol1
lvextend -- extending logical volume "/dev/test_lvm/logvol1" to 3GB
lvextend -- doing automatic backup of volume group "test_lvm"
lvextend -- logical volume "/dev/test_lvm/logvol1" successfully extended
类似的,减小逻辑卷大小的方法如下:
# lvreduce -L-1G /dev/test_lvm/lv1
lvreduce -- -Warning: reducing active logical volume to 2GB
lvreduce- -- This may destroy your data (filesystem etc.)
lvreduce -- -do you really want to reduce "/dev/test_lvm/lv1"? [y/n]: y
lvreduce- -- doing automatic backup of volume group "test_lvm"
lvreduce- -- logical volume "/dev/test_lvm/lv1" successfully reduced
复制代码
总结
从上面的讨论可以看到,LVM具有很好的可扩展性,并且使用起来很直观。一旦卷组建立起来以后,根据需求调整每一个逻辑卷的大小也非常容易。
LVM *** 作的相关命令:
fdisk -l :查看系统中都认到了那些物理硬盘
pvdisplay:查看系统中已经创建好的物理卷
pvcreate:创建一个新的物理卷
pvremove:删除一个物理卷(也就是从物理卷中删除一个LVM标签)
vgdisplay:查看系统中的卷组
vgcreate:创建一个新的卷组
vgreduce:从卷组中删除一个物理卷(也就是缩小卷组)
vgremove:删除一个卷组
lvdisplay:查看系统中已经创建好的逻辑卷
lvcreate:创建一个新的逻辑卷
lvreduce:缩小逻辑卷(也就是从一个逻辑卷中减少一些LE)
lvremove:从系统中删除一个逻辑卷
mkfs:基于逻辑卷创建一个相应类型的文件系统
mkdir -p $mount_piont:创建一个挂载目录
创建好的文件系统位于:
/dev/$create_vg_name/$lv_name
mount /dev/$create_vg_name/$lv_name $mount_piont:挂载文件系统
vgscan:读取系统中创建的所有卷组
vgchange -a y :激活所有卷组 (开机执行,redhat可在/etc/rc.d/rc.sysinit系统启动初始化脚本里可以找到)
vgchange -a n :关闭所有卷组(提示:必须在umount所有的文件系统后,才能成功执行
裸设备使用:
1.先lvreate
2. raw /dev/raw/raw0 /dev/mapper/vgname-lvname
3.修改 /etc/sysconfig/rawdevices,添加:
/dev/raw/raw0 /dev/mapper/vgname-lvname
4.执行命令service rawdevices restart,使得/etc/sysconfig/rawdevices文件中的裸设备配置生效
5.执行/sbin/schkconfig rawdevices on 使得系统重启后,裸设备能自动加载
6.修改裸设备的属主,使得相应权限的用户对裸设备有读写权限
chown -R owner:group /dev/raw/raw0
7.将修改裸设备属主修改命令加入到系统启动执行脚本/etc/rc.local中,使得系统启动后裸设备的属主保持不变.
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)