标签: debian

  • 在Debian 8.8安装使用zfs文件系统

    引言

    ZFS文件系统的英文名称为ZettabyteFileSystem,也叫动态文件系统(DynamicFileSystem),是第一个128位文件系统。最初是由Sun公司为Solaris10操作系统开发的文件系统。作为OpenSolaris开源计划的一部分,ZFS于2005年11月发布,被Sun称为是终极文件系统,经历了10年的活跃开发,而最新的开发将全面开放,并重新命名为OpenZFS。

    ZFS优势

    1. ZFS是一种先进的、高度可扩展的文件系统,最初是由Sun Microsystems开发的,现在OpenZFS是项目的一部分。有这么多文件系统可用在Linux上,那自然要问ZFS有什么特别之处。不同于其它文件系统,它不仅是一个文件系统逻辑卷管理器。ZFS使其受欢迎的特性是:
    2.  数据完整性——数据一致性和完整性通过即写即拷和校验技术保证。
    3. 存储空间池——可用存储驱动器一起放入称为zpool的单个池。
    4. 软件RAID ——像发出一个命令一样,建立一个raidz数组。
    5. 内置的卷管理器——ZFS充当卷管理器。
    6. 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是强大的,可扩展的,易于管理。