首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >ZFS存储池使用指南

ZFS存储池使用指南

作者头像
杜金房
发布2026-06-15 16:54:42
发布2026-06-15 16:54:42
1020
举报

ZFS 的全称是 Zettabyte File System,它被誉为“最后一个文件系统”。ZFS 不仅仅是一个传统的文件系统,它集成了卷管理器、RAID 控制器、快照、数据校验、压缩和去重等众多高级功能,是一个革命性的存储解决方案。

使用的系统

代码语言:javascript
复制
➜  ~ uname -a
FreeBSD freebsd 14.1-RELEASE-p7 FreeBSD 14.1-RELEASE-p7 GENERIC amd64

如何创建存储池

查看系统上的硬盘

首先我们查看下系统上有哪些硬盘,使用geom disk list可以查看系统上硬盘列表。

代码语言:javascript
复制
➜  ~ geom disk list
Geom name: cd0
Providers:
1. Name: cd0
   Mediasize: 4588224512 (4.3G)
   Sectorsize: 2048
   Mode: r0w0e0
   descr: NECVMWar VMware SATA CD00
   ident: (null)
   rotationrate: unknown
   fwsectors: 0
   fwheads: 0
Geom name: ada0
Providers:
1. Name: ada0
   Mediasize: 21474836480 (20G)
   Sectorsize: 512
   Mode: r0w0e0
   descr: VMware Virtual IDE Hard Drive
   lunid: 5000c29c9cf61ff9
   ident: 10000000000000000001
   rotationrate: 0
   fwsectors: 63
   fwheads: 15
Geom name: ada1
Providers:
1. Name: ada1
   Mediasize: 21474836480 (20G)
   Sectorsize: 512
   Mode: r0w0e0
   descr: VMware Virtual SATA Hard Drive
   lunid: 5000c29b7087779c
   ident: 01000000000000000001
   rotationrate: 0
   fwsectors: 63
   fwheads: 15
Geom name: ada2
Providers:
1. Name: ada2
   Mediasize: 21474836480 (20G)
   Sectorsize: 512
   Mode: r0w0e0
   descr: VMware Virtual SATA Hard Drive
   lunid: 5000c291256cbeac
   ident: 02000000000000000001
   rotationrate: 0
   fwsectors: 63
   fwheads: 15
Geom name: ada3
Providers:
1. Name: ada3
   Mediasize: 21474836480 (20G)
   Sectorsize: 512
   Mode: r0w0e0
   descr: VMware Virtual SATA Hard Drive
   lunid: 5000c29eb727914f
   ident: 03000000000000000001
   rotationrate: 0
   fwsectors: 63
   fwheads: 15
Geom name: ada4
Providers:
1. Name: ada4
   Mediasize: 21474836480 (20G)
   Sectorsize: 512
   Mode: r0w0e0
   descr: VMware Virtual SATA Hard Drive
   lunid: 5000c29383fbb0c1
   ident: 04000000000000000001
   rotationrate: 0
   fwsectors: 63
   fwheads: 15
Geom name: da1
Providers:
1. Name: da1
   Mediasize: 32212254720 (30G)
   Sectorsize: 512
   Stripesize: 1048576
   Stripeoffset: 0
   Mode: r0w0e0
   descr: VMware Virtual disk
   ident: (null)
   rotationrate: 0
   fwsectors: 63
   fwheads: 255
Geom name: da0
Providers:
1. Name: da0
   Mediasize: 52613349376 (49G)
   Sectorsize: 512
   Stripesize: 4096
   Stripeoffset: 0
   Mode: r2w2e3
   descr: VMware Virtual disk
   ident: (null)
   rotationrate: 0
   fwsectors: 63
   fwheads: 255

创建一个基本存储池

下面的命令我们创建了一个基本存储池,数据通过这两个磁盘以动态方式进行条带化。

代码语言:javascript
复制
zpool create -f diskz ada0 ada1

