Linux学习之文件系统zfs文件系统

ZFS(Zettabyte File System)一个打破过去思维的文件系统,是 Sun Microsystems这家公司所开发出来的全新型态文件系统,因为License的问题所以目前只有在Solaris、Mac、BSD上看得到,ZFS是128bit的文件系统,而它到底有多强呢?别再等待了马上用了你就知道,只能说ZFS真是一个上帝赐给IT人员的好礼物。

为什么选择 ZFS

ZFS 非常的优秀。这是一个真正现代的文件系统,内置的功能对于处理大量的数据很有意义。
ZFS 消除了建立传统 RAID 阵列(独立磁盘冗余阵列)的需要。 相反,您可以创建 ZFS 池,甚至可以随时将驱动器添加到这些池中。 ZFS 池的行为操作与 RAID 几乎完全相同,但功能内置于文件系统中。
ZFS 也可以替代 LVM (逻辑盘卷管理),使您能够动态地进行分区和管理分区,而无需处理底层的细节,也不必担心相关的风险。
这也是一个 CoW (写时复制)文件系统。 这里不会提及太多的技术性,这意味着 ZFS 可以保护您的数据免受逐渐损坏的影响。 ZFS 会创建文件的校验和,并允许您将这些文件回滚到以前的工作版本。

安装 ZFS

在 Ubuntu 上安装 ZFS 非常简单,但对于 最新版本来说,这个 稍有不同。

# Ubuntu 16.04 LTS
sudo apt install zfs

# Ubuntu 17.04 及以后
sudo apt install zfsutils

zfs 中的 池,集,卷术语

ZFS有三个概念:

  1. Z池 - zpool

  2. Z集 - dataset

  3. Z卷 - volume

Z池 zpool create local /dev/sdb /dev/sdc /dev/sdd /dev/sde 这就创建了一个名叫local的Z池,Z池有如下类型:raid1,raid0, raid5,raid6 等。

Z集 当一个Z池创建出来,附带有一个同名的Z集也创建出来了,这里就是 叫 local 这个。注意这个Z集挂载在/local, 这个目录可以做一个正常的目录来用,可以在Z集上创建新的Z集:zfs create local/data

Z卷 创建Z卷:zfs create -V 10G local/vda Z卷是一个块设备,可以按需要分区,格式化:mkfs.xfs /dev/zvol/local/vda

创建池

在 ZFS 中,池大致相当于 RAID 。 它们很灵活且易于操作。
在这里插入图片描述

RAID0

#RAID0 只是把你的硬盘集中到一个池子里面,就像一个巨大的驱动器一样。 它可以提高你的驱动器速度,但是如果你的驱动器有损坏,你可能会失丢失数据。


sudo zpool create your-pool /dev/sdc /dev/sdd

RAID1(镜像)

您可以在 ZFS 中使用 mirror 关键字来实现 RAID1 功能。 RAID1 会创建一个一对一的驱动器副本。 这意味着您的数据一直在备份。 它也提高了性能。 当然,你将一半的存储空间用于了复制。

sudo zpool create your-pool mirror /dev/sdc /dev/sdd

RAID5/RAIDZ1

ZFS 将 RAID5 功能实现为 RAIDZ1。 RAID5 要求驱动器至少是 3 个。
并允许您通过将备份奇偶校验数据写入驱动器空间的 1/n(n 是驱动器数),留下的是可用的存储空间。
如果一个驱动器发生故障,阵列仍将保持联机状态,但应尽快更换发生故障的驱动器。

sudo zpool create your-pool raidz1 /dev/sdc /dev/sdd /dev/sde

RAID6/RAIDZ2

RAID6 与 RAID5 几乎完全相同,但它至少需要四个驱动器。 它将奇偶校验数据加倍,最多允许两个驱动器损坏,而不会导致阵列关闭。

sudo zpool create your-pool raidz2 /dev/sdc /dev/sdd /dev/sde /dev/sdf

RAIDZ3
3奇偶校验位,允许在丢失数据之前发生3个磁盘故障,性能与RAIDZ2和RAIDZ类似。例如,创建3奇偶校验6 VDEV池:

sudo zpool create example raidz3 /dev/sdb /dev/sdc /dev/sdd /dev/sde /dev/sdf /dev/sdg

RAID10(条带化镜像)

RAID10 旨在通过数据条带化提高存取速度和数据冗余来成为一个两全其美的解决方案。 你至少需要四个驱动器,但只能使用一半的空间。 您可以通过在同一个池中创建两个镜像来创建 RAID10 中的池。

sudo zpool create your-pool mirror /dev/sdc /dev/sdd mirror /dev/sde /dev/sdf
或者
sudo zpool create example mirror /dev/sdb /dev/sdc
sudo zpool add example mirror /dev/sdd /dev/sde

嵌套RAIDZ (RAID50, RAID60)

$ sudo zpool create example raidz /dev/sdb /dev/sdc /dev/sdd /dev/sde
$ sudo zpool add example raidz /dev/sdf /dev/sdg /dev/sdh /dev/sdi

还有一些管理工具,一旦你创建了你的池,你就必须使用它们来操作。 首先,检查你的池的状态。

sudo zpool status

当你更新 ZFS 时,你也需要更新你的池。 当您检查它们的状态时,您的池会通知您任何更新。 要更新池,请运行以下命令。

sudo zpool upgrade your-pool

你也可以更新全部池。

sudo zpool upgrade -a

您也可以随时将驱动器添加到池中。 告诉 zpool 池的名称和驱动器的位置,它会处理好一切。

sudo zpool add your-pool /dev/sdx

如果您想破坏池,则可以使用以下命令

sudo zpool destroy pool-name

创建数据集

当我们创建池的时候,默认就会有个同名的集了。
例如这样创建一个池,bash sudo zpool create work /dev/sd{b,c,d,e,f,g}1成功之后就会有个 叫 work 的数据集了。

~$ zfs list
NAME   USED  AVAIL     REFER  MOUNTPOINT
work   102K  10.5T       24K  /work

默认的还有挂载点 也会是/work, 当然可以修改,创建的时候就指定 加上-m参数。后续更改使用命令:zfs set mountpoint=/fourth work

我们创建其他的数据集

~$ sudo zfs create work/buildfarm

~$ ll /work/
total 5
drwxr-xr-x  3 root root    3 Mar 15 06:37 ./
drwxr-xr-x 21 root root 4096 Mar 15 06:16 ../
drwxr-xr-x  2 root root    2 Mar 15 06:37 buildfarm/

~$ zfs list
NAME             USED  AVAIL     REFER  MOUNTPOINT
work             136K  10.5T       24K  /work
work/buildfarm    24K  10.5T       24K  /work/buildfarm

创建命令就是类似这样的:zfs create name_of_pool/name_of_dataset,这和创建子目录很像。还可以继续创建个子集
zfs create work/buildfarm/code
和创建多级目录类似,如果父目录不存在加上-p选项。

sudo zfs create work/
  • 3
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值