当前位置:首页 » 服务存储 » 存储池调试方法
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

存储池调试方法

发布时间: 2022-07-13 12:03:06

‘壹’ 谁调整了Windows服务器的内存池大小

分页内存池与非分页内存池在Windows 服务器上是两个重要的内核资源。系统及其底层的驱动在分配内存时,会从这两个内存池中申请相应的内存,用于存储它们的数据结构。
默认情况下,这两种资源都是在机器启动时,系统在硬件组成的基本上自动计算出来的,也就是说它们的值可能根据内存大小及其它硬件的类型的区别,在不同的机器上有所不同。
从公开的资料中,我们一般可以查询到在Windows操作系统上,Windows 的分页内存池/非分页内存池极限值是:

所以一般情况下,在32位的系统上,由于分页内存池/非分页内存池的极值都是有限的,且总量并不是很高,如果底层驱动出现内存池泄漏的问题,或是系统总的内存池使用量过高,
就非常容易造成分页内存池/非分页内存池耗尽的情况,从而导致用程序无法正常运行,或是服务失去响应甚至蓝屏的问题。
目前在Windows中,比较常用的查询当前系统的分页内存池/非分页内存池实时使用量的工具是任务管理器。
图1:任务管理器查询实时分页内存池/非分页内存池的使用量

而对于当前系统的分页内存池/非分页内存池的极值大小的查询方法,一般是使用process explorer工具(需要网络支持)。
使用方法为:
1: 用默认路径安装Windbg工具:
2:下载Process
Explorer工具:
3: 运行Process
Explorer,在Options -> Configure Symbols…中配置符号,如下图2(注: 这里需要服务器可连接到微软的符号服务器以自动下载符号)。
图2: Process Explorer配置符号

4: 然后在Process Explorer菜单中,选择view -> System Information…来查看当前的分页内存池/非分页内存池的极值。
这里以一台Windows 2003 sp2 x86的服务器为例:

在上面示例的系统上,我们可以看到当前服务器在2GB物理内存的情况下,分页内存池极限值为362,496KB,约354MB,而非分页内存池的极值是262,140KB,约256MB。
比较上述极值与我们之前查询到的理论值,我们可以看到,非分页内存池的大小(256MB)与资料中查到的极限值基本一致,但是分页内存池的值354MB要远小于理论上的470
- 650MB。这是为什么呢?
这个主要是因为在Windows 2003安装完成后,系统中并没有把paged pool设置到可以支持的最大值,而是有一定的保留。我们可以根据KB312362(http://support.microsoft.com/?id=312362),手动的调整下面的注册表值,把分页内存池的极值上调到当前机器可支持的最大值
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session
Manager\Memory Management\PagedPoolSize
= 0xFFFFFFFF.
上述注册表值默认是0,表示让系统自动设定。如果把它设置成0xffffffff,就可以把当前机器的paged
pool 的极值,调整到机器真正支持的最大值了。
同样是前面我们测试的服务器,在做了相应调整后,我们可以看到它的分页内存池的最大值被调整到了530MB左右:
图4:Windows 2003 SP2 x86调整PagedPoolSize后的分页内存池大小

这里我们看到530MB已经是这台服务器的极值了。如果这台机器的物理内存进行调整,分页内存池的最大值也可能随之有一定的增减。
对于非分页内存池的极大值,系统默认已经是使用到了所支持的最大值,它是不能通过注册表的设置来提高它的极大值的。
从操作系统的层面,除去调整上述的注册表值PagedPoolSize做手动的指定,还会有两种情况会影响到系统的分页内存池/非分页内存池的大小:
1:系统运行在/3GB的模式。
2:系统安装了终端服务器的角色。
这边我们看一下这两种情况下,系统的内存池的极值有什么变化:
1:在开启/3GB的模式(即在boot.ini中增加了/3GB)时,系统的内核地址寻址空间从2GB下降到1GB,这样的话系统的内存池的极值也下调了,而且幅度比较大。
在同一台Windows 2003 SP2 x86服务器上,我们可以看到增加/3GB后,系统的分页内存池/非分页内存池的极值降低了很多:
图5:Windows 2003 SP2 x86开启/3GB后的分页内存池/非分页内存池大小

在/3GB的模式下,我们看到分页内存池极值调整为196,608KB,约192MB,而分页内存池的大小下降为129,276KB,约126MB。
2:在安装了终端服务器的角色后,系统的分页内存池也会有一定下降:
图6:Windows 2003 SP2 x86终端服务器的分页内存池/非分页内存池大小

可以看到系统的分页内存池下降到了256,000KB,约250MB,而非分页内存池没有变化。
上述两种情况都是从操作系统的角度,对内存池的大小进行调整。
除去上述两种情况,其实在硬件层面上,我们还有另一个选项,会影响到系统的分页内存池极值大小,这个选项就是内存热插拔功能(hot-add memory)。
在Windows 2003 x86的企业版本/数据中心版本中,操作系统本身提供对内存热插拔的支持,即在不关机的情况下,可以动态的支持新增的内存,这样可以避免机器的维护时间及停机周期。但是相应的,服务器也需要在硬件层面上支持内存热插拔的功能。此项功能只会在硬件支持内存热插拔时,才会对系统的分页内存池有影响。在有一些虚拟机上,由于它们也提供发对服务器内存热插拔功能的支持,所以这些虚拟服务器也可能会碰到相似的问题。
具体情况为:
在硬件/系统都支持内存热插拔功能的前提下,为了实现对热插内存的支持,系统需要事先在开机时,就分配出一部分内核资源,用于提供对可能新增加的内存的支持。也就是说这部分事先分配的资源并不是依赖于当前硬件配置,而是依赖于服务器可以支持到的最大内存容量。在32位系统上,系统最大可支持的内存是64GB,所以内存热插拔最大可以预留对64GB热插拔内存的支持。而这部分资源的分配,就会影响到系统总的分页内存池大小。
通过之前的测试,我们知道一台Windows 2003 sp2 x86的终端服务器系统上,如果4GB物理内存,且不支持内存热插拔时,分页内存池应该是略大于250MB(如图6),大概在260MB左右。
当这台机器提供64GB的热插拔内存支持时,系统的分页内存池会下降大约80MB左右,从DUMP文件中我们可以很清楚的看到这一点。下面这部分数据来自一台Windows 2003 sp2 x86 4GB物理内存的企业版本终端服务器的DUMP文件。
1:
kd> !vm
***
Virtual Memory Usage ***
Physical Memory: 1048347 ( 4193388 Kb)

NonPagedPool Usage: 26116 ( 104464 Kb)
NonPagedPool Max: 65536 ( 262144 Kb) < —— 非分页内存池大小没有变化
PagedPool 0 Usage: 5141 ( 20564 Kb)
PagedPool 1 Usage: 9470 ( 37880 Kb)
PagedPool 2 Usage: 9484 ( 37936 Kb)
PagedPool 3 Usage: 9483 ( 37932 Kb)
PagedPool 4 Usage: 9430 ( 37720 Kb)
PagedPool Usage: 43008 ( 172032 Kb)
PagedPool Maximum: 43008 ( 172032 Kb) < —– 分页内存池已经比不提供内存热插拔时的250MB低了约82MB,目前只有168MB。
内存热插拔可以提供更灵活的内存管理机制,但是也会同时影响到服务器的分页内存池极值,造成分页内存池更容易被耗尽,而引起各种异常。
从系统的角度,我们在注册表中提供了一个接口,用于指定系统可以支持的热插拔内存大小:

Path

HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management

Value

DynamicMemory

Type

REG_DWORD

Data

0x1

这个值指定了系统可以支持多少GB的热插拔内存。由于系统内存大都超过1G,设置成1就表示系统已经基本禁用了Hot-add Memory的功能。这样就可以避免系统分页内存池在开机时大幅降低的问题。当然,我们也可以考虑直接把热插拔内存的功能从硬件的层面禁用掉。虚拟机控制平台也可能有相应的选项来禁用热插拔内存的功能。上述4GB内存的服务器在硬件层面上禁用掉热插拔内存功能后,系统的内存池的变化为:
kd> !vm
*** Virtual Memory Usage ***
Physical Memory: 1048375 ( 4193500 Kb)

NonPagedPool Usage: 12526 ( 50104 Kb)
NonPagedPool Max: 65279 ( 261116 Kb)
PagedPool0 Usage: 26806 ( 107224 Kb)
PagedPool1 Usage: 5100 ( 20400 Kb)
PagedPool2 Usage: 5125 ( 20500 Kb)
PagedPool3 Usage: 5128 ( 20512 Kb)
PagedPool4 Usage: 5103 ( 20412 Kb)
PagedPool Usage: 47262 ( 189048 Kb)
PagedPool Maximum: 66560 ( 266240 Kb) < —-分页内存池已经调整回260MB
这样就可以避免由于热插拔内存功能预留大量内核资源,导致分页内存池大量下降的问题了。
综上所述,我们知道除去系统本身的硬件配置外,还有四个设定可能会影响到分页内存池/非分页内存池的极值大小:
1: 手动的设定PagedPoolSize注册表值,可以影响分页内存池的大小。
2: 使用/3GB的模式,会影响分页内存池/非分页内存池的大小。
3: 使用终端服务器模式,会影响到分页内存池/非分页内存池的大小。
4: 使用内存热插拔的功能支持大的热插拔内存时,会影响到分页内存池的大小。

‘贰’ KVM实现动态迁移如何共享存储池

这种SAN存储,共享存储都是有集群软件,比如sql集群,这样同时分享同一个券上的硬盘分区。
否则可以通过FC引到不同机器,但是读写会混乱,而且不安全。之前测试过。

但是冷转是可以的。比如在SAN的卷A定位到1机器上,挂载成/data分区,断开后可以通过管理器,SAN管理器,迁移到新的服务器2上。

如果要两台或者以上机器共享同一存储区域,只能用管理工具,通常来说,我们称之是群集软件,负责调试和负载冗余。

‘叁’ 创建新的池和存储空间点不了

Win8创建存储池的方法如下: 这个名为ldquo;存储空间rdquo;的新功能将利用一个物理存储设施组成数据池。这个数据池将使用SATA、USB和SAS硬盘创建,并且能够使用额外的硬件扩展。 这些称作ldquo;空间rdquo;的虚拟硬盘能够把4TB存储空间扩大到10TB。这些存储空间还提供一个弹性层以解决不同物理媒介的错误问题。 这个功能的另一个好处是,一旦物理硬盘发生故障,这个ldquo;存储池rdquo;能够自动生成受影响的地方的数据的副本。 首先,创建存储池之前要连接外接存储设备,否则创建不了。 每次创建的时候都会格式化存储设备,所以要备份数据。操作步骤: 一、打开控制面板,找到系统和安全。 二、系统和安全下找到存储空间。 三、点击存储空间后,找到ldquo;创建新的池和存储空间rdquo;并点击。 四、点击ldquo;创建池rdquo;后,会看到移动的存储设备。 五、此时,会出现配置界面。 六、选择简单(无复原),配置大小。 七、创建完成。

‘肆’ asp.net 怎样调试 sqlserver 数据库的存储过程

1.在wep.config中找到对应的数据连接字符串,增加一个选项Polling=false,即关闭连接池,(调试完成后记得将该选项删除)
2.然后在vs环境下的服务器视图,打开sqlserver视图,添加“sqlserver服务器"(如果没有的话),然后右键数据库服务器,允许"允许程序调试"
3.最后在vs里打开数据库里的存储过程,设置断点,然后f5使用的此存储过程的asp.net项目。
这样当使用该存储过程时,就能像普通的代码的调试的一样进行了,最后完成后将Polling=false关闭

‘伍’ 大佬们 为什么win10恢复系统后只剩下C盘无法创建存储池

创建存储空间的具体步骤如下:
1、右击Windows 10开始菜单,选择“控制面板”命令。以“小图标”方式查看控制面板选项,在“所有控制面板项”列表中选择“存储空间”选项。
2、进入“存储空间”创建窗口。
3、在“存储空间”创建窗口中,点击“创建新的池和存储空间”。
小提示:如果没有看到任务链接,请单击“更改设置”进行设置。
4、选择要用来创建存储池的驱动器,然后点击“创建池”。指定驱动器名称和驱动器号,然后选择一种布局,指定存储空间大小,然后单击“创建存储空间”。
该方法是通过将内部硬盘与外界存储设备相互连接,形成一个存储空间,一旦硬盘数据遭到破坏或是丢失就可以自动备份到其他空间上。

‘陆’ 服务器操作系统每次安装都要做RAID吗

是的,要做RAID,具体方法如下:

1、第一步,启动后,MNAS将报警并登录到后台管理系统,见下图,转到下面的步骤。

‘柒’ Win10硬盘设置保全数据方法

我们平时使用的Windows系统一般至少有一块硬盘,有时还可能另外挂接一些硬盘(内置的或移动的),在使用过程中,难免会遇到一些逻辑的或物理的错误。许多情况下,除删除文件外,发生错误的文件多数难以修复,尤其是当硬盘发生物理磁道错误甚至整个硬盘遭到物理损坏时,对数据的打击是毁灭性的。这时,无论电脑中挂接了几块硬盘,只要存储数据的某块硬盘发生错误,如果用户对文件没有进行备份,那么文件丢失的可能性极大。
如果我们将系统所用的硬盘和手头上的所有硬盘或移动硬盘,在Windows
8.1或Windows
10环境下联合组成“存储空间”,让其为数据保驾护,这样,一旦硬盘发生故障,哪怕是物理故障,数据也有恢复的希望。甚至在多块硬盘组成的存储池中,其中的两块硬盘出现故障,存储池会通过第三个设备自动生成恢复副本,确保用户数据的安全。
Win10硬盘设置保全数据方法让各种存储器联合“作战”完成存储任务,可以保证数据的安全或为使用提供方便。创建存储空间的具体步骤如下:
第一步:右击Windows
10开始菜单,选择“控制面板”命令。
第二步:以“小图标”方式查看控制面板选项,在“所有控制面板项”列表中选择“存储空间”选项,进入“存储空间”创建窗口。
第三步:在“存储空间”创建窗口中,点击“创建新的池和存储空间”。
小提示:如果没有看到任务链接,请单击“更改设置”进行设置。
第四步:选择要用来创建存储池的驱动器,然后点击“创建池”。指定驱动器名称和驱动器号,然后选择一种布局(三种布局的具体含义见“小知识”)。指定存储空间大小,然后单击“创建存储空间”。
特别提示:创建存储池之前首先要连接外接存储设备,否则无法创建。每次创建的时候都会格式化驱动器,所以如果接入的驱动器中有数据,一定要先备份数据。

注:更多精彩教程请关注三联电脑教程栏目,三联电脑办公群:189034526欢迎你的加入

‘捌’ Windows 8如何设置存储空间

“存储空间”的新功能将利用一个物理存储设施组成数据池。这个数据池将使用 SATA、USB 和 SAS 硬盘创建,并且能够使用额外的硬件扩展。 这些称作“空间”的虚拟硬盘能够把 4TB 存储空间扩大到 10TB 。这些存储空间还提供一个弹性层以解决不同物理媒介的错误问题。微软在官方声明中称,用户只需较少的设置就可以根据需要增加存储池中的容量。
随着用户复制更多的文件和接近存储池中的可用物理容客的极限,这个“存储空间”可以增加。微软还解释了增加新硬盘所需要的步骤。一旦用户成功地创建存储空间,它就能够像操作人员正常使用硬盘一样使用。这个功能的另一个好处是,一旦物理硬盘发生故障,这个“存储池”能够自动生成受影响的地方的数据的副本。
操作步骤:1、打开计算机,计算机——打开控制面板;
2、查看方式设置成“大图标”;
3、Create a new pool and storage space,创建存储池;
4、选择移动硬盘,Create pool,创建存储池,注意如果移动硬盘上有重要数据需要自己备份出来,不然创建后就没有了。
5、创建过程
6、创建存储空间,选择弹性机制和其他选项,作为创建空间的一部分,用户可以分配一个盘符和采取格式化;
6.1第一种弹性机制:简单的布局存储一个副本的数据,并不能保护你从驱动器故障,这种弹性类型需要至少一个驱动器;
6.2第二种弹性机制:双向镜象布局存储复制的数据,保护你从一个驱动器的失败,这种弹性型至少需要两个驱动器;
6.3第三种弹性机制:三次镜象布局存储复制的数据,这个系统可以容忍两个物理磁盘发生故障,这种弹性类型需要至少三个驱动器;
6.4最后一种为额外的校验空间,单击“创建一个存储空间”,然后在布局选项中选择Parity(奇偶校验位):奇偶校验存储你的数据布局以及奇偶校验,允许一个物理磁盘发生故障.这种布局需要至少三个驱动器;
以创建第一种为例:
7、创建成功界面:
创建前“计算机”和“磁盘管理”磁盘界面的状态:
创建后“计算机”和“磁盘管理”磁盘界面的状态:
可以看出我们的硬盘空间少了一半,原因是一半作为了“布局存储一个副本的数据”使用了。
8、删除方法:进入存储空间后,点击更改设置;
先删除存储空间
再删除存储池删除完成。

‘玖’ 告诉你Win8系统创建存储空间的办法

有朋友说WIN8经常玩游戏时提示系统内存不够大的情况,很多用户希望通过创建更大的存储空间的方法来解决这个问题。那么win8系统该如何创建存储空间,下面请跟我一起看看创建的方法吧!
1、打开控制面板,点击存储空间
2、点击”创建新的池和存储空间”
3、如果电脑此时只有win8系统所在的一块硬盘,下一步不会识别到任何信息,如果连接上更多的硬盘或者USB接口的U盘/移动硬盘,这里就可以识别到。勾选想要加入存储池的硬盘,然后点击右下角的”创建池”。
4、上一步是将用于备份的容量加到一个大的”池”中,如果想发挥备份的功能,还需要将“池”中的容量继续划分成一个或者若干个”存储空间”。这一步就是建立不同复原类型的存储空间。默认创建的是双向镜像,另外还有简单/三向镜像/奇偶校验几项类型可以选择。
注意:每种类型对于硬盘数量和所占用的大小都是有要求的。如果当前加入”存储池”中的硬盘数量达不到复原类型的最低要求,是没法完成创建的。(如图所示,当只有一块硬盘加入”存储池”时,双向/三向/奇偶校验都没法创建,只有简单可以创建)
这样通过扩大存储空间,玩大型游戏是不是觉得更加顺畅了。以上方法希望可以帮到大家!

‘拾’ 有没有详细介绍文件系统的书籍

其实你想知道什么想弄明白什么可以直接在网上搜下资料很全想要专业性的书籍大概免费的很少比如你想了解ZFS文件系统
查得(你还可以继续深入的去查……不好意思,或者我说的与你的意思拧了,^_^建议而已):ZFS文件系统的英文名称为Zettabyte File System,也叫动态文件系统(Dynamic File System),是第一个128位文件系统。
ZFS是基于存储池的,与典型的映射物理存储设备的传统文件系统不同,ZFS所有在存储池中的文件系统都可以使用存储池的资源。
什么是ZFS
ZFS 文件系统是一个革命性的全新的文件系统,它从根本上改变了文件系统的管理方式,这个文件系统的特色和其带来的好处至今没有其他文件系统可以与之媲美,ZFS 被设计成强大的、可升级并易于管理的。
ZFS 用“存储池”的概念来管理物理存储空间。过去,文件系统都是构建在物理设备之上的。为了管理这些物理设备,并为数据提供冗余,“卷管理”的概念提供了一个单设备的映像。但是这种设计增加了复杂性,同时根本没法使文件系统向更高层次发展,因为文件系统不能跨越数据的物理位置。
ZFS 完全抛弃了“卷管理”,不再创建虚拟的卷,而是把所有设备集中到一个存储池中来进行管理!“存储池”描述了存储的物理特征(设备的布局,数据的冗余等等),并扮演一个能够创建文件系统的专门存储空间。从此,文件系统不再局限于单独的物理设备,而且文件系统还允许物理设备把他们自带的那些文件系统共享到这个“池”中。你也不再需要预先规划好文件系统的大小,因为文件系统可以在“池”的空间内自动的增大。当增加新的存贮介质时,所有“池”中的所有文件系统能立即使用新增的空间,而不需要而外的操作。在很多情况下,存储池扮演了一个虚拟内存。
创建一个池的例子
# zpool create tank mirror c1t0d0 c1t1d0
这是一个被镜像了的池,名叫“tank”。如果命令中的设备包含有其他的文件系统或者以别的形式被使用,那么命令不能执行。
要查看池是否成功创建,用 zpool list 命令,例如:
# zpool list
NAME SIZE USED AVAIL CAP HEALTH ALTROOT
tank 80G 137K 80G 0% ONLINE -
ZFS 文件系统的层次
不管层次如何,根总是池的名字。
1、为每个用户及项目创建一个文件系统是个不错的办法!
2、ZFS可以为文件系统分组,属于同一组的文件系统具有相似的性质,这有点像用户组的概念!相似的文件系统能够使用一个共同的名字。
3、大多数文件系统的特性都被用简单的方式进行控制,这些特征控制了各种行为,包括文件系统被mount在哪里,怎么被共享,是否被压缩,是否有限额
创建一个文件系统
# zfs create tank/home
下一步,就可以创建各个文件系统,把它们都归组到 home 这个文件系统中。
同时可以设置home的特性,让组内的其他文件系统继承的它的这些特性。
当一个文件系统层次创建之后,可以为这个文件系统设置一些特性,这些特性将被所有的用户共享:
# zfs set mountpoint=/export/zfs tank/home
# zfs set sharenfs=on tank/home
# zfs set compression=on tank/home
# zfs get compression tank/home
NAME PROPERTY VALUE SOURCE
tank/home compression on local
4、创建单个的文件系统
注意:这些文件系统如果被创建好,他们的特性的改变将被限制在home级别,所有的特性能够在文件系统的使用过程中动态的改变。
# zfs create tank/home/bonwick
# zfs create tank/home/billm
bonwick、billm文件系统从父文件系统home中继承了特性,因此他们被自动的mount到/export/zfs/user 同时作为被共享的NFS。管理员根本不需要再手工去编辑 /etc/vfstab 或 /etc/dfs/dfstab 文件。
每个文件系统除了继承特性外,还可以有自己的特性,如果用户bonwick的磁盘空间要限制在10G。
# zfs set quota=10G tank/home/bonwick
5、用 zfs list 命令查看可获得的文件系统的信息,类似于过去的 df -k 命令了,呵呵 .
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
tank 92.0K 67.0G 9.5K /tank
tank/home 24.0K 67.0G 8K /export/zfs
tank/home/billm 8K 67.0G 8K /export/zfs/billm
tank/home/bonwick 8K 10.0G 8K /export/zfs/bonwick
ZFS和传统文件系统的区别
1、传统的文件系统被限制在单个磁盘设备之内,它们的尺寸是不能超越单个磁盘设备。
2、过去的文件系统是被影射到一个物理存储单元,如:分区;所有的ZFS文件系统共享池内的可获得的存储空间。
3、ZFS 文件系统不需要通过编辑/etc/vfstab 文件来维护。
ZFS已经抛弃了卷管理,逻辑卷可以不再使用。因为ZFS在使用和管理raw设备能够有更好的表现。
Components of a ZFS Storage Pool
组成ZFS存储池的元件有:磁盘、文件、虚拟设备,其中磁盘可以是整个硬盘(c1t0d0),也可以是单个slice(c0t0d0s7)。推荐使用整个硬盘,这样可以省去分区操作(format)。
RAID-Z 跟 RAID-5的区别
传统的raid-5都存在着“写漏洞”,就是说如果raid-5的stripe在正写数据时,如果这时候电源中断,那么奇偶校验数据将跟该部分数据不同步,因此前边的写无效;RAID-Z用了“variable-width RAID stripes”技术,因此所有的写都是full-stripe writes。之所以能实现这种技术,就是因为ZFS集成了文件系统和设备管理,使得文件系统的元数据有足够的信息来控制“variable-width RAID stripes”
理论上说,创建RAID-Z需要至少三块磁盘,这跟raid-5差不多。例如:
raidz c1t0d0 c2t0d0 c3t0d0
还可以更加复杂一点,例如:
raidz c1t0d0 c2t0d0 c3t0d0 c4t0d0 c5t0d0 c6t0d0 c7t0d0 raidz c8t0d0 c9t0d0 c10t0d0 c11t0d0 c12t0d0 c13t0d0 c14t0d0
上边这个例子创建了14个磁盘的RAID-Z , 这14个盘被分成了两组,但下边这句话有点不大明白:
RAID-Z configurations with single-digit groupings of disks should perform better.
RAID-Z具有自动修复数据的功能
当有损坏的数据块被检测到,ZFS不但能从备份中找到相同的正确的数据,而且还能自动的用正确数据修复损坏的数据。
创建ZFS存储池
1、创建一个基本的存储池,方法很简单:
# zpool create tank c1t0d0 c1t1d0
这时可以在 /dev/dsk 目录下看到一个大的slice,数据动态的stripe跨过所有磁盘!
2、创建一个镜像的存储池
也是很简单,只要在上边命令基础上增加“mirror”关键字就可以了,下边是创建一个两路(two-way)镜像的例子:
# zpool create tank mirror c1d0 c2d0 mirror c3d0 c4d0
3、创建RAID-Z存储池
使用“raidz”关键字就可以了,例如:
# zpool create tank raidz c1t0d0 c2t0d0 c3t0d0 c4t0d0 /dev/dsk/c5t0d0
这里/dev/dsk/c5t0d0其实跟用c5t0d0是一样的,由此可以看出,在创建ZFS的时候,磁盘完全可以用物理设备名就可以,不需要指出全路径。
这句话不大明白:However, the disks must be preformatted to have an appropriately sized slice zero.
4、检测正在使用的设备
在格式化设备之前,ZFS首先决定磁盘是否已经在用或者是否装有操作系统,如果磁盘在用了,那么将会出现下边的错误提示:
# zpool create tank c1t0d0 c1t1d0
invalid vdev specification
use ’-f’ to override the following errors:
/dev/dsk/c1t0d0s0 is currentlymounted on /
/dev/dsk/c1t0d0s1 is currentlymounted on swap
/dev/dsk/c1t1d0s0 is part of active ZFS pool ’zeepool’
Please see zpool(1M)
有些错误可以用 -f 选项来强制覆盖,但是大多错误是不能的。下边给出不能用-f覆盖的错误情况,这时只能手工纠正错误:
Mounted file system The disk or one of its slices contains a file system that is currently mounted. To correct this error, use the umount command.
File system in /etc/vfstab The disk contains a file system that is listed in the /etc/vfstab file,but the file system is not currently mounted.To correct this error,remove or comment out the line in the /etc/vfstab file.
Dedicated mp device The disk is in use as the dedicated mp device for the system. To correct this error, use the mpadm command.
Part of a ZFS pool The disk or file is part of an active ZFS storage pool. To correct this error, use the zpool command to destroy the pool.
5、创建存储池时默认的mount点
在创建存储池时,如果mount点所在目录不存在,系统会自动创建,如果存在,根数据集(root dataset)会自动mount到这个目录上。
To create a pool with a different default mount point, use the -m option of the zpool create command:
# zpool create home c1t0d0
default mountpoint ’/home’ exists and is not empty
use ’-m’ option to specifya different default
# zpool create -m /export/zfs home c1t0d0
This command creates a new pool home and the home dataset with a mount point of /export/zfs.
6、删除存储池
Pools are destroyed by using the zpool destroy command. This command destroys the pool even if it contains mounted datasets.
# zpool destroy tank
用ZFS存储池管理设备
1、增加设备到存储池
用户可以通过增加一个新的顶级虚拟设备的方法动态给存储池增加空间,这个空间立即对空间中的所有数据集(dataset)有效。要增加一个虚拟设备到池中,用“zpool add”命令,例如:
# zpool add zeepool mirror c2t1d0 c2t2d0
该命令也可以用 -n选项进行预览,例如:
# zpool add -n zeepool mirror c3t1d0 c3t2d0
would update ’zeepool’ to the following configuration:
zeepool
mirror
c1t0d0
c1t1d0
mirror
c2t1d0
c2t2d0
mirror
c3t1d0
c3t2d0
2、增加和减少一路镜像
用“zpool attach”命令增加一路镜像,例如:
# zpool attach zeepool c1t1d0 c2t1d0
在这个例子中,假设 zeepool 是第一点里的那个zeepool(已经是两路镜像),那么这个命令将把zeepool升级成三路镜像。
用“zpool detach”命令来分离一路镜像
# zpool detach zeepool c2t1d0
如果池中不存在镜像,这个才操作将被拒绝。错误提示如下边这个例子:
# zpool detach newpool c1t2d0 cannot detach c1t2d0: onlyapplicable to mirror and replacing vdevs
3、管理设备的“上线”和“下线”
ZFS允许个别的设备处于offline或者online状态。当硬件不可靠或者还没有完全不能用的时候,ZFS会继续向设备读写数据,但不过是临时这么做,因为设备还能将就使用。一旦设备不能使用,就要指示ZFS忽略该设备,并让这个坏掉的设备下线。ZFS不会向offline的设备发送任何请求。
注意:如果只是为了更换设备(被换设备并没有出问题),不需要把他们offline。如果offline设备,然后换了一个新设备上去,再把新设备online,这么做会出错!
用“zpool offline”命令让设备下线。例如:
# zpool offline tank c1t0d0
bringing device c1t0d0 offline
下边这句话没怎么看懂:
You cannot take a pool offline to the point where it becomes faulted. For example, you cannot take offline two devices out of a RAID-Z configuration, nor can you take offline a top-level virtual device.
# zpool offline tank c1t0d0
cannot offline c1t0d0: no valid replicas
默认情况下,offline设备将永久保持offline状态,直到系统重新启动。
要临时offline一个设备,用-t选项,例如:
# zpool offline -t tank c1t0d0
bringing device ’c1t0d0’ offline
用“zpool onine”命令使设备上线
# zpool online tank c1t0d0
bringing device c1t0d0 online
注意:如果只是为了更换设备(被换设备并没有出问题),不需要把他们offline。如果offline设备,然后换了一个新设备上去,再把新设备online,这么做会出错!在这个问题上文档是这么说的:(但愿我没理解错)
Note that you cannot use device onlining to replace a disk. If you offline a
device, replace the drive, and try to bring it online, it remains in the faulted state.
4、清扫存储池设备
如果设备因为出现错误,被offline了,可以用“zpool clear”命令清扫错误。
如果没有特别指定,zpool clear命令清扫池里所有设备。例如:
# zpool clear tank
如果要清扫指定设备,例如:
# zpool clear tank c1t0d0
5、替换存储池里的设备
用“zpool replace”命令替换池中设备,例如:
# zpool replace tank c1t1d0 c1t2d0
c1t1d0 被 c1t2d0 替换
注意:如果是mirror或者RAID-Z,替换设备的容量必须大于或等于所有设备最小容量!
查询ZFS存储池的状态
1、ZFS存储池的基本信息
用“zpool list”命令查看存储池的基本信息,例如:
# zpool list
NAME SIZE USED AVAIL CAP HEALTH ALTROOT
tank 80.0G 22.3G 47.7G 28% ONLINE -
dozer 1.2T 384G 816G 32% ONLINE -
NAME: The name of the pool.
SIZE: The total size of the pool, equal to the sum of the size of all top-level virtual
devices.
USED: The amount of space allocated by all datasets and internal metadata. Note that
this amount is different from the amount of space as reported at the file system level.
AVAILABLE: The amount of unallocated space in the pool.
CAPACITY (CAP): The amount of space used, expressed as a percentage of total space.
HEALTH: The current health status of the pool.
ALTROOT: The alternate root of the pool, if any.
可以通过指定名字来查看某一个池的状态,例如:
# zpool list tank
NAME SIZE USED AVAIL CAP HEALTH ALTROOT
tank 80.0G 22.3G 47.7G 28% ONLINE -