查看下磁盘信息,创建的diskz会自动挂载。我们也可以修改存储池的altroot属性修改位置。

查看存储池

zpool list可以列出系统上的存储池列表。

代码语言:javascript
复制
➜  ~ zpool list          
NAME    SIZE  ALLOC   FREE  CKPOINT  EXPANDSZ   FRAG    CAP  DEDUP    HEALTH  ALTROOT
diskz    39G   384K  39.0G        -         -     0%     0%  1.00x    ONLINE  -
zroot  46.5G  6.01G  40.5G        -         -     0%    12%  1.00x    ONLINE  -

查看存储池状态信息

代码语言:javascript
复制
➜  ~ zpool status diskz
  pool: diskz
 state: ONLINE
config:

        NAME        STATE     READ WRITE CKSUM
        diskz       ONLINE       0     0     0
          ada0      ONLINE       0     0     0
          ada1      ONLINE       0     0     0

errors: No known data errors

查看存储池参数信息

使用zpool get all diskz可以查看存储池的参数信息。可以看到参数非常之多,也证明了ZFS的强大功能。

代码语言:javascript
复制
➜  ~ zpool get all diskz
NAME   PROPERTY                       VALUE                          SOURCE
diskz  size                           39G                            -
diskz  capacity                       0%                             -
diskz  altroot                        -                              default
diskz  health                         ONLINE                         -
diskz  guid                           14365178456510238208           -
diskz  version                        -                              default
diskz  bootfs                         -                              default
diskz  delegation                     on                             default
diskz  autoreplace                    off                            default
diskz  cachefile                      -                              default
diskz  failmode                       wait                           default
diskz  listsnapshots                  off                            default
diskz  autoexpand                     off                            default
diskz  dedupratio                     1.00x                          -
diskz  free                           39.0G                          -
diskz  allocated                      384K                           -
diskz  readonly                       off                            -
diskz  ashift                         0                              default
diskz  comment                        -                              default
diskz  expandsize                     -                              -
diskz  freeing                        0                              -
diskz  fragmentation                  0%                             -
diskz  leaked                         0                              -
diskz  multihost                      off                            default
diskz  checkpoint                     -                              -
diskz  load_guid                      16804288557441977596           -
diskz  autotrim                       off                            default
diskz  compatibility                  off                            default
diskz  bcloneused                     0                              -
diskz  bclonesaved                    0                              -
diskz  bcloneratio                    1.00x                          -
diskz  feature@async_destroy          enabled                        local
diskz  feature@empty_bpobj            enabled                        local
diskz  feature@lz4_compress           active                         local
diskz  feature@multi_vdev_crash_dump  enabled                        local
diskz  feature@spacemap_histogram     active                         local
diskz  feature@enabled_txg            active                         local
diskz  feature@hole_birth             active                         local
diskz  feature@extensible_dataset     active                         local
diskz  feature@embedded_data          active                         local
diskz  feature@bookmarks              enabled                        local
diskz  feature@filesystem_limits      enabled                        local
diskz  feature@large_blocks           enabled                        local
diskz  feature@large_dnode            enabled                        local
diskz  feature@sha512                 enabled                        local
diskz  feature@skein                  enabled                        local
diskz  feature@edonr                  enabled                        local
diskz  feature@userobj_accounting     active                         local
diskz  feature@encryption             enabled                        local
diskz  feature@project_quota          active                         local
diskz  feature@device_removal         enabled                        local
diskz  feature@obsolete_counts        enabled                        local
diskz  feature@zpool_checkpoint       enabled                        local
diskz  feature@spacemap_v2            active                         local
diskz  feature@allocation_classes     enabled                        local
diskz  feature@resilver_defer         enabled                        local
diskz  feature@bookmark_v2            enabled                        local
diskz  feature@redaction_bookmarks    enabled                        local
diskz  feature@redacted_datasets      enabled                        local
diskz  feature@bookmark_written       enabled                        local
diskz  feature@log_spacemap           active                         local
diskz  feature@livelist               enabled                        local
diskz  feature@device_rebuild         enabled                        local
diskz  feature@zstd_compress          enabled                        local
diskz  feature@draid                  enabled                        local
diskz  feature@zilsaxattr             enabled                        local
diskz  feature@head_errlog            active                         local
diskz  feature@blake3                 enabled                        local
diskz  feature@block_cloning          enabled                        local
diskz  feature@vdev_zaps_v2           active                         local

