免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4354 | 回复: 3
打印 上一主题 下一主题

ZFS系列 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-08-20 16:52 |只看该作者 |倒序浏览
管理和共享ZFS文件系统
管理ZFSmount点
默认的所有的ZFS文件系统的mount是通过SMF\'svc://system/filesystem/local服务来启动的。文件系统是mount在/path文件系统名路径上的。
你能够通过设置mount点的属性通过使用zfs set命令来指定mount点。ZFS文件系统自动创建mount点,如果需要自动mount文件系统使用命令zfs mount –a来引入,不需要你来编辑/etc/vfstab文件。(这点本人感觉有点象AIX上的感觉,直接建立/etc/filesystems)
,mount点的属性是继承的。比如:如果pool/home是mount点设置在/export/stuff上则pool/home/user继承/export/home/user为它mount点的属性。
Mount点的属性能够设置为none来防止文件系统重复mount.
如果需要,文件系统也可以直接通过mount接口来管理,通过zfs set命令来管理mount点。这样做可以防止ZFS文件系统自动mount和管理文件系统。这个接口包括mount和umount命令,同时要注意/etc/vfstab文件。
:当更改mount点管理策略时要注意下面的行为:
        自动mount点行为
        继承mount点的行为
自动mount点
        当改变到legacy或none ZFS自动mount文件系统
        如果ZFS是当前的文件系统但是它的状态是unmount的。如果mount点的属性改变以后,文件系统还是保持unmount的状态。
Mount点的属性并不是通过ZFS来管理legacy。下面的例子显示创建ZFS自动管理的mount点。

# zfs create pool/filesystem
# zfs get mountpoint pool/filesystem
NAME             PROPERTY      VALUE                      SOURCE
pool/filesystem  mountpoint    /pool/filesystem           default
# zfs get mounted pool/filesystem
NAME             PROPERTY      VALUE                      SOURCE
pool/filesystem  mounted       yes                        -
你也可以直接设置mount点的属性,看下面的例子。

# zfs set mountpoint=/mnt pool/filesystem
# zfs get mountpoint pool/filesystem
NAME             PROPERTY      VALUE                      SOURCE
pool/filesystem  mountpoint    /mnt                       local
# zfs get mounted pool/filesystem
NAME             PROPERTY      VALUE                      SOURCE
pool/filesystem  mounted       yes                        -
当mount点的属性改变的时候,文件系统是自动从老的mount点上umount的然后重新mount到新的mount点上。Mount点目录是需要创建的。如果ZFS并不能unmount文件系统在文件系统活动期间,这个错误是被报告的并且需要手工强制unmount。
Legacy Mount点
你能够管理ZFS文件系统通过legacy工具来设置mount点的属性的legacy。Legacy文件系统不许通过mount和umount命令和/etc/vfstab文件来管理。ZFS文件系统不能启动的时候自动mount legacy文件系统同时ZFS mount和umount命令并不能操作datasetl类型。下面的例子显示如何设置和管理ZFS dataset。

# zfs set mountpoint=legacy tank/home/eschrock
# mount -F zfs tank/home/eschrock /mnt
特殊情况下,如果你设置ZFS为/usr或者/var文件系统,你必须指示他们为legacy文件系统。附加的,你需要在/etc/vfstab文件中为自动mount他们创建条目。另外,当系统启动的时候在保持模式下属于system/filesystem/local服务。
在启动的时候自动mount legacy文件系统。你必须在/etc/vfstab文件中增加条目。下面的例子显示/etc/vfstab

#device         device        mount           FS      fsck    mount   mount
#to mount       to fsck       point           type    pass    at boot options
#

tank/home/eschrock -                /mnt                   zfs                -                yes                -        
e device to fsck 和fsck pass 条目是设置为 -. 这是因为 fsck命令并不能应用于ZFS 文件系统..
Mounting ZFS 文件系统
ZFS文件系统在创建时是自动mount的或者当系统启动的时候。使用zfs mount明明只有当改变mount选项或者直接mount和unmount文件系统的时候是必须的。
zfs mount命令没有参数的时候显示当前mount的文件系统。Legacy管理的mount点并不显示:

