在Debian 8.8安装使用zfs文件系统
引言
ZFS文件系统的英文名称为ZettabyteFileSystem,也叫动态文件系统(DynamicFileSystem),是第一个128位文件系统。最初是由Sun公司为Solaris10操作系统开发的文件系统。作为OpenSolaris开源计划的一部分,ZFS于2005年11月发布,被Sun称为是终极文件系统,经历了10年的活跃开发,而最新的开发将全面开放,并重新命名为OpenZFS。
ZFS优势
- ZFS是一种先进的、高度可扩展的文件系统,最初是由Sun Microsystems开发的,现在OpenZFS是项目的一部分。有这么多文件系统可用在Linux上,那自然要问ZFS有什么特别之处。不同于其它文件系统,它不仅是一个文件系统逻辑卷管理器。ZFS使其受欢迎的特性是:
- 数据完整性——数据一致性和完整性通过即写即拷和校验技术保证。
- 存储空间池——可用存储驱动器一起放入称为zpool的单个池。
- 软件RAID ——像发出一个命令一样,建立一个raidz数组。
- 内置的卷管理器——ZFS充当卷管理器。
- Snapshots、克隆、压缩——这些都是一些ZFS提供的高级功能。
安装ZFS
在这篇文章中,我们将学习在Debian 8.8上安装、设置和使用ZFS文件系统。
根据网站www.zfsonlinux.org的信息 ,ZFS仅支持AMD64和Intel 64位架构(amd64)。 让我们开始安装。
1、更新Debian系统
在Debian8中,zfs软件包已经加入debian backports源
首先我们需要在系统中启用backports源,并更新系统
echo "deb http://ftp.debian.org/debian jessie-backports main contrib" /etc/apt/sources.list.d/backports.list aptitiude update apititiude upgrade
2、安装zfs
安装kernel headers
aptitiude install linux-headers-$(uname -r)
安装 zfs-dkms
aptitiude install -t jessie-backports zfs-dkms
如果需要在在根分区使用zfs,你需要安装zfs-initramfs
aptitiude install -t jessie-backports zfs-initramfs
3、创建和配置池
服务器重新启动后,检查zfsonlinux是否安装并运行良好。
# dpkg -l | grep zfs ii debian-zfs 7~jessie amd64 Native ZFS filesystem metapackage for Debian. ii libzfs2 0.6.5.2-2 amd64 Native ZFS filesystem library for Linux ii zfs-dkms 0.6.5.2-2 all Native ZFS filesystem kernel modules for Linux ii zfsonlinux 6 all archive.zfsonlinux.org trust package ii zfsutils 0.6.5.2-2 amd64 command-line tools to manage ZFS filesystems
上面的结果显示,linux上的zfs已经安装好了,所以我们可以继续创建第一个池。
我已经为这台服务器添加了五个磁盘,每个磁盘的大小为2GB。 我们可以使用以下命令检查可用磁盘:
# ls /dev/sd* /dev/sda /dev/sda1 /dev/sda2 /dev/sda5 /dev/sdb /dev/sdc /dev/sdd /dev/sde /dev/sdf /dev/sdg
我们可以看到/ dev / sda直到/ dev / sdg , / dev / sda用于操作系统Debian Linux Jessie 8.1。 我们将使用/ dev / sdb直到/ dev / sdg为ZFS文件系统。
现在我们可以开始创建池,第一个我会告诉你如何创建一个raid0(条带)。
# zpool list no pools available # zpool create -f pool0 /dev/sdb # zpool list NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT pool0 1.98G 64K 1.98G – 0% 0% 1.00x ONLINE –
命令“zpool list”表示我们成功创建了一个raid0 zfs池,池名为pool0 ,大小为2GB。
接下来我们将创建一个raid1(镜像)与其他磁盘。
# zpool create -f pool1 mirror /dev/sdc /dev/sdd # zpool list NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT pool0 1.98G 64K 1.98G – 0% 0% 1.00x ONLINE – pool1 1.98G 64K 1.98G – 0% 0% 1.00x ONLINE –
我们可以看到我们现在有两个池, pool0为raid0, pool1为raid1。
要检查池的状态,我们可以使用以下命令:
# zpool status pool: pool0 state: ONLINE scan: none requested config: NAME STATE READ WRITE CKSUM pool0 ONLINE 0 0 0 sdb ONLINE 0 0 0 errors: No known data errors pool: pool1 state: ONLINE scan: none requested config: NAME STATE READ WRITE CKSUM pool1 ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 sdc ONLINE 0 0 0 sdd ONLINE 0 0 0 errors: No known data errors
我们可以使用“zpool status”命令检查池状态。 我们可以看到pool0和pool1之间的区别,pool0只有一个磁盘,pool1有两个磁盘,磁盘状态为mirror(mirror-0)。
接下来,我们将使用RAID-Z创建一个池,RAID-Z是像RAID-5这样的数据/奇偶校验分配方案,但它使用动态条带宽度:每个块都具有自己的RAID条带,无论块大小如何,导致每个RAID-Z写入都是全条带写入。
RAID-Z需要至少三个硬盘驱动器,并且是RAID 0和RAID 1之间的妥协。在RAID-Z池中:如果池中的单个磁盘死机,则只需替换该磁盘,ZFS将自动重建数据基于来自其他磁盘的奇偶校验信息。 要松开存储池中的所有信息,两个磁盘将不得不死亡。 为了使驱动器设置更加冗余,您可以使用RAID 6(在ZFS情况下为RAID-Z2)获得双重奇偶校验。
我们先创建一个奇偶校验的RAID-Z池。
# zpool create -f poolz1 raidz sde sdf sdg # zpool list poolz1 NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT poolz1 5.94G 117K 5.94G – 0% 0% 1.00x ONLINE – # zpool status poolz1 pool: poolz1 state: ONLINE scan: none requested config: NAME STATE READ WRITE CKSUM poolz1 ONLINE 0 0 0 raidz1-0 ONLINE 0 0 0 sde ONLINE 0 0 0 sdf ONLINE 0 0 0 sdg ONLINE 0 0 0 errors: No known data errors # df -h /poolz1 Filesystem Size Used Avail Use% Mounted on poolz1 3.9G 0 3.9G 0% /poolz1
我们可以看到,df -h显示我们的6GB池已经减少到4GB,2GB被用于保存奇偶校验信息。 使用zpool status命令,我们看到我们的池现在正在使用RAID-Z。
接下来我们将创建RAID-Z2(raid 6),为此,我们必须删除现有的池,因为没有更多的磁盘可用。 删除池很容易,我们可以使用zpool destroy命令。
# zpool list NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT pool0 1.98G 64K 1.98G – 0% 0% 1.00x ONLINE – pool1 1.98G 64K 1.98G – 0% 0% 1.00x ONLINE – poolz1 5.94G 117K 5.94G – 0% 0% 1.00x ONLINE – # zpool destroy pool0 # zpool destroy pool1 # zpool destroy poolz1 # zpool list no pools available
现在我们所有的zpool都没有了,所以我们可以创建一个RAID-Z2池。
# zpool create poolz2 raidz2 sdb sdc sdd sde # zpool list NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT poolz2 7.94G 135K 7.94G – 0% 0% 1.00x ONLINE – # df -h /poolz2 Filesystem Size Used Avail Use% Mounted on poolz2 3.9G 0 3.9G 0% /poolz2 # zpool status poolz2 pool: poolz2 state: ONLINE scan: none requested config: NAME STATE READ WRITE CKSUM poolz2 ONLINE 0 0 0 raidz2-0 ONLINE 0 0 0 sdb ONLINE 0 0 0 sdc ONLINE 0 0 0 sdd ONLINE 0 0 0 sde ONLINE 0 0 0 errors: No known data errors
我们可以看到,df -h显示,我们的8GB池已经减少到4GB,因为4GB被用于持有奇偶校验信息两次。 使用“zpool status”命令,我们看到我们的池现在使用RAID-Z2。
4、创建和配置ZFS文件系统
在下一步中,我们将创建和配置ZFS文件系统。
# zfs list NAME USED AVAIL REFER MOUNTPOINT poolz2 105K 3.83G 26.1K /poolz2
我们已经有一个ZFS文件系统,当我们创建zpool时,这个文件系统会自动添加。 现在我们将创建另一个ZFS文件系统。
# zfs create poolz2/tank # zfs list NAME USED AVAIL REFER MOUNTPOINT poolz2 132K 3.83G 26.1K /poolz2 poolz2/tank 25.4K 3.83G 25.4K /poolz2/tank # df -h | grep poolz2 poolz2 3.9G 128K 3.9G 1% /poolz2 poolz2/tank 3.9G 128K 3.9G 1% /poolz2/tank
我们创建一个名为tank的新的ZFS文件系统,并自动将其安装为/ poolz2 / tank 。
如何为ZFS文件系统创建自定义安装点? 使用以下命令:
# zfs create poolz2/data -o mountpoint=/data # df -h | grep poolz2 poolz2 3.9G 0 3.9G 0% /poolz2 poolz2/tank 3.9G 0 3.9G 0% /poolz2/tank poolz2/data 3.9G 0 3.9G 0% /data
如何修改现有的mountpoint? 我们可以通过以下命令来做到这一点:
# zfs set mountpoint=/tank poolz2/tank # df -h | grep poolz2 poolz2 3.9G 0 3.9G 0% /poolz2 poolz2/data 3.9G 0 3.9G 0% /data poolz2/tank 3.9G 0 3.9G 0% /tank
要安装和卸载文件系统,请使用以下命令:
# zfs unmount /data # df -h | grep poolz2 poolz2 3.9G 0 3.9G 0% /poolz2 poolz2/tank 3.9G 0 3.9G 0% /tank # zfs mount poolz2/data # df -h | grep poolz2 poolz2 3.9G 0 3.9G 0% /poolz2 poolz2/tank 3.9G 0 3.9G 0% /tank poolz2/data 3.9G 0 3.9G 0% /data
删除zfs文件系统非常容易,我们可以使用命令zfs destroy来进行。
# zfs destroy poolz2/data # zfs list NAME USED AVAIL REFER MOUNTPOINT poolz2 152K 3.83G 26.1K /poolz2 poolz2/tank 25.4K 3.83G 25.4K /tank
文件系统/数据已经没了。
结论
ZFS文件系统是一个革命性的新文件系统,从根本上改变了在类Unix操作系统上管理文件系统的方式。 ZFS提供了在今天可用的任何其他文件系统中找不到的功能和优点。 ZFS是强大的,可扩展的,易于管理。