ZFS文件系统Word下载.docx
- 文档编号:22578544
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:20
- 大小:28.77KB
ZFS文件系统Word下载.docx
《ZFS文件系统Word下载.docx》由会员分享,可在线阅读,更多相关《ZFS文件系统Word下载.docx(20页珍藏版)》请在冰豆网上搜索。
过去,文件系统都是构建在物理设备之上的。
为了管理这些物理设备,并为数据提供冗余,“卷管理”的概念提供了一个单设备的映像。
但是这种设计增加了复杂性,同时根本没法使文件系统向更高层次发展,因为文件系统不能跨越数据的物理位置。
ZFS完全抛弃了“卷管理”,不再创建虚拟的卷,而是把所有设备集中到一个存储池中来进行管理!
“存储池”描述了存储的物理特征(设备的布局,数据的冗余等等),并扮演一个能够创建文件系统的专门存储空间。
从此,文件系统不再局限于单独的物理设备,而且文件系统还允许物理设备把他们自带的那些文件系统共享到这个“池”中。
你也不再需要预先规划好文件系统的大小,因为文件系统可以在“池”的空间内自动的增大。
当增加新的存贮介质时,所有“池”中的所有文件系统能立即使用新增的空间,而不需要额外的操作。
在很多情况下,存储池扮演了一个虚拟内存。
ZFS使用一种写时拷贝事务模型技术。
所有文件系统中的块指针都包括256位的能在读时被重新校验的关于目标块的校验和。
含有活动数据的块从来不被覆盖;
而是分配一个新块,并把修改过的数据写在新块上。
所有与该块相关的元数据块都被重新读、分配和重写。
为了减少该过程的开销,多次读写更新被归纳为一个事件组,并且在必要的时候使用日志来同步写操作。
[1]
利用写时拷贝使ZFS的快照和事物功能的实现变得更简单和自然,快照功能更灵活。
缺点是,COW使碎片化问题更加严重,对于顺序写生成的大文件,如果以后随机的对其中的一部分进行了更改,那么这个文件在硬盘上的物理地址就变得不再连续,未来的顺序读会变得性能比较差。
创建一个池的例子
?
1
#zpoolcreatetankmirrorc1t0d0c1t1d0
这是一个被镜像了的池,名叫“tank”。
如果命令中的设备包含有其他的文件系统或者以别的形式被使用,那么命令不能执行。
要查看池是否成功创建,用zpoollist命令,例如:
2
3
#zpoollist
NAMESIZEUSEDAVAILCAPHEALTHALTROOT
tank80G137K80G0%ONLINE-
2系统层次编辑
不管层次如何,根总是池的名字。
⒈为每个用户及项目创建一个文件系统是个不错的办法!
⒉ZFS可以为文件系统分组,属于同一组的文件系统具有相似的性质,这有点像用户组的概念!
相似的文件系统能够使用一个共同的名字。
⒊大多数文件系统的特性都被用简单的方式进行控制,这些特征控制了各种行为,包括文件系统被mount在哪里,怎么被共享,是否被压缩,是否有限额
创建一个文件系统
#zfscreatetank/home
下一步,就可以创建各个文件系统,把它们都归组到home这个文件系统中。
同时可以设置home的特性,让组内的其他文件系统继承的它的这些特性。
当一个文件系统层次创建之后,可以为这个文件系统设置一些特性,这些特性将被所有的用户共享:
4
5
6
#zfssetmountpoint=/export/zfstank/home
#zfssetsharenfs=ontank/home
#zfssetcompression=ontank/home
#zfsgetcompressiontank/home
NAMEPROPERTYVALUESOURCE
tank/homecompressiononlocal
⒋创建单个的文件系统
注意:
这些文件系统如果被创建好,他们的特性的改变将被限制在home级别,所有的特性能够在文件系统的使用过程中动态的改变。
#zfscreatetank/home/bonwick
#zfscreatetank/home/billm
bonwick、billm文件系统从父文件系统home中继承了特性,因此他们被自动的mount到/export/zfs/user同时作为被共享的NFS。
管理员根本不需要再手工去编辑/etc/vfstab或/etc/dfs/dfstab文件。
每个文件系统除了继承特性外,还可以有自己的特性,如果用户bonwick的磁盘空间要限制在10G。
#zfssetquota=10Gtank/home/bonwick
⒌用zfslist命令查看可获得的文件系统的信息,类似于过去的df-k命令了,呵呵.
#zfslist
NAMEUSEDAVAILREFERMOUNTPOINT
tank92.0K67.0G9.5K/tank
tank/home24.0K67.0G8K/export/zfs
tank/home/billm8K67.0G8K/export/zfs/billm
tank/home/bonwick8K10.0G8K/export/zfs/bonwick
3相关区别编辑
传统的文件系统被限制在单个磁盘设备之内,它们的尺寸是不能超越单个磁盘设备。
传统文件系统需要驻留于单独设备或者需要一个卷管理系统去使用一个以上的设备,而ZFS建立在虚拟的,被称为“zpools”的存储池之上(存储池最早在AdvFS实现,并且加到后来的Btrfs)。
过去的文件系统是被影射到一个物理存储单元,如:
分区;
所有的ZFS文件系统共享池内的可获得的存储空间。
ZFS文件系统不需要通过编辑/etc/vfstab文件来维护。
ZFS已经抛弃了卷管理,逻辑卷可以不再使用。
因为ZFS在使用和管理raw设备能够有更好的表现。
ComponentsofaZFSStoragePool
组成ZFS存储池的元件有:
磁盘、文件、虚拟设备,其中磁盘可以是整个硬盘(c1t0d0),也可以是单个slice(c0t0d0s7)。
推荐使用整个硬盘,这样可以省去分区操作(format)。
RAID-Z跟RAID-5的区别
传统的raid-5都存在着“写漏洞”,就是说如果raid-5的stripe在正写数据时,如果这时候电源中断,那么奇偶校验数据将跟该部分数据不同步,因此前边的写无效;
RAID-Z用了“variable-widthRAIDstripes”技术,因此所有的写都是full-stripewrites。
之所以能实现这种技术,就是因为ZFS集成了文件系统和设备管理,使得文件系统的元数据有足够的信息来控制“variable-widthRAIDstripes”
理论上说,创建RAID-Z需要至少三块磁盘,这跟raid-5差不多。
例如:
raidzc1t0d0c2t0d0c3t0d0
还可以更加复杂一点,例如:
raidzc1t0d0c2t0d0c3t0d0c4t0d0c5t0d0c6t0d0c7t0d0raidzc8t0d0c9t0d0c10t0d0c11t0d0c12t0d0c13t0d0c14t0d0
上边这个例子创建了14个磁盘的RAID-Z,这14个盘被分成了两组,但下边这句话有点不大明白:
RAID-Zconfigurationswithsingle-digitgroupingsofdisksshouldperformbetter.
(我的理解是:
相对于大于10个硬盘组成的RAID-Z,少于10个(single-digit即1位数)硬盘组成的RAID-Z的性能会更好)奇数个硬盘(>
3)组成的RAID-Z在理论上来说会表现的更好(实际测试中也是,同RAID-5)
RAID-Z具有自动修复数据的功能
当有损坏的数据块被检测到,ZFS不但能从备份中找到相同的正确的数据,而且还能自动的用正确数据修复损坏的数据。
4创建过程编辑
⒈创建一个基本的存储池,方法很简单:
#zpoolcreatetankc1t0d0c1t1d0
这时可以在/dev/dsk目录下看到一个大的slice,数据动态的stripe跨过所有磁盘!
⒉创建一个镜像的存储池
也是很简单,只要在上边命令基础上增加“mirror”关键字就可以了,下边是创建一个两路(two-way)镜像的例子:
#zpoolcreatetankmirrorc1d0c2d0mirrorc3d0c4d0
⒊创建RAID-Z存储池
使用“raidz”关键字就可以了,例如:
#zpoolcreatetankraidzc1t0d0c2t0d0c3t0d0c4t0d0/dev/dsk/c5t0d0
这里/dev/dsk/c5t0d0其实跟用c5t0d0是一样的,由此可以看出,在创建ZFS的时候,磁盘完全可以用物理设备名就可以,不需要指出全路径。
⒋检测正在使用的设备
在格式化设备之前,ZFS首先决定磁盘是否已经在用或者是否装有操作系统,如果磁盘在用了,那么将会出现下边的错误提示:
7
#zpoolcreatetankc1t0d0c1t1d0
invalidvdevspecification
use’-f’tooverridethefollowingerrors:
/dev/dsk/c1t0d0s0iscurrentlymountedon
dev/dsk/c1t0d0s1iscurrentlymountedonswap
/dev/dsk/c1t1d0s0ispartofactiveZFSpool’zeepool’
Pleaseseezpool(1M)
有些错误可以用-f选项来强制覆盖,但是大多错误是不能的。
下边给出不能用-f覆盖的错误情况,这时只能手工纠正错误:
MountedfilesystemThediskoroneofitsslicescontainsafilesystemthatiscurrentlymounted.Tocorrectthiserror,usetheumountcommand.
Filesystemin/etc/vfstabThediskcontainsafilesystemthatislistedinthe/etc/vfstabfile,butthefilesystemisnotcurrentlymounted.Tocorrectthiserror,removeorcommentoutthelineinthe/etc/vfstabfile.
DedicateddumpdeviceThediskisinuseasthededicateddumpdeviceforthesystem.Tocorrectthiserror,usethedumpadmcommand.
PartofaZFSpoolThediskorfileispartofanactiveZFSstoragepool.Tocorrectthiserror,usethezpoolcommandtodestroythepool.
⒌创建存储池时默认的mount点
在创建存储池时,如果mount点所在目录不存在,系统会自动创建,如果存在,根数据集(rootdataset)会自动mount到这个目录上。
Tocreateapoolwithadifferentdefaultmountpoint,usethe-moptionofthezpoolcreatecommand:
#zpoolcreatehomec1t0d0
defaultmountpoint’/home’existsandisnotempty
use’-m’optiontospecifyadifferentdefault
#zpoolcreate-m/export/zfshomec1t0d0
Thiscommandcreatesanewpoolhomeandthehomedatasetwithamountpointof/export/zfs.
⒍删除存储池
Poolsaredestroyedbyusingthezpooldestroycommand.Thiscommanddestroysthepoolevenifitcontainsmounteddatasets.
#zpooldestroytank
5存储池管理设备编辑
⒈增加设备到存储池
用户可以通过增加一个新的顶级虚拟设备的方法动态给存储池增加空间,这个空间立即对空间中的所有数据集(dataset)有效。
要增加一个虚拟设备到池中,用“zpooladd”命令,例如:
#zpooladdzeepoolmirrorc2t1d0c2t2d0
该命令也可以用-n选项进行预览,例如:
8
9
10
11
12
#zpooladd-nzeepoolmirrorc3t1d0c3t2d0
wouldupdate’zeepool’tothefollowingconfiguration:
zeepool
mirror
c1t0d0
c1t1d0
c2t1d0
c2t2d0
c3t1d0
c3t2d0
⒉增加和减少一路镜像
用“zpoolattach”命令增加一路镜像,例如:
#zpoolattachzeepoolc1t1d0c2t1d0
在这个例子中,假设zeepool是第一点里的那个zeepool(已经是两路镜像),那么这个命令将把zeepool升级成三路镜像。
用“zpooldetach”命令来分离一路镜像
#zpooldetachzeepoolc2t1d0
如果池中不存在镜像,这个才操作将被拒绝。
错误提示如下边这个例子:
#zpooldetachnewpoolc1t2d0cannotdetachc1t2d0:
onlyapplicabletomirrorandreplacingvdevs
⒊管理设备的“上线”和“下线”
ZFS允许个别的设备处于offline或者online状态。
当硬件不可靠或者还没有完全不能用的时候,ZFS会继续向设备读写数据,但不过是临时这么做,因为设备还能将就使用。
一旦设备不能使用,就要指示ZFS忽略该设备,并让这个坏掉的设备下线。
ZFS不会向offline的设备发送任何请求。
如果只是为了更换设备(被换设备并没有出问题),不需要把他们offline。
如果offline设备,然后换了一个新设备上去,再把新设备online,这么做会出错!
用“zpooloffline”命令让设备下线。
#zpoolofflinetankc1t0d0
bringingdevicec1t0d0offline
下边这句话没怎么看懂:
Youcannottakeapoolofflinetothepointwhereitbecomesfaulted.Forexample,youcannottakeofflinetwodevicesoutofaRAID-Zconfiguration,norcanyoutakeofflineatop-levelvirtualdevice.
cannotofflinec1t0d0:
novalidreplicas
默认情况下,offline设备将永久保持offline状态,直到系统重新启动。
要临时offline一个设备,用-t选项,例如:
#zpooloffline-ttankc1t0d0
bringingdevice’c1t0d0’offline
用“zpoolonine”命令使设备上线
#zpoolonlinetankc1t0d0
bringingdevicec1t0d0online
在这个问题上文档是这么说的:
(但愿我没理解错)
Notethatyoucannotusedeviceonliningtoreplaceadisk.Ifyouofflinea
device,replacethedrive,andtrytobringitonline,itremainsinthefaultedstate.
⒋清扫存储池设备
如果设备因为出现错误,被offline了,可以用“zpoolclear”命令清扫错误。
如果没有特别指定,zpoolclear命令清扫池里所有设备。
#zpoolcleartank
如果要清扫指定设备,例如:
#zpoolcleartankc1t0d0
⒌替换存储池里的设备
用“zpoolreplace”命令替换池中设备,例如:
#zpoolreplacetankc1t1d0c1t2d0
c1t1d0被c1t2d0替换
如果是mirror或者RAID-Z,替换设备的容量必须大于或等于所有设备最小容量!
6查询存储池状态编辑
⒈ZFS存储池的基本信息
用“zpoollist”命令查看存储池的基本信息,例如:
13
#zpoollist
NAMESIZEUSEDAVAILCAPHEALTHALTROOT
tank80.0G22.3G47.7G28%ONLINE-
dozer1.2T384G816G32%ONLINE-
NAME:
Thenameofthepool.
SIZE:
Thetotalsizeofthepool,equaltothesumofthesizeofalltop-levelvirtual
devices.
USED:
Theamountofspaceallocatedbyalldatasetsandinternalmetadata.Notethat
thisamountisdifferentfromtheamountofspaceasreportedatthefilesystemlevel.
AVAILABLE:
Theamountofunallocatedspaceinthepool.
CAPACITY(CAP):
Theamountofspaceused,expressedasapercentageoftotalspace.
HEALTH:
Thecurrenthealthstatusofthepool.
ALTROOT:
Thealternaterootofthepool,ifany.
可以通过指定名字来查看某一个池的状态,例如:
#zpoollisttank
tank80.0G22.3G47.7G28%ONLINE-
如果要有选择看状态列表,可以用-o选项
#zpoollist-oname,size
NAMESIZE
tank80.0G
dozer1.2T
ScriptingZFSStoragePoolOutput
Thedefaultoutputforthezpoollistcommandisdesignedforreadability,andisnoteasytouseasartofashellscript.Toaidprogrammaticusesofthecommand,the-Hoptioncanbeusedtouppressthecolumnheadingsandseparatefieldsbytabs,ratherthanbyspaces.Forexample,torequestasimplelistofallpoolnamesonthesystem:
#zpoollist-Honame
tank
dozer
Hereisanotherexample:
#zpoollist-H-oname,size
dozer1.2T
⒉查看存储池的I/O状态
用“zpooliostat”命令查看存储池的I/
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ZFS 文件系统