# zfs mount
tank                            /tank
tank/home                       /tank/home
tank/home/bonwick               /tank/home/bonwick
tank/ws                         /tank/ws
你能够使用-a选项来mount所有ZFS管理的文件系统。Legacy管理文件系统不能mount。

# zfs mount -a
默认的ZFS并不能允许mount在非空目录之上。如果强迫mount到非空目录之上,使用-O选项。

# zfs mount tank/home/lalt
cannot mount \'/export/home/lalt\': directory is not empty
use legacy mountpoint to allow this behavior, or use the -O flag
# zfs mount -O tank/home/lalt
legacy mount点必须是通过legacy工具进行管理的。当尝试使用ZFS工具会引起错误的。

# zfs mount pool/home/billm
cannot mount \'pool/home/billm\': legacy mountpoint
use mount(1M) to mount this filesystem
# mount -F zfs tank/home/billm
当文件系统是mount的。它使用一些基于属性的值结合dataset的mount选项。下面显示如下:
Property
Mount Options
devices
devices/nodevices
exec
exec/noexec
readonly
ro/rw
setuid
setuid/nosetuid
The mount option nosuid is an alias for nodevices,nosetuid.
临时Mount属性
I如果以上的选项通过zfs mount的-o选项被设置,结合这些属性的值是被临时使用的。这些选项的值被告知为临时通过zfs get命令可以看到,当文件系统umont后他们将恢复他们原来的值。如果属性值在dataset mount的时候被改变,则改变将会立即生效。
I下面的例子显示为tank/home/perrin文件系统设置临时的只读mount选项。

# zfs mount -o ro tank/home/perrin
下面的例子显示文件系统确认是unmount的。临时改变文件系统的属性在mount状态,你必须使用remount选项。

# zfs mount -o remount,noatime tank/home/perrin
# zfs get atime tank/home/perrin
NAME             PROPERTY      VALUE                      SOURCE
tank/home/perrin atime         off                        temporary
.
Unmounting ZFS 文件系统
你能够使用zfs unmount命令来umount文件系统。
下面的例子显示通过文件系统名umount文件系统。

# zfs unmount tank/home/tabriz
下面的例子显示通过mount点来umount文件系统。

# zfs unmount /export/home/tabriz
如果文件系统是活动的或者正忙则umount命令失败。你可以使用-f参数来强制umount文件系统。当强制umount文件系统需要注意的是文件系统的数据是活动正在使用的。

# zfs unmount tank/home/eschrock
cannot unmount \'/export/home/eschrock\': Device busy
# zfs unmount -f tank/home/eschrock
提供向后的能力,legacy umount命令能够够使用umount命令来umount ZFS文件系统。

# umount /export/home/bob

Sharing ZFS 文件系统
和mount点近似。ZFS能够自动共享文件系统通过使用sharefs属性。使用这种方法当你增加一个新的文件系统的时候并不需要修改/etc/dfs/dfstab文件。共享属性是用逗号分割选项的在share命令上。为别名指定的值是on在默认共享选项上为所有的用户指定为read/write权限。当指定值为off知识文件系统不通过ZFS文件系统管理同时通过传统的方式进行共享比如:/etc/dfs/dfstab文件。所有的这些文件系统的sharenfs在共享启动的时候是打开的。
控制Share Semantics
默认的所有文件系统是非共享的。共享新的文件系统通过zfs set设置。

# zfs set sharenfs=on tank/home/eschrock
属性是继承的,当文件系统自动共享创建则他们的继承属性是打开的。

