2013-08-06 10:56:04 shenyanxxxy 阅读数 1365
今天由于要测试自己的代码,需要在其他机器上安装zfsonlinux。安装报错,现总结如下。
安装的是zfs-0.6.11版本
需要安装zlib库以及uuid
apt-get install zlib1g-dev uuid-dev。
然后在编译的时候遇到一个错误就是dmu_send.c 386 line报错
386: error: integer constant is too large for ‘long’ 
 uint64_t *ptr;
*ptr = 0x2f5baddb10c;
这个是一个警告只有在i386上会出现,而zfs将所有的warning都会变成是错误。为了解决这个问题,修改dmu_send.c第386行。
*ptr = 0x2f5baddb10c;在最后加上LL就可以了。
再make 就不会有任何报错信息了。

最后在创建zpool的时候会报错,说找不到文件什么的错误,需要在ld.so.conf文件当中加入/usr/local/lib这个路径。
然后执行ldconfig即可。

点击(此处)折叠或打开

  1. cat /etc/ld.so.conf
  2. include /etc/ld.so.conf.d/*.conf
  3. /usr/local/lib



阅读(158) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
评论热议
2010-08-31 22:09:29 weixin_33714884 阅读数 17

在网上看开发Native ZFS for Linux 项目的 KQ Infotech 公司将于9 月 15 日左右,会正式发布一个完全可用的 Linux Kernel ZFS 模块。这个 ZFS 模块基于 ZFS Pool 18 ,已经实现了ZFS POSIX 层。但目前代码只支持 64 位 Linux 系统,同时他们还会发布适用于 Fedora 12 和 Red Hat Enterprise Linux 6 Beta 2 的 RPM 包。当然你也可以在 Ubuntu 10。04 LTS 上使用该模块,但必须要从源代码手工编译安装。

今索性下载下来了,安装下试试看,官方网址是:http://github.com/behlendorf/zfs/downloads,我会把编译好的rpm包以附件形式上传,喜欢的朋友可以下载下来玩玩。

1、下载的对应软件包如下:

image

在安装zfs之前必须先安装spl,否则zfs不能成功安装。

2、编译安装spl:

image

configure执行完成后,执行make rpm,这样会在当前目录下产生二进制rpm软件包,如果编译dep包,则执行make deb如下:

image

image

这里用到三个软件包,如下:

spl-0.5.0-1.x86_64.rpm 

spl-modules-0.5.0-1_2.6.18_194.el5.x86_64.rpm 

spl-modules-devel-0.5.0-1_2.6.18_194.el5.x86_64.rpm

执行rpm –ivh spl*.rpm执行安装即可。

3、编译安装zfs:

image

完了后,也会在当前目录下产生rpm软件包:

image

用的一共5个软件包,如下:

image

接着安装zfs的5个软件包:

image

查看splat模块是不是已载入:

image

4、简单测试:

现在系统有三块10G的硬盘,下面是创建zpool以及zfs文件系统:

image

在创建之前,执行modprobe zfs载入zfs模块:

image

创建成功了,接着创建zfs:

image

这个版本还是测试版,创建完zfs后,不会自动挂载,也会是系统崩溃的,还是期待正式版的吧。

2010-11-09 21:46:00 opendba 阅读数 3897

 

     目前我们公司的greenplum是建立在Solars上ZFS上的,听数据仓库部门反映,当有硬盘出现问题时,ZFS会hang住。由于目前oracle收购了sun公司,而oracle也关闭了Open Solars项目。以后Solars也要收费了,所以就想能否让greenplum跑在Linux下,而greenplum建议在Linux使用xfs文件系统,而xfs文件系统本身没有快照功能,而我们数据仓库又需要使用快照,所以我就想能否直接在Linux下使用ZFS。但是由于Linux kernel的许可证与ZFS的CDDL协议的不兼容,所以无法在Linux 内核中直接使用ZFS。去年就知道,在Linux下有ZFS的FUSE的版本可以使用,但 FUSE 的ZFS作为一个程序在用户空间(userspace)内使用,虽然绕过法律了障碍,但性能不高,据网上说的只是目前的性能仅仅只有XFS的一半。这个FUSE的ZFS我也使用过,对于一般对性能要求不高的应用还不可以的。但对于数据仓库这样对性能要求很高的应用明显是不可行的。今天,与SA同事聊时,他们说Linux下的原生ZFS发布了,而把这个ZFS编译成一个模块,而不是放入内核中,也是可以绕过法律障碍的。于是,晚上就准备试一下。

     首先在google上找到了一篇文章:《在 Linux 上编译和安装 ZFS 文件系统》,按这篇文章开始安装ZFS。我的笔记本上安装的是ubuntu10.04,于是就先在自己的笔记本电脑上安装ZFS:

 

 

到网站:https://github.com/behlendorf/zfs下载ZFS包,我下载的为zfs-0.5.1.tar.gz

由于zfs需要包spl包,还需要下载spl包:https://github.com/behlendorf/spl,我下载spl-0.5.1.tar.gz

 

root@osdba-laptop:/usr/src# wget http://github.com/downloads/behlendorf/spl/spl-0.5.1.tar.gz

--2010-11-09 20:58:54--  http://github.com/downloads/behlendorf/spl/spl-0.5.1.tar.gz

正在解析主机 github.com... 207.97.227.239

正在连接 github.com|207.97.227.239|:80... 已连接。

已发出 HTTP 请求,正在等待回应... 301 Moved Permanently

位置:https://github.com/downloads/behlendorf/spl/spl-0.5.1.tar.gz [跟随至新的 URL]

--2010-11-09 20:58:55--  https://github.com/downloads/behlendorf/spl/spl-0.5.1.tar.gz

正在连接 github.com|207.97.227.239|:443... 已连接。

错误: 证书通用名 “*.github.com” 与所要求的主机名 “github.com” 不符。

要以不安全的方式连接至 github.com,使用‘--no-check-certificate’。

wget 时报错,说是需要加“--no-check-certificate”:

wget --no-check-certificate http://github.com/downloads/behlendorf/spl/spl-0.5.1.tar.gz

下载到/usr/src 目录下,解压,进入目录,运行./configure,然后make、make install就完成了spl的安装。

按文章《在 Linux 上编译和安装 ZFS 文件系统》测试一下spl是否正常:

root@osdba-laptop:/usr/src/spl-0.5.1# /sbin/modprobe splat

root@osdba-laptop:/usr/src/spl-0.5.1# splat -t kmem:all

------------------------------ Running SPLAT Tests ------------------------------

                kmem:kmem_alloc           Pass  

                kmem:kmem_zalloc          Pass  

                kmem:vmem_alloc           Pass  

                kmem:vmem_zalloc          Pass  

                kmem:slab_small           Pass  

                kmem:slab_large           Pass  

                kmem:slab_align           Pass  

                kmem:slab_reap            Pass  

                kmem:slab_age             Pass  

                kmem:slab_lock            Pass  

                kmem:slab_overcommit      Pass  

                kmem:vmem_size            Pass 

 

OK,没有问题。

 

然后把ZFS解压到/usr/src/下

这时进行./configure时报如下一个错误:

configure: error: in `/usr/src/zfs-0.5.1':

configure: error:

*** uuid/uuid.h missing, libuuid-devel package required

See `config.log' for more details.

说是需要安装libuuid-devel的包,没有找到libuuid-devel的包,找到一个uuid-dev的包,估计差不多,安装:

root@osdba-laptop:/usr/src/zfs-0.5.1# aptitude install uuid-dev

正在读取软件包列表... 完成

正在分析软件包的依赖关系树       

正在读取状态信息... 完成       

正在读取扩展状态文件      

正在初始化软件包状态... 完成

下列“新”软件包将被安装。

  uuid-dev 

0 个软件包被升级,新安装 1 个, 0 个将被删除, 同时 0 个将不升级。

需要获取 76.6kB 的存档。 解包后将要使用 193kB。

正在编辑扩展状态信息... 完成

读取:1 http://cn.archive.ubuntu.com/ubuntu/ lucid/main uuid-dev 2.17.2-0ubuntu1 [76.6kB]

已下载 76.6kB,耗时 0秒 (83.3kB/s)

选中了曾被取消选择的软件包 uuid-dev。

(正在读取数据库 ... 系统当前总共安装有 241612 个文件和目录。)

正在解压缩 uuid-dev (从 .../uuid-dev_2.17.2-0ubuntu1_amd64.deb) ...

正在处理用于 man-db 的触发器...

正在设置 uuid-dev (2.17.2-0ubuntu1) ...

正在读取软件包列表... 完成     

正在分析软件包的依赖关系树       

正在读取状态信息... 完成       

正在读取扩展状态文件      

正在初始化软件包状态... 完成

正在编辑扩展状态信息... 完成  

 

然后再./configure就通过了,然后,准备使用一下ZFS:

 

root@osdba-laptop:/usr/src/zfs-0.5.1# zpool status

zpool: error while loading shared libraries: libspl.so.0: cannot open shared object file: No such file or directory

 

说明找不到libspl.so.o,这个原因估是是没有把/usr/local/lib目前加到库的搜索路径中:

root@osdba-laptop:/usr/local/lib# export LD_LIBRARY_PATH=/usr/local/lib

 

root@osdba-laptop:/usr/local/lib# zpool status

Unable to open /dev/zfs: 没有那个文件或目录.

Verify the ZFS module stack is loaded by running '/sbin/modprobe zfs'.

root@osdba-laptop:/usr/local/lib# 

需要加载zfs内核模块,加载:
root@osdba-laptop:/usr/local/lib# modprobe zfs
root@osdba-laptop:/usr/local/lib# zpool status
no pools available
root@osdba-laptop:/usr/local/lib# 
这时执行命令就正常了。
由于笔记本上无空闲的硬盘,所以建6个100M的文件做测试:

 

root@osdba-laptop:/opt/zfs# dd if=/dev/zero of=c0d2 bs=1024k count=100

记录了100+0 的读入

记录了100+0 的写出

104857600字节(105 MB)已复制,0.193669 秒,541 MB/秒

root@osdba-laptop:/opt/zfs# dd if=/dev/zero of=c1d0 bs=1024k count=100

记录了100+0 的读入

记录了100+0 的写出

104857600字节(105 MB)已复制,0.217518 秒,482 MB/秒

root@osdba-laptop:/opt/zfs# dd if=/dev/zero of=c1d1 bs=1024k count=100

记录了100+0 的读入

记录了100+0 的写出

104857600字节(105 MB)已复制,0.33618 秒,312 MB/秒

root@osdba-laptop:/opt/zfs# dd if=/dev/zero of=c1d2 bs=1024k count=100

记录了100+0 的读入

记录了100+0 的写出

104857600字节(105 MB)已复制,0.202078 秒,519 MB/秒

root@osdba-laptop:/opt/zfs# 

root@osdba-laptop:/opt/zfs# ls -l

总用量 614404

-rw-r--r-- 1 root root 104857600 2010-11-09 21:49 c0d0

-rw-r--r-- 1 root root 104857600 2010-11-09 21:49 c0d1

-rw-r--r-- 1 root root 104857600 2010-11-09 21:49 c0d2

-rw-r--r-- 1 root root 104857600 2010-11-09 21:49 c1d0

-rw-r--r-- 1 root root 104857600 2010-11-09 21:49 c1d1

-rw-r--r-- 1 root root 104857600 2010-11-09 21:49 c1d2

root@osdba-laptop:/opt/zfs# zpool create mypool /opt/zfs/c0d0
root@osdba-laptop:/opt/zfs# zpool status
  pool: mypool
 state: ONLINE
 scan: none requested
config:
NAME             STATE     READ WRITE CKSUM
mypool           ONLINE       0     0     0
 /opt/zfs/c0d0  ONLINE       0     0     0
errors: No known data errors
root@osdba-laptop:/opt/zfs# 
root@osdba-laptop:/opt/zfs# zpool attach mypool /opt/zfs/c0d0 /opt/zfs/c0d1
root@osdba-laptop:/opt/zfs# zpool status
  pool: mypool
 state: ONLINE
 scan: resilvered 94K in 0h0m with 0 errors on Tue Nov  9 21:52:23 2010
config:
NAME               STATE     READ WRITE CKSUM
mypool             ONLINE       0     0     0
 mirror-0         ONLINE       0     0     0
   /opt/zfs/c0d0  ONLINE       0     0     0
   /opt/zfs/c0d1  ONLINE       0     0     0
errors: No known data errors
oot@osdba-laptop:/opt/zfs# zfs create mypool/zfs01
root@osdba-laptop:/opt/zfs# zfs list
NAME           USED  AVAIL  REFER  MOUNTPOINT
mypool         347K  63.2M    19K  /mypool
mypool/zfs01    19K  63.2M    19K  /mypool/zfs01

 

2015-01-02 21:56:35 tonydlut 阅读数 146

转:http://www.andybotting.com/zfs-on-linux

 

ZFS is a fantastic filesystem developed by Sun. Compared to other filesystems, it’s quite interesting as it combines both a filesystem and a logical volume manager. This allows you to get great flexibility, features and performance. It supports things like integrated snapshots, native NFSv4 ACL support and clever data integrity checking.

I’m now running a HP ProLiant MicroServer N36L which is a small NAS unit containing a 4-bay SATA enclosure. It has a low-performance AMD CPU, and comes with 1GB RAM and a 250GB harddisk. I’ve upgraded mine to 4GB of RAM and 4 x 2TB Seagate Barracuda drives.

The benefit of these units are that they’re a standard x86 machine allowing you to easily install any OS you like. They’re also really cheap and often have cash-back promotions.

I bought mine when I was in the UK and I brought it back with me to Australia. I waited until I got back to upgrade it so save me the trouble of shipping the extra harddisks on the ship.

In this post, I’ll document how to easily install ZFS on Debian Wheezy and some basic ZFS commands you’ll need to get started.

Installation

UPDATE: ZFS on Linux now has their own Debian Wheezy repository!http://zfsonlinux.org/debian.html

Install the ZFS packages

# apt-get install debian-zfs

This should use DKMS to build some new modules specific to your running kernel and install all the required packages.

Pull the new module into the kernel
# modprobe zfs

If all went well, you should see that spl and zfs have been loaded into the kernel.

 

Prepare disks

ZFS works best if you give it full access to your disks. I’m not going to run ZFS on my root filesystem, so this makes things much simpler.

Find our ZFS disks. We use the disk ID’s instead of the standard /dev/sdX naming because it’s more stable.
# ls /dev/disk/by-id/ata-*
lrwxrwxrwx 1 root root 9 Jan 21 19:18 /dev/disk/by-id/ata-ST2000DM001-1CH164_Z1E1GYH5 -> ../../sdd
lrwxrwxrwx 1 root root 9 Jan 21 08:55 /dev/disk/by-id/ata-ST2000DM001-9YN164_Z1E2ACRM -> ../../sda
lrwxrwxrwx 1 root root 9 Jan 21 08:55 /dev/disk/by-id/ata-ST2000DM001-9YN164_Z1F1SHN4 -> ../../sdb

Create partition tables on the disks so we can use them in a zpool:
# parted /dev/disk/by-id/ata-ST2000DM001-9YN164_Z1E2ACRM mklabel gpt
# parted /dev/disk/by-id/ata-ST2000DM001-9YN164_Z1F1SHN4 mklabel gpt
# parted /dev/disk/by-id/ata-ST2000DM001-1CH164_Z1E1GYH5 mklabel gpt

 

Create a new pool

ZFS uses the concept of pools in a similar way to how LVM would handle volume groups.

Create a pool called mypool, with the initial member being a RAIDZ composed of the remaining three drives.
# zpool create -m none -o ashift=12 mypool raidz /dev/disk/by-id/ata-ST2000DM001-1CH164_Z1E1GYH5/dev/disk/by-id/ata-ST2000DM001-9YN164_Z1E2ACRM/dev/disk/by-id/ata-ST2000DM001-9YN164_Z1F1SHN4

RAIDZ is a little like RAID-5. I’m using RAID-Z1, meaning that from a 3-disk pool, I can lose one disk while maintaining the data access.

NOTE: Unlike RAID, once you build your RAIDZ, you cannot add new individual disks. It’s a long story.

The -m none means that we don’t want to specify a mount point for this pool yet.

The -o ashift=12 forces ZFS to use 4K sectors instead of 512 byte sectors. Many new drives use 4K sectors, but lie to the OS about it for ‘compatability’ reasons. My first ZFS filesystem used the 512-byte sectors in the beginning, and I had shocking performance (~10Mb/s write).

Seehttp://zfsonlinux.org/faq.html#HowDoesZFSonLinuxHandlesAdvacedFormatDrives for more information about it.

# zpool list
NAME   SIZE ALLOC FREE  CAP DEDUP HEALTH ALTROOT
mypool 5.44T 1.26T 4.18T 23% 1.00x ONLINE -

Disable atime for a small I/O boost
# zfs set atime=off mypool

Deduplication is probably not worth the CPU overheard on my NAS.
# zfs set dedup=off mypool

Our pool is now ready for use.

 

Create some filesystems

Create our documents filesystem, mount and share it by NFS
# zfs create mypool/documents
# zfs set mountpoint=/mnt/documents mypool/documents
# zfs set sharenfs=on mypool/documents

Create our photos filesystem, mount and share it by NFS
# zfs create mypool/photos
# zfs set mountpoint=/mnt/photos mypool/photos
# zfs set sharenfs=on mypool/photos

Photos are important, so keep two copies of them around
# zfs set copies=2 mypool/photos

Documents are really important, so we’ll keep three copies of them on disk
# zfs set copies=3 mypool/documents

Documents are mostly text, so we’ll compress them.
# zfs set compression=on mypool/documents

Scrub

ZFS pools should be scrubbed at least once a week. It helps balance the data across the disks in your pool and to fix up any data integrity errors it might find.
# zpool scrub <pool>

To do automatic scrubbing once a week, set the following line in your root crontab
# crontab -e
...
30 19 * * 5 zpool scrub <pool>

...

2020-03-01 19:14:52 yjj_xss 阅读数 90

ZFS概念

  • ZFS(Zettabyte File System)文件系统也叫动态文件系统(Dynamic File System),是第一个128位文件系统。ZFS 强健、可伸缩,且易于管理。
  • ZFS 使用存储池的概念来管理物理存储。ZFS 将设备聚集到存储池中,而不是强制要求创建虚拟卷。
  • 存储池描述了存储的物理特征(设备布局、数据冗余等),并充当可以从其创建文件系统的任意数据存储库。文件系统不再受限于单个设备,允许它们与池中的所有文件系统共享磁盘空间。

ZFS安装

  • 查看CentOS的版本安装对应的rpm包
[root@localhost ~]# cat /etc/redhat-release 
CentOS Linux release 7.5.1804 (Core)
如果是其他版本的将el7_n,中的n修改为对应的版本号就可以了
[root@localhost ~]# yum install http://download.zfsonlinux.org/epel/zfs-release.el7_5.noarch.rpm -y

出现Complete!则表示成功。

  • 修改文件/etc/yum.repo.d/zfs.repo,将[zfs-kmod]下的enabled数值改为1
  • 执行yum命令安装zfs
[root@localhost ~]# yum install zfs -y

出现Complete!则表示成功。

  • 执行lsmod | grep zfs查看是否加载到内核,若未加载到内核,则执行modprobe zfs将zfs加载到内核。
[root@localhost ~]# lsmod | grep zfs
[root@localhost ~]# modprobe zfs
[root@localhost ~]# lsmod | grep zfs
zfs                  3564468  0 
zunicode              331170  1 zfs
zavl                   15236  1 zfs
icp                   270148  1 zfs
zcommon                73440  1 zfs
znvpair                89131  2 zfs,zcommon
spl                   102412  4 icp,zfs,zcommon,znvpair

内核中存在zfs相关模块,说明加载成功,接下来就可以使用zfs相关功能了。

ZFS使用之存储池(zpool)

  1. zfs 存储池相关概念
  • 存储池的最基本元素是物理存储器。理存储器可以是大小至少为 128 MB 的任何块设备。通常,此设备是 /dev/dsk 目录中对系统可见的一个硬盘驱动器。
  • 存储设备可以是整个磁盘 (c1t0d0) 或单个分片 (c0t0d0s7)。建议的操作模式是使用整个磁盘,在这种情况下,无需对磁盘进行特殊格式化。ZFS 可格式化使用 EFI 标签的磁盘以包含单个大分片。
  1. 创建 ZFS 存储池(此处仅介绍基本存储池的相关操作)
    zpool create tank c1t0d0 c1t1d0 #创建了一个名为 tank 的新池,该池由磁盘 c1t0d0 和 c1t1d0 组成
  • 可以使用 zpool list 来查看存储池列表
[root@localhost ~]# zpool create tank /dev/sdc /dev/sdd
[root@localhost ~]# zpool list
NAME   SIZE  ALLOC   FREE  EXPANDSZ   FRAG    CAP  DEDUP  HEALTH  ALTROOT
tank  39.8G   747K  39.7G         -     0%     0%  1.00x  ONLINE  -
  1. 向存储池添加设备
    zpool add tank c2t1d0 #向存储池tank中添加设备
  • 可以使用zpool status zpoolname查看存储池的状态信息
[root@localhost ~]# zpool add tank /dev/sde

[root@localhost ~]# zpool status tank
  pool: tank
 state: ONLINE
  scan: none requested
config:

	NAME        STATE     READ WRITE CKSUM
	tank        ONLINE       0     0     0
	  sdc       ONLINE       0     0     0
	  sdd       ONLINE       0     0     0
	  sde       ONLINE       0     0     0

errors: No known data errors
  1. 销毁存储池
    zpool destroy zpoolname
[root@localhost ~]# zpool destroy zpooltest1
[root@localhost ~]# zpool list
NAME   SIZE  ALLOC   FREE  EXPANDSZ   FRAG    CAP  DEDUP  HEALTH  ALTROOT
tank  59.6G   120K  59.6G         -     0%     0%  1.00x  ONLINE  -
  1. 查看存储池相关信息(zpool list和zpool ststus见前文)
  • 显示特定的存储池统计信息
    zpool list -o name,size
[root@localhost ~]# zpool list -o name,size
NAME         SIZE
tank        59.6G
zpooltest1  9.94G
  • 显示 ZFS 存储池命令历史记录
    zpool history
[root@localhost ~]# zpool history tank
History for 'tank':
2020-03-01.16:44:27 zpool create tank /dev/sdc /dev/sdd
2020-03-01.16:52:00 zpool add tank /dev/sde

[root@localhost ~]# zpool history
History for 'tank':
2020-03-01.16:44:27 zpool create tank /dev/sdc /dev/sdd
2020-03-01.16:52:00 zpool add tank /dev/sde

History for 'zpooltest1':
2020-03-01.17:09:02 zpool create zpooltest1 /dev/sdb

  • 查看 ZFS 存储池的 I/O 统计信息
    zpool iostat
[root@localhost ~]# zpool iostat
              capacity     operations     bandwidth 
pool        alloc   free   read  write   read  write
----------  -----  -----  -----  -----  -----  -----
tank         120K  59.6G      0      0     46  5.79K
zpooltest1   108K  9.94G      0      1    223  15.6K
----------  -----  -----  -----  -----  -----  -----
[root@localhost ~]# zpool iostat tank
              capacity     operations     bandwidth 
pool        alloc   free   read  write   read  write
----------  -----  -----  -----  -----  -----  -----
tank         120K  59.6G      0      0     46  5.75K

ZFS使用之文件系统

  1. 创建文件系统
  • zfs create tank/test1 #在 tank中创建了一个名为 test1 的文件系统
    如果新文件系统创建成功,则 ZFS 会自动挂载该文件系统。
[root@localhost ~]# zfs create tank/test1
[root@localhost ~]# zfs list
NAME         USED  AVAIL  REFER  MOUNTPOINT
tank         123K  57.8G    24K  /tank
tank/test1    24K  57.8G    24K  /tank/test1
  • 也可在创建文件系统时设置文件系统属性:
    zfs create -o mountpoint=/export/zfs tank/test2 #创建tank/test2 文件系统,并为其创建挂载点 /export/zfs
[root@localhost ~]# zfs create -o mountpoint=/export/zfs tank/test2
[root@localhost ~]# zfs list
NAME         USED  AVAIL  REFER  MOUNTPOINT
tank         160K  57.8G    24K  /tank
tank/test1    24K  57.8G    24K  /tank/test1
tank/test2    24K  57.8G    24K  /export/zfs
  1. 销毁文件系统
    zfs destroy tank/test1 #销毁tank/test1 文件系统。如果要销毁的文件系统处于繁忙状态而无法取消挂载,则 zfs destroy 命令将失败。要销毁活动文件系统,请使用 -f 选项。由于此选项可取消挂载、取消共享和销毁活动文件系统,从而导致意外的应用程序行为,因此请谨慎使用此选项。
[root@localhost ~]# zfs destroy tank/test1 -f
[root@localhost ~]# zfs list
NAME         USED  AVAIL  REFER  MOUNTPOINT
tank         728K  57.8G    24K  /tank
tank/test2    24K  57.8G    24K  /export/zfs
  1. 重命名 文件系统
    zfs rename tank/test2 tank/testrename #将文件系统tank/test2重命名为/tankrename
[root@localhost ~]# zfs rename tank/test2 tank/rename
[root@localhost ~]# zfs list
NAME          USED  AVAIL  REFER  MOUNTPOINT
tank          141K  57.8G    24K  /tank
tank/rename    24K  57.8G    24K  /export/zfs

ZFS使用之 ZFS volumn(zfs卷)

  1. 创建
  • zfs create [-ps] [-b blocksize] [-o property=value] … -V [size] [volume]
    zfs create -V 20G tank/testvolumn1 #创建zfs卷
[root@localhost ~]# zfs create -V 20G tank/testvolumn1
[root@localhost ~]# zfs list
NAME               USED  AVAIL  REFER  MOUNTPOINT
tank              20.6G  37.1G    24K  /tank
tank/rename         24K  37.1G    24K  /export/zfs
tank/testvolumn1  20.6G  57.8G    12K  -
  • 格式化文件系统
    mkfs.fs /dev/pool_name/volume_name
    mkfs.ext3 /dev/tank/testvolumn1 #格式化zfs卷为ext3文件系统
    使用lsblk -f查看磁盘信息,存在新建的volumn信息:
[root@localhost ~]# lsblk -f
...
zd0             ext3                        1a5c6d71-1975-4c01-bc9e-94d3febcf011
  • 挂载卷
    创建挂载点:mkdir /testvolumn1
    挂载:mount /dev/tank/testvolumn1 /testcolumn1
    使用lsblk -f可以看到该volumn信息,使用df -h可以看到挂载信息
[root@localhost ~]# mkdir /testvolumn1
[root@localhost ~]# mount /dev/tank/testvolumn1 /testvolumn1/
[root@localhost ~]# lsblk -f
...
zd0             ext3                        1a5c6d71-1975-4c01-bc9e-94d3febcf011   /testvolumn1
[root@localhost ~]# df -h
...
/dev/zd0                  20G   45M   19G   1% /testvolumn1
  1. 重命名
    zfs rename
    zfs rename oldvolumnname newvolumnname #重命名zfs逻辑卷
    使用lsblk -f查看磁盘信息,存在新建的volumn信息:
[root@localhost ~]# zfs rename tank/testvolumn1 tank/testvolumnrename
[root@localhost ~]# zfs list
NAME                    USED  AVAIL  REFER  MOUNTPOINT
tank                   20.6G  37.1G    24K  /tank
tank/rename              24K  37.1G    24K  /export/zfs
tank/testvolumnrename  20.6G  57.3G   455M  -

3.销毁
zfs sestroy (volumn未挂载的情况下)

[root@localhost ~]# zfs destroy tank/testvolumnrename -f
[root@localhost ~]# zfs list
NAME          USED  AVAIL  REFER  MOUNTPOINT
tank          171K  57.8G    24K  /tank
tank/rename    24K  57.8G    24K  /export/zfs

ZFS使用之快照和克隆

以下操作大部分皆适用于ZFS文件系统&volumn,特殊情形会在相对应的部分标出。

  1. 快照
  • 概述
    • 快照是文件系统或卷的只读副本。快照几乎可以即时创建,而且最初不占用池中的其他磁盘空间。但是,活动数据集中的数据更改时,快照仍将继续引用旧数据,这会占用磁盘空间,从而阻止释放磁盘空间。
    • ZFS 快照具有以下特征:
      可在系统重新引导后存留下来。
      理论最大快照数是 2的64次方。
      快照不使用单独的后备存储。快照直接占用存储池(从中创建这些快照的文件系统或卷所在的存储池)中的磁盘空间。
      递归快照可作为一个原子操作快速创建。要么一起创建快照(一次创建所有快照),要么不创建任何快照。原子快照操作的优点是始终在一个一致的时间捕获快照数据,即使跨后代文件系统也是如此。
      注意:无法直接访问卷的快照,但是可以对它们执行克隆、备份、回滚等操作。
  • 创建快照
    zfs snapshot tank/rename@sunday #将创建一个 tank/rename 的快照,其名称为 sunday。
    可以使用zfs list -t snapshot 查看快照列表
[root@localhost ~]# zfs snapshot tank/rename@sunday
[root@localhost ~]#  zfs list -t snapshot -r tank/rename
NAME                 USED  AVAIL  REFER  MOUNTPOINT
tank/rename@sunday     0B      -    24K  -
  • 回滚 ZFS 快照
    • 可以使用 zfs rollback 命令放弃自特定快照创建以来对文件系统所做的全部更改。文件系统恢复到创建快照时的状态。缺省情况下,该命令无法回滚到除最新快照以外的快照。
    • 要回滚到早期快照,必须销毁所有的中间快照。可以通过指定 -r 选项销毁早期的快照。
    • 如果存在任何中间快照的克隆,则还必须指定 -R 选项以销毁克隆。
    • - 如果要回滚的文件系统当前为挂载状态,则会取消挂载并重新挂载。如果无法取消挂载该文件系统,则回滚将失败。-f 选项可强制取消挂载文件系统(如有必要)。

zfs rollback tank/rename

[root@localhost ~]#  zfs list -t snapshot -r tank/rename
NAME                 USED  AVAIL  REFER  MOUNTPOINT
tank/rename@sunday     0B      -    24K  -
tank/rename@Monday     0B      -    24K  -
[root@localhost ~]# zfs rollback tank/rename@sunday
cannot rollback to 'tank/rename@sunday': more recent snapshots or bookmarks exist
use '-r' to force deletion of the following snapshots and bookmarks:
tank/rename@Monday
[root@localhost ~]# zfs rollback tank/rename@sunday -r
[root@localhost ~]#  zfs list -t snapshot -r tank/rename
NAME                 USED  AVAIL  REFER  MOUNTPOINT
tank/rename@sunday     0B      -    24K  -

可以看到,因为已回滚到以前的 sunday 快照,所以销毁了 Monday快照。

  • 确定不同快照间的差异(该操作不适用于zfs volumn 快照)
    zfs diff snap1 snap2
    如下为不同时间创建快照,查看快照间差异:
[root@localhost ~]# ls /export/zfs
test1
[root@localhost ~]#zfs snapshot tank/rename@snap1
[root@localhost ~]# ls /export/zfs
test1  test2
[root@localhost ~]# zfs snapshot tank/rename@snap2
[root@localhost ~]# zfs diff tank/rename@snap1 tank/rename@snap2
M	/export/zfs/
+	/export/zfs/test2
[root@localhost ~]# 

在输出中,M 表示该目录已经过修改。+ 表示 test2 存在于较新的快照中。
当输出中存在“-”时,表示文件或目录出现在较旧的快照中,但未出现在较新的快照中,当输出中存在“R”时,表示文件或目录已重命名。

  • 销毁ZFS 快照
    zfs destroy tank/rename@snap1 #销毁快照zfs destroy tank/rename@snap1
[root@localhost ~]#  zfs list -t snapshot -r tank/rename
NAME                 USED  AVAIL  REFER  MOUNTPOINT
tank/rename@sunday    14K      -    24K  -
tank/rename@snap1     13K      -    24K  -
tank/rename@snap2     13K      -    25K  -
[root@localhost ~]# zfs destroy tank/rename@snap1
[root@localhost ~]#  zfs list -t snapshot -r tank/rename
NAME                 USED  AVAIL  REFER  MOUNTPOINT
tank/rename@sunday    14K      -    24K  -
tank/rename@snap2     13K      -    25K  -
[root@localhost ~]# 
  1. 克隆
  • 概述
    • 克隆是可写入的卷或文件系统,其初始内容与从中创建它的数据集的内容相同。与快照一样,创建克隆几乎是即时的,而且最初不占用其他磁盘空间。此外,还可以创建克隆的快照。
    • 克隆只能从快照创建。克隆快照时,会在克隆和快照之间建立隐式相关性。即使克隆是在文件系统分层结构中的其他位置创建的,但只要克隆存在,就无法销毁原始快照。origin 属性显示此相关项,而 zfs destroy 命令会列出任何此类相关项(如果存在)。
    • 克隆不继承从其中创建它的数据集的属性。使用 zfs get 和 zfs set 命令,可以查看和更改克隆数据集的属性。
    • 由于克隆最初与原始快照共享其所有磁盘空间,因此其 used 属性值最初为零。随着不断对克隆进行更改,它使用的磁盘空间将越来越多。原始快照的 used 属性不包括克隆所占用的磁盘空间
  • 创建ZFS克隆
    clone [-p] [-o property=value] … <filesystem|volume>
    zfs clone tank/rename@sunday tank/clone1 #将创建一个名为 tank/clone1 的新克隆,其初始内容与快照tank/rename@sunday的内容相同
[root@localhost ~]#zfs clone tank/rename@sunday tank/clone1
[root@localhost ~]# zfs list
NAME              USED  AVAIL  REFER  MOUNTPOINT
tank             21.1G  36.7G    24K  /tank
tank/clone1         0B  36.7G    24K  /tank/clone1
tank/clone2         1K  36.7G   455M  -
tank/rename        52K  36.7G    25K  /export/zfs
tank/testvolumn  21.1G  57.3G   455M  -

可以看到新增的tank/clone1文件系统

  • 使用 ZFS 克隆替换 ZFS 文件系统
[root@localhost ~]# zfs snapshot tank/test@1
[root@localhost ~]# zfs clone tank/test@1 tank/testclone
[root@localhost ~]# zfs list
NAME              USED  AVAIL  REFER  MOUNTPOINT
tank             21.5G  36.3G    26K  /tank
tank/clone1        24K  36.3G    24K  /tank/clone1
tank/test         423M  36.3G   423M  /tank/test
tank/testclone      0B  36.3G   423M  /tank/testclone
tank/testvolumn  21.1G  56.9G   455M  -
[root@localhost ~]# zfs promote tank/testclone
[root@localhost ~]# zfs list
NAME              USED  AVAIL  REFER  MOUNTPOINT
tank             21.5G  36.3G    26K  /tank
tank/clone1        24K  36.3G    24K  /tank/clone1
tank/test           0B  36.3G   423M  /tank/test
tank/testclone    423M  36.3G   423M  /tank/testclone
tank/testvolumn  21.1G  56.9G   455M  -

根据前后输出的zfs信息可以看到,注意源 test文件系统的磁盘空间记帐信息已被testclone文件系统取代。

  • 销毁ZFS克隆
    zfs destroy
[root@localhost ~]# zfs list -r tank
NAME              USED  AVAIL  REFER  MOUNTPOINT
tank             21.1G  36.7G    25K  /tank
tank/clone1        24K  36.7G    24K  /tank/clone1
tank/clone2         1K  36.7G   455M  -
tank/testvolumn  21.1G  57.3G   455M  -
[root@localhost ~]# zfs destroy tank/clone2
[root@localhost ~]# zfs list
NAME              USED  AVAIL  REFER  MOUNTPOINT
tank             21.1G  36.7G    25K  /tank
tank/clone1        24K  36.7G    24K  /tank/clone1
tank/testvolumn  21.1G  57.3G   455M  -

可参考链接:https://docs.oracle.com/cd/E26926_01/html/E25826/gbchp.html

没有更多推荐了,返回首页