Linux使用ZFS文件系统

来源:it168网站

ZFS(Zettabyte File System)作为一个全新的文件系统,全面抛弃传统File System + Volume Manager + Storage(文件系统+卷管理+存储)的架构,所有的存储设备是通过ZFS 池进行管理,只要把各种存储设备加 入同一个ZFS 池,大家就可以轻松的在这个ZFS 池管理配置文件系统。

ZFS 包括一系列具有分层结构的存储元素,其中既有物理存储元素,又有逻辑存储元素。所有这些元素都以有助于方便管理的方式相关联。如下图,是ZFS文件系统与传统文件系统的对比。

图1 ZFS文件系统与传统文件系统的对比图

一、为Linux服务器配置安装ZFS文件系统

(1) 为rhel 配置EPEL repo

如果既想获得 RHEL 的高质量、高性能、高可靠性,又需要方便易用(关键是免费)的软件包更新功能,那么 Fedora Project 推出的 EPEL(Extra Packages for Enterprise Linux)正好适合你。EPEL(http://fedoraproject.org/wiki/EPEL) 是由 Fedora 社区打造,为 RHEL 及衍生发行版如 CentOS、Scientific Linux 等提供高质量软件包的项目。装上了 EPEL,就像在 Fedora 上一样,可以通过 yum install package-name,随意安装软件。安装 EPEL 非常简单:

RHEL 6 系列使用:

# rpm -Uvh http://download.fedora.redhat.com/pub/epel/beta/6/i386/epel-release-6-1.noarch.rpm

RHEL 5 系列使用:

#rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-3.noarch.rpm

(2)安装zfs-fuse模块

# yum install zfs-fuse

(3)从源代码安装

如果要源代码安装首先安装如下模块:

su -c "yum install -y fuse-devel libattr-devel libaio-devel libacl-devel zlib-devel fuse-devel scons openssl-devel"

然后下载http://zfs-fuse.net/releases/0.6.9/zfs-fuse-0.6.9.tar.bz2

#/configure;make;make install

加载zfs内核模块

#modprobe zfs

二、 在Linux服务器上使用ZFS文件系统

1了解zfs管理命令

Zfs命令包括一组子命令主要如下:

create 创建zfs文件系统

destroy 摧毁一个ZFS文件系统

snapshot 建立一个文件系统的快照

rollback 从一个文件系统的快照中恢复

clone 建立一个文件系统的克隆

promote 从一个克隆创建一个文件系统

upgrade 升级 ZFS 文集系统

list查看和询问数据集的信息

allow 将用于执行 ZFS 管理任务的细粒度权限委托给非特权用户

unallow 将用于执行 ZFS 管理任务的细粒度权限删除

share 共享zfs文件系统

unshared 取消共享zfs文件系统

rename 重命名 ZFS 快照

mount 挂载zfs文件系统

umount 卸载zfs文件系统

set 可以设置或修改数据集的属性

get 得到文件系统的一个专门属性

zpool命令包括一组子命令如下:

create 使用指定的实际设备建立存储池

destroy摧毁一个ZFS存储池,但是不删除设备中数据

add 在存储池中添加虚拟设备

remove 在存储池中删除虚拟设备,但是不删除设备中数据

list 显示所有存储池

iostat查看存储池I/O状况

status 查看存储池健康状况

online把存储池状态设置为在线

offline把存储池状态设置为离线

clear 消除存储池设备错误计数

attach 固定一个设备在存储池中

detach 从存储池中分离设备

replace 替换存储池中的设备

scrub 校验存储池

import 导入存储池

export 导出存储池

upgrade 升级存储池

history 显示所有存储池操作命令

get 找回和列出存储池的设备

set 设置一个或者多个设备在一个存储池

2 zfs使用实例:

(1) 使用 losetup 建立虛擬磁盘

$ mkdir zfstest

$ cd zfstest

$ dd if=/dev/zero of=disk1.img bs=64M count=1

$ dd if=/dev/zero of=disk2.img bs=64M count=1

$ dd if=/dev/zero of=disk3.img bs=64M count=1

$ dd if=/dev/zero of=disk4.img bs=64M count=1

$ dd if=/dev/zero of=disk5.img bs=64M count=1

(2)建立简单存储池

#zpool create -f zfstest1 /dev/loop0

使用-f选项强行创建存储池和文件系统。

(3)创建RAID-Z池。

RAID-Z:类似RAID-5,是个存储数据及在多个磁盘上进行校验的虚拟设备。RAID(Redundant Array of Inexpensive (or Independent) Disks,廉价(独立)磁盘冗余阵列)指的是称为阵列的一组磁盘。依据不同的配置,此阵列可以改善可靠性、响应时间或存储容量。ZFS 使用 RAID-Z,RAID-Z 类似于 RAID-5,因为它将数据和奇偶校验信息都置于三个或更多驱动器上。但是,与 RAID-5 不同的是,RAID-Z 始终执行完全条带化 (full-stripe) 写操作。将会对所有数据都执行校验和操作。Snapshot:在某个时间,文件系统或卷的映像。快照是文件系统或卷的只读的拷贝。快照的创建快速而且容易。不过,快照的建立需要消耗存储池的空间。可以使用关键字raidz来创建RAID-Z存储池。

# zpool create cjhzpool -f raidz /dev/loop2 /dev/loop3 /dev/loop4 /dev/loop5

(4)删除存储池

当写在磁盘中的数据不再需要的时候,就可以使用zpool destroy命令删除存储池。

# zpool destroy zfstest1

注意:存储池被删除后,数据也同时会丢失。

(5) 实时监控存储池

显示基本的 ZFS 存储池信息

可以使用 zpool list 命令显示有关池的基本信息。如果不使用参数,则此命令会显示系统中所有池的所有字段。如图2 。

图2显示基本的 ZFS 存储池信息

图2输出显示了以下信息:

NAME 池的名称。

SIZE 池的总大小,等于所有顶层虚拟设备大小的总和。

USED 由所有数据集和内部元数据分配的空间量。请

AVAILABLE 池中未分配的空间量。

CAPACITY (CAP) 已用空间量,以总空间的百分比表示。

HEALTH 池的当前运行状况。

ALTROOT 池的备用根(如果有)。

可以使用 -o 选项请求特定的统计信息。使用此选项可以生成自定义报告或快速列出相关信息。例如,要仅列出每个池的名称和大小,可使用以下语法:

# zpool list -o name,size

NAME SIZE

cjhzpool 238M

zfstest1 59.5M

(6)查看 ZFS 存储池 I/O 统计信息

要请求池或特定虚拟设备的 I/O 统计信息,请使用 zpool iostat 命令。它与 iostat 命令类似,此命令也可以显示目前为止所有 I/O 活动的静态快照,以及每个指定时间间隔的更新统计信息。如果不使用任何选项,则 zpool iostat 命令会显示自引导以来系统中所有池的累积统计信息。如图3 。

图3查看 ZFS 存储池 I/O 统计信息

图3输出显示了以下信息:

USED CAPACITY 当前存储在池或设备中的数据量。由于具体的内部实现的原因,此数字与可供实际文件系统使用的空间量有少量差异。

AVAILABLE CAPACITY 池或设备中的可用空间量。与 used 统计信息一样,这与可供数据集使用的空间量也有少量差异。

READ OPERATIONS 发送到池或设备的读取 I/O 操作数,包括元数据请求。

WRITE OPERATIONS 发送到池或设备的写入 I/O 操作数。

READ BANDWIDTH 所有读取操作(包括元数据)的带宽,以每秒单位数表示。

WRITE BANDWIDTH 所有写入操作的带宽,以每秒单位数表示。

(7)确定 ZFS 存储池的运行状况

ZFS 提供了一种检查池和设备运行状况的集成方法。池的运行状况是根据其所有设备的状态确定的。使用 zpool status 命令可以显示如图4 信息。

图4确定 ZFS 存储池的运行状况

每个设备都可以处于以下状态之一:

ONLINE 设备处于正常工作状态。尽管仍然可能会出现一些瞬态错误,但是设备在其他方面处于正常工作状态。

DEGRADED 虚拟设备出现故障,但仍能够工作。此状态在镜像或 RAID-Z 设备缺少一个或多个组成设备时最为常见。池的容错能力可能会受到损害,因为另一个设备中的后续故障可能无法恢复。

FAULTED 虚拟设备完全无法访问。此状态通常表示设备出现全面故障,以致于 ZFS 无法向该设备发送数据或从该设备接收数据。如果顶层虚拟设备处于此状态,则完全无法访问池。

OFFLINE 管理员已将虚拟设备显式脱机。

UNAVAILABLE 无法打开设备或虚拟设备。在某些情况下,包含 UNAVAILABLE 设备的池会以 DEGRADED 模式显示。

REMOVED 系统正在运行时已物理移除了该设备。设备移除检测依赖于硬件,而且并非在所有平台上都受支持。

对系统中所有存储池进行健康查询,使用命令:

# zpool status -x

all pools are healthy

表示所有池运行状况良好。

显示一个存储池的详细情况

#zfs get all cjhzpool如图5 。

图5显示一个存储池的详细情况

(8)ZFS文件系统快照管理

ZFS文件系统快照简介

ZFS 利用写复制 (copy-on-write, COW) 机制来存储数据,并且几乎可以作为数据存储的副效应来生成快照。COW 在将新数据写入磁盘前会读入旧数据。之后,COW 会将旧数据写入某个新位置以供快照使用。此读取和复制数据的过程同时适用于用户数据和文件系统的专用数据(元数据)。任何后续写入操作都将导致通过 COW 机制分配新块,因此永远不会修改组成快照的那些块。

从本质上而言,从某个备份进行恢复的步骤与从传统备份恢复的步骤是一样的:

重建文件系统。

恢复完整备份。

恢复每个增量备份。

可以创建某个特定快照的克隆(副本)。克隆指一个其初始内容与某个快照的内容相同的文件系统。正如可以修改其他文件系统属性一样,可以修改克隆的属性和内容。

使用命令创建和删除ZFS快照

我们使用zfs snapshot命令来创建快照,这个命令只有一个变量就是快照的名字。快照名字如下所示:

filesystem@snapname

volume@snapname

创建快照

# zfs snapshot zfstest1@cjh

通过使用 -r 选项可为所有后代文件系统创建快照。

# zfs snapshot -r zfstest1@cjh

然后使用命令查看所有快照,如图6 。

# zfs list -t snapshot

图6 使用命令查看所有快照

说明:快照不能被修改属性,也不能使数据集的属性应用到快照上。

请使用zfs destroy命令删除快照。

删除快照

# zfs destroy zfstest1@cjh

在快照存在的情况下,数据集不能被删除。另外,如果存在快照的克隆,也不能删除数据集。

恢复到最初的快照

使用zfs rollback命令能使快照放弃所有的改变,恢复到建立快照的最初状态。如果有些最近的快照的话,使用?-r选项能强制删除这些快照,而恢复到最初的快照。

恢复pool/home/ahrens文件系统的星期二的快照。

# zfs rollback pool/home/ahrens@tuesday

linux内核zfs,Linux使用ZFS文件系统相关推荐

  1. linux内核 fat,微软宣布exFAT文件系统规范,希望被Linux内核接纳

    对于那些经常需要在 Linux 和 Windows 10 之间切换工作的人们来说,作为 FAT32 继任者的 exFAT 文件系统,能够为用户带来更好的体验.近日,微软宣布了 exFAT 文件系统规范 ...

  2. 【Linux 内核】Linux 操作系统结构 ( Linux 内核在操作系统中的层级 | Linux 内核子系统及关系 | 进程调度 | 内存管理 | 虚拟文件系统 | 网络管理 | 进程间通信 )

    文章目录 一.Linux 内核在操作系统中的层级 二.Linux 内核子系统 三.Linux 内核子系统之间的关系 一.Linux 内核在操作系统中的层级 Linux 内核 所在层级 : 整个计算机系 ...

  3. 【Linux 内核】Linux 内核特性 ( 组织形式 | 进程调度 | 内核线程 | 多平台虚拟内存管理 | 虚拟文件系统 | 内核模块机制 | 定制系统调用 | 网络模块架构 )

    文章目录 一.Linux 内核特性 1.Linux 内核组织形式 2.Linux 进程调度 3.Linux 内核线程 4.Linux 内核多平台虚拟内存管理 5.Linux 虚拟文件系统 6.Linu ...

  4. Linux系统 proc self,Linux内核源代码情形分析-特殊文件系统/proc-对/proc/self/cwd的访问...

    Linux内核源代码情景分析-特殊文件系统/proc-对/proc/self/cwd的访问 继上篇文章Linux内核源代码情景分析-特殊文件系统/proc,我们对/proc/loadavg访问后,这篇 ...

  5. linux 虚拟文件系统 源码,Linux内核源代码情状分析-虚拟文件系统

    Linux内核源代码情景分析-虚拟文件系统 我们先来看两张图: 第一张是VFS与具体文件系统的关系示意图: 第二张是Linux文件系统的层次结构: 特殊文件:用来实现"管道"的文件 ...

  6. linux内核和发行版本的关系,简述Linux内核和Linux发行版的区别

    做服务器运维工作,要经常和Linux的版本号打交道,但一直搞不明白Linux内核和Linux发行版到底是个啥东西.其实要理解Linux内核和Linux发行版之间的关系,只要能理解下面的关系就可以了: ...

  7. 国嵌linux内核编程,linux内核--那些年看国嵌视频学习

    1.linux系统构成 由用户空间和内核空间构成.其中用户空间由应用程序和C库:内核空间由系统调用接口.kernel.架构代码.硬件设备平台 为什么linux系统会被划分为用户空间和内核空间?处于安全 ...

  8. 一文看懂Linux内核!Linux内核架构和工作原理详解

    linux内核相关视频解析: 5个方面分析linux内核架构,让你对内核不再陌生 90分钟了解Linux内存架构,numa的优势,slab的实现,vmalloc的原理 手把手带你实现一个Linux内核 ...

  9. 深度:一文看懂Linux内核!Linux内核架构和工作原理详解

    简介 作用是将应用层序的请求传递给硬件,并充当底层驱动程序,对系统中的各种设备和组件进行寻址.目前支持模块的动态装卸(裁剪).Linux内核就是基于这个策略实现的.Linux进程1.采用层次结构,每个 ...

  10. 【Linux 内核】Linux 内核源码目录说明 ① ( arch 目录 | block 目录 | certs 目录 | crypto 目录 | Documentation 目录 )

    文章目录 一.arch 目录 二.block 目录 三.certs 目录 四.crypto 目录 五.Documentation 目录 在上一篇博客 [Linux 内核]Linux 内核源码结构 ( ...

最新文章

  1. Android服务之Service(其一)
  2. 电液伺服系统_电液伺服系统的误差/偏差以及开环增益
  3. vue --- 按钮的防重复点击事件
  4. MySQL 19个规则数据库设计总结
  5. python抽取数据库元数据_0797-使用HDP或CDP的Atlas采集CDH6的元数据和血缘
  6. 基于QItemDelegate的例子1 SpinBoxDelegate
  7. python实用库_python常用库
  8. 【“零起点”--百度地图手机SDK】如何创建一张地图
  9. [转载] Java:简述Java中的自定义异常
  10. centen os7 源码安装git2.17.0
  11. 多态在 Java 和 C++ 编程语言中的实现比较
  12. dual mysql 获取序列_如何获取 MySQL 插入数据的自增 ID
  13. 为什么勒索软件的预防如此重要?
  14. Cortex-M0和Cortex-M0+简介
  15. 中职计算机应用和平面设计,中等职业教育十一五规划教材·中职中专计算机类教材系列·Photoshop平面设计与实训...
  16. TT 的旅行日记 Week7作业B题
  17. 从神经搜索到多模态应用
  18. inno setup 卸载注册表_inno setup 修改卸载文件名称
  19. 抖音短视频内容该如何创作
  20. 深兰科技亮相2022世界人工智能大会:AI创新,共话未来城市建设

热门文章

  1. Linux有几种系列的发行版本?
  2. 脑机接口研究内容思维导图
  3. mv强制覆盖 shell_shell mv命令
  4. 如何进入BAT等IT名企
  5. 高效搜索引擎使用小技巧
  6. 由货币的时间价值所想
  7. Windows快捷键及Win+R后各命令
  8. 3G模块SIM5360E 实现拨号上网功能
  9. 微信小程序web-view公众号与小程序支付的切换使用
  10. 计算机不能取代老师的英语作文,雅思大作文范文电脑替代老师