# zfs set sharenfs=on tank/home
# zfs create tank/home/bricker
# zfs create tank/home/tabriz
# zfs set sharenfs=ro tank/home/tabriz
在tank/home/bricker和tank/home/tabriz初始共享为写是因为他们继承了sharenfs属性从tank/home。一旦属性被设置为ro 则(readonly), tank/home/tabriz共享属性为只读则忽略sharenfs来自tank/home的属性。
Unsharing ZFS文件系统
许多的文件系统在启动的时候自动share和unshare。有时候创建和删除文件系统需要直接unshare。

# zfs unshare tank/home/tabriz
命令unshares tank/home/tabriz文件系统。需要unshare所有的ZFS文件系统,需要使用-a选项。

# zfs unshare -a
Sharing ZFS 文件系统
很多的时候需要ZFS在启动和创建share的时候需要自动的行为,足够的正常操作。有些原因,在unshare文件系统的时候,你需要再一次share文件系统功过zfs share命令。

# zfs share tank/home/tabriz
你也能够share所有的ZFS文件系统功过-a选项。

# zfs share -a
Legacy Share 行为
如果sharenfs属性是关闭的。则ZFS不能够尝试共享或者非共享文件系统。通过传统的方法也能够进行管理,比如:/etc/dfs/dfstab文件。
.不象传统的mount命令,传统的share和unshare命令能够作用于ZFS文件系统。一些情况下,你能够够手工share文件系统通过设置sharenfs属性的不同选项。这种管理模式是不推荐的。选择任意一个NFS share来完成对ZFS的管理或者通过/etc/dfs/dfstab文件来管理。ZFS管理模式被设计为更简单和更少的工作量比起传统的模式。