销毁存储池

使用zpool destroy命令可以销毁存储池。

代码语言:javascript
复制
➜  ~ zpool destroy diskz

创建镜像存储池

开始我们创建的是基本存储池,接下来我们创建一个镜像存储池,镜像存储池可以在每个磁盘上创建冗余数据。在下面的命令中,我们指定了mirror参数。

代码语言:javascript
复制
➜  ~ zpool create -f diskz_mirror mirror ada0 ada1

➜  ~ zpool status diskz_mirror
  pool: diskz_mirror
 state: ONLINE
config:

        NAME          STATE     READ WRITE CKSUM
        diskz_mirror  ONLINE       0     0     0
          mirror-0    ONLINE       0     0     0
            ada0      ONLINE       0     0     0
            ada1      ONLINE       0     0     0

errors: No known data errors

创建RAID-Z存储池

创建单奇偶校验 RAID-Z 池与创建镜像池基本相同,不同之处是使用 raidz 或 raidz1 关键字而不是 mirror。

代码语言:javascript
复制
➜  ~ zpool create diskz raidz ada0 ada1 ada2 

➜  ~ zpool status diskz
  pool: diskz
 state: ONLINE
config:

        NAME        STATE     READ WRITE CKSUM
        diskz       ONLINE       0     0     0
          raidz1-0  ONLINE       0     0     0
            ada0    ONLINE       0     0     0
            ada1    ONLINE       0     0     0
            ada2    ONLINE       0     0     0

errors: No known data errors

存储池常用属性

readonly属性

该属性指示存储池是否是只读的。我们查看下前面创建的diskz存储池,可以看到该属性默认是关闭的。

代码语言:javascript
复制
➜  ~ zpool get readonly diskz
NAME   PROPERTY  VALUE   SOURCE
diskz  readonly  off     -

修改readonly属性,将存储池设置为只读。

代码语言:javascript
复制
# 可以看到直接无法设置,可以在import时候设置该属性
➜  ~ zpool set readonly=on diskz
cannot set property for 'diskz': property 'readonly' can only be set at import time

# 导出存储池,类似于umount命令
➜  ~ zpool export diskz

# 导入存储池,并设置readonly属性,类似mount命令
➜  ~ zpool import -o readonly=on diskz

# 查看存储池状态,可以看到readonly属性已经设置为on
➜  ~ zpool get readonly diskz         
NAME   PROPERTY  VALUE   SOURCE
diskz  readonly  on      -

# 测试确实无法写入文件
➜  ~ cd /diskz 
➜  /diskz ifconfig > ifconfig.txt
zsh: read-only file system: ifconfig.txt

comment属性

该属性用于描述存储池的用途,默认是空的。

代码语言:javascript
复制
➜  ~ zpool set comment="This is a description" diskz

➜  ~ zpool get comment diskz
NAME   PROPERTY  VALUE                  SOURCE
diskz  comment   This is a description  local

总结

  • zpool create命令用于创建存储池,可以指定存储池名称和存储设备
  • zpool destroy命令用于销毁存储池。
  • zpool status命令用于查看存储池状态。
  • zpool get命令用于查看存储池属性。
  • zpool set命令用于设置存储池属性。

参考文档

  • https://docs.oracle.com/cd/E26926_01/html/E25826/toc.html
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-03-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 FreeSWITCH中文社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档