论坛徽章:
0
2 [报告]
发表于 2007-08-20 16:53 |只看该作者
创建和删除ZFS文件系统
ZFS文件系统能够通过zfs create和zfs destory命令进行创建和删除。
创建ZFS文件系统
ZFS文件系统可以通过命令zfs create命令进行创建。Create子命令可以使用担搁参数创建文件系统名称。文件系统名称是从
pool-name/[filesystem-name/]filesystem-name
一个新的文件系统被创建的时候在他的路径标示层次上用存储池的名字和文件系统开始的名字所有的文件系统的名字必须是在存储池中存在的。文件系统的名字必须符合ZFS文件名组成的要求。
(任何一个ZFS文件系统名字的组成必须符合下面的规则:
不允许为空EEmpty components are not allowed.
任何一个名字只能包含文字和数字以及下面4个特殊字符:
        Underscore (_)
        Hyphen (-)
        Colon (
        Period (.)
存储池的名字必须是用小写字母开始。除了开始开始序列c[0-9] 是不允许的。同时,存储池的名字象mirror, raidz, 和 spare是不允许的,因为这些是保留的。
Dataset 的名字是文字和数字)
下面的例子显示文件系统bonwick被创建到tank/home文件系统上。

# zfs create tank/home/bonwick
ZFS如果创建成功它会自动mount到新创建的文件系统上。默认的文件是mount为/dataset,为create命令提供文件系统名提供使用路径。例如:新创建的bonwick文件系统是/tank/home/bonwick更多的关于自动mount点的信息参考Managing ZFS Mount Points.
更多的关于zfs create的命令请参考zfs。
删除ZFS文件系统
.删除ZFS文件系统使用zfs destroy命令。删除文件系统是自动umount和unshared。关于更多的automanaged mounts和 automanaged shares,请考Automatic Mount Points
.看下面的例子:

# zfs destroy tank/home/tabriz
注意:使用destroy命令没有确认提示出现。
如果文件系统在删除的时候是忙的和不能unmount则zfs destroy命令失败。删除活动的文件系统,使用-f参数。使用这个参数要注意,它能够umount unshare和删除活动的文件系统,引起一些非预见的应用活动。

# zfs destroy tank/home/ahrens
cannot unmount \'tank/home/ahrens\': Device busy

# zfs destroy -f tank/home/ahrens
如果文件系统是子系统在使用zfs destroy时也会失败。要递归删除文件系统和所有的相关信息。使用-r参数递归删除同时也要注意同时会删除snapshots

# zfs destroy tank/ws
cannot destroy \'tank/ws\': filesystem has children
use \'-r\' to destroy the following datasets:
tank/ws/billm
tank/ws/bonwick
tank/ws/maybee

# zfs destroy -r tank/ws
如果文件系统间接的删除了一些信息。则递归删除也会出现失败。则需要强迫删除所有的信息,包括外部层次上的客龙文件系统。则需要使用-R参数。

# zfs destroy -r tank/home/schrock
cannot destroy \'tank/home/schrock\': filesystem has dependent clones
use \'-R\' to destroy the following datasets:
tank/clones/schrock-clone

# zfs destroy -R tank/home/schrock

注意在使用-f –r –R参数时没有出现确认提示消息。
为ZFS文件系统更名
文件系统可以使用zfs rename命令进行更名。使用rename命令可以执行以下操作。
        改变文件系统名
        重新分配文件系统到新定位的ZFS结构上。
        为文件系统更名并且重新定位ZFS结构。
下面是一个使用rename命令的例子

# zfs rename tank/home/kustarz tank/home/kustarz_old
将 kustarz 文件系统更名为 kustarz_old.
下面的例子显示将文件系统重新定位

# zfs rename tank/home/maybee tank/ws/maybee
这个例子中如果maybee文件系统重新定位冲tank/home到tank/ws。当你重新定位文件系统通过rename命令,新定位的点必须有同样的存储池并且有足够的空间来提供给新的文件系统。如果,新的定位点没有足够的空间,可能是存储池已经达到容量了。则rename失败。
如果rename操作尝试着unmount/remount操作为文件系统和下级文件系统。如果操作不能unmount活动的文件系统则rename失败。如果这样的问题发生了。则需要强制unmount文件系统。
(最近比较忙,第一部分写的少了一些,先请大家见谅,后续会更加详细)

论坛徽章:
0
3 [报告]
发表于 2007-08-20 16:54 |只看该作者
zfs 常用简略命令使用手册
以下是使用VMWARE做的测试,以后会做更进一步的测试
有错误的地方还望指点

建立删除卷
zpool create tank c2t0d0
zfs destroy tank

bash-3.00# zpool list
NAME                    SIZE    USED   AVAIL    CAP  HEALTH     ALTROOT
tank                    179M   30.2M    149M    16%  ONLINE     -

追加硬盘
zpool add tank  c2t1d0

看目前池状态
zpool status
查看健康状况
# zpool status -x
all pools are healthy

替换存储池中的设备
bash-3.00# zpool replace tank (原盘,目标替换盘)c2t0d0 c2t2d0(新盘)
bash-3.00# zpool status
  pool: tank
state: ONLINE
scrub: resilver completed with 0 errors on Sun May 13 11:01:24 2007
config:

        NAME         STATE     READ WRITE CKSUM
        tank         ONLINE       0     0     0
          replacing  ONLINE       0     0     0
            c2t0d0   ONLINE       0     0     0
            c2t2d0   ONLINE       0     0     0
          c2t1d0     ONLINE       0     0     0

errors: No known data errors

bash-3.00# zpool status
  pool: tank
state: ONLINE
scrub: resilver completed with 0 errors on Sun May 13 11:01:24 2007
config:

        NAME        STATE     READ WRITE CKSUM
        tank        ONLINE       0     0     0
          c2t2d0    ONLINE       0     0     0
          c2t1d0    ONLINE       0     0     0

errors: No known data errors
bash-3.00#



查看存储池的名称和大小
bash-3.00# zpool list -o name,size
NAME                  SIZE
tank                  179M
# zfs list -o name,sharenfs,mountpoint
NAME                  SHARENFS         MOUNTPOINT
tank                  off              /tank


查看存储迟IO情况
bash-3.00# zpool iostat
               capacity     operations    bandwidth
pool         used  avail   read  write   read  write
----------  -----  -----  -----  -----  -----  -----
tank        30.2M   149M      0      1    427  51.8K

zpool iostat tank 2
每2秒中显示一次tank迟IO情况

显示虚拟设备IO情况
bash-3.00# zpool iostat
               capacity     operations    bandwidth
pool         used  avail   read  write   read  write
----------  -----  -----  -----  -----  -----  -----
tank        30.2M   149M      0      1    427  51.8K
bash-3.00# zpool iostat -v
               capacity     operations    bandwidth
pool         used  avail   read  write   read  write
----------  -----  -----  -----  -----  -----  -----
tank        30.2M   149M      0      1    387  47.0K
  c2t0d0    16.1M  73.4M      0      2    654   111K
  c2t1d0    14.1M  75.4M      0      0    253  23.6K
----------  -----  -----  -----  -----  -----  -----


消除设备错误计数
zpool clear tank



迁移ZFS存储池
导出池
zpool export tank
查看池
bash-3.00# zpool import
  pool: tank
    id: 1682187158316955435
state: ONLINE
action: The pool can be imported using its name or numeric identifier.
config:

        tank        ONLINE
          c2t0d0    ONLINE
          c2t1d0    ONLINE
导入池
zpool import tank
(如果池名与目前有冲突可以使用新命名来导入如:zpool import tank tanker)



查看ZFS自动安装点属性
bash-3.00# zfs get mountpoint tank           
NAME             PROPERTY       VALUE                      SOURCE
tank             mountpoint     /tank                      default
查看是否自动安装上
bash-3.00# zfs get mounted tank
NAME             PROPERTY       VALUE                      SOURCE
tank             mounted        yes                        -      

手工改变安装点
bash-3.00# zfs set mountpoint=/chinasolaris.com tank
bash-3.00# zfs get mountpoint tank
NAME             PROPERTY       VALUE                      SOURCE
tank             mountpoint     /chinasolaris.com                  local
mountpoint 属性更改时,文件系统将自动从旧挂载点取消挂载,并重新挂载到新挂载点。根据需要,可

创建挂载点目录。如果ZFS 由于处于活动状态而无法取消挂载文件系统,则会报告错误,并需要强制进行

手动取消挂载。


设置传统挂接点
bash-3.00# zfs set mountpoint=legacy tank
bash-3.00# zfs get mountpoint tank
NAME             PROPERTY       VALUE                      SOURCE
tank             mountpoint     legacy                     local

mount -F zfs tank /chinasolaris.com
要在引导时自动挂载传统文件系统,必须向/etc/vfstab 文件中添加一项。
请注意,device to fsck 和fsck pass 项设置为-。使用此语法是因为fsck 命令不适用于ZFS 文件系统



显示当前挂接ZFS的情况
bash-3.00# zfs mount





恢复已删除的池

删除池
bash-3.00# zpool destroy tank
bash-3.00# zpool list
no pools available

zpool import已经无法发现tank池(使用-D参数可看到已经删除的池)
bash-3.00# zpool import
no pools available to import
bash-3.00# zpool import -D
  pool: tank
    id: 1682187158316955435
state: ONLINE (DESTROYED)
action: The pool can be imported using its name or numeric identifier.
        The pool was destroyed, but can be imported using the \'-Df\' flags.
config:

        tank        ONLINE
          c2t0d0    ONLINE
          c2t1d0    ONLINE
使用-Df参数import已删除的池
bash-3.00# zpool import -Df tank
bash-3.00# zpool list
NAME                    SIZE    USED   AVAIL    CAP  HEALTH     ALTROOT
tank                    179M   30.3M    149M    16%  ONLINE     -

论坛徽章:
0
4 [报告]
发表于 2007-08-20 19:30 |只看该作者
此帖已收集到主题列表:lovely:
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP