博主有一台OVH KE-LE-A 3*2T HDD的服务器,本来想用来跑PT的,但是他有3块硬盘,有时候挂载的话要分成3个路径,用起来不方便,下载还要去选存到那个地址,导致效率不高,想将这几个地址全部合成一个,这样利用率就高了。 经过在网上的搜索,终于知道一种技术能实现我的要求,那就是ZFS存储池技术。

ZFS 使用存储池​的概念来管理物理存储。以前,文件系统是在单个物理设备的基础上构造的。为了利用多个设备和提供数据冗余性,引入了卷管理器的概念来提供单个设备的表示,以便无需修改文件系统即可利用多个设备。此设计增加了更多复杂性,并最终阻碍了特定文件系统的继续发展,因为这类文件系统无法控制数据在虚拟卷上的物理放置。

ZFS 可完全避免使用卷管理。ZFS 将设备聚集到存储池中,而不是强制要求创建虚拟卷。存储池说明了存储的物理特征(设备布局、数据冗余等),并充当可以从其创建文件系统的任意数据存储库。文件系统不再仅限于单个设备,从而可与池中的所有文件系统共享磁盘空间。您不再需要预先确定文件系统的大小,因为文件系统会在分配给存储池的磁盘空间内自动增长。添加新存储器后,无需执行其他操作,池中的所有文件系统即可立即使用所增加的磁盘空间。在许多方面,存储池与虚拟内存系统相似:将一个内存 DIMM 加入系统时,操作系统并不强迫您运行命令来配置内存并将其分配给个别进程。系统中的所有进程都会自动使用所增加的内存。

那么我们现在就开始创建吧。输入lsblk命令查看系统结构,返回如下:

root@ns5004086:~# lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda      8:0    0  1.8T  0 disk 
├─sda1   8:1    0    1M  0 part 
├─sda2   8:2    0    1G  0 part /boot
├─sda3   8:3    0  1.8T  0 part /
├─sda4   8:4    0  512M  0 part [SWAP]
└─sda5   8:5    0    2M  0 part 
sdb      8:16   1  1.8T  0 disk 
├─sdb1   8:17   1  1.8T  0 part 
└─sdb9   8:25   1    8M  0 part 
sdc      8:32   0  1.8T  0 disk 
├─sdc1   8:33   0  1.8T  0 part 
└─sdc9   8:41   0    8M  0 part

我们可以看到一共有3块硬盘,分别是sdasdbsdc。其中sda硬盘下是挂载了3个分区,分别是/boot/[SWAP],这三个分区使用了硬盘全部空间,这3个分区中/使用了大部分空间。sdbsdc则是没有分区,完全没有使用。

ZFS可以直接把磁盘、分区绑成一个存储池,本次我要将sdbsdc磁盘和sda中的一个分区绑成存储池,所以sdbsdc我们不用去动他,当然你也可以将几个不同磁盘的分区绑成一个存储池。
如果sdbsdc中之前新建了分区,可以先删除,具体可以参考https://www.disktool.cn/content-center/linux-hard-disk-partition-369.html
现在我们要在sda中拆分出多余的空间用来加入存储池,系统的/我觉得留个200G足够了,现在是1.8TB,太浪费了。
首先我们查看下系统的分区情况,输入lsblk -f,返回如下

root@ns5004086:~# lsblk -f
NAME   FSTYPE     FSVER            LABEL     UUID                                 FSAVAIL FSUSE% MOUNTPOINTS
sda                                                                                              
├─sda1                                                                                           
├─sda2 ext4       1.0              boot      83e29b76-8d6a-483a-a730-7255f7c3bab9  756.6M    15% /boot
├─sda3 ext4       1.0              root      79798acd-6ece-4b31-8c38-4f789797b3ae    1.7T     0% /
├─sda4 swap       1                swap-sda4 15def5d0-98b2-4ab0-94a2-256683c4f29a                [SWAP]
└─sda5 iso9660    Joliet Extension config-2  2026-07-10-03-40-53-00                              
sdb                                                                                              
├─sdb1 zfs_member 5000             pt        10028510881979356027                                
└─sdb9                                                                                           
sdc                                                                                              
├─sdc1 zfs_member 5000             pt        10028510881979356027                                
└─sdc9

可以看到/ext4格式的,路径是sda/sda3,如果是XFS则不支持调小,其实终极办法就是在OVH后台装系统时就手动调整好分区大小,装好后调整风险很大,建议安装系统时直接调整好分区,安装时如果预留了空间的话,这里应该会出现一个sda6,大小的话就是当时预设剩下的空间。

现在我们开始创建存储池,命令格式zpool create 存储池名字 磁盘1 磁盘2 分区1.......
这里我们输入zpool create btxz sdb sdc,意思是将sdb、sdc打包创建一个btxz的存储池

root@ns5004086:~# zpool create btxz sdb sdc
invalid vdev specification
use '-f' to override the following errors:
/dev/sdb1 is part of potentially active pool 'pt'
/dev/sdc1 is part of potentially active pool 'pt'

这里报错是因为我之前用这两块硬盘创建过pt名字的ZFS存储池,现在重装系统后磁盘还残留着标签,我们使用zpool labelclear -f清除

root@ns5004086:~# zpool labelclear -f /dev/sdb
failed to clear label for /dev/sdb
root@ns5004086:~# zpool labelclear -f /dev/sdc
failed to clear label for /dev/sdc

提示清除失败,我们使用wipefs清除特征签名

wipefs -a /dev/sdb
wipefs -a /dev/sdc

检查下

root@ns5004086:~# lsblk -f
NAME   FSTYPE  FSVER            LABEL     UUID                                 FSAVAIL FSUSE% MOUNTPOINTS
sda                                                                                           
├─sda1                                                                                        
├─sda2 ext4    1.0              boot      83e29b76-8d6a-483a-a730-7255f7c3bab9  756.6M    15% /boot
├─sda3 ext4    1.0              root      79798acd-6ece-4b31-8c38-4f789797b3ae    1.7T     0% /
├─sda4 swap    1                swap-sda4 15def5d0-98b2-4ab0-94a2-256683c4f29a                [SWAP]
└─sda5 iso9660 Joliet Extension config-2  2026-07-10-03-40-53-00                              
sdb                                                                                           
sdc

已经干净了,我们再重新创建

root@ns5004086:~# zpool create btxz sdb sdc

使用df -Th查看下是否挂载上了

root@ns5004086:~# df -Th
Filesystem     Type      Size  Used Avail Use% Mounted on
udev           devtmpfs   16G     0   16G   0% /dev
tmpfs          tmpfs     3.2G  736K  3.2G   1% /run
/dev/sda3      ext4      1.8T  2.2G  1.7T   1% /
tmpfs          tmpfs      16G     0   16G   0% /dev/shm
tmpfs          tmpfs     5.0M     0  5.0M   0% /run/lock
/dev/sda2      ext4      974M  150M  757M  17% /boot
tmpfs          tmpfs     3.2G     0  3.2G   0% /run/user/0
btxz           zfs       3.6T  128K  3.6T   1% /btxz

ZFS创建存储池后会自动挂载上的,可以直接当分区使用了,可以重启下看会不会掉,好了教程到此结束。

测试了一下存储池的性能

fio Disk Speed Tests (Mixed R/W 50/50) (Partition btxz):
---------------------------------
Block Size | 4k            (IOPS) | 64k           (IOPS)
  ------   | ---            ----  | ----           ---- 
Read       | 35.61 MB/s    (8.6k) | 563.05 MB/s   (8.5k)
Write      | 35.71 MB/s    (8.7k) | 566.01 MB/s   (8.6k)
Total      | 71.32 MB/s   (17.4k) | 1.12 GB/s    (17.2k)
           |                      |                     
Block Size | 512k          (IOPS) | 1m            (IOPS)
  ------   | ---            ----  | ----           ---- 
Read       | 631.42 MB/s   (1.2k) | 2.65 GB/s     (2.5k)
Write      | 664.97 MB/s   (1.2k) | 2.82 GB/s     (2.6k)
Total      | 1.29 GB/s     (2.4k) | 5.47 GB/s     (5.2k)

因为我们创建的是基本存储池RAID 0,ZFS也会使用内存来当缓存,所以数据上来说很好看,但是安全性上来说差点意思。

参考文献:
https://docs.oracle.com/cd/E19253-01/819-7065/gavwq/index.html
https://www.disktool.cn/content-center/linux-hard-disk-partition-369.html

最后修改:2026 年 07 月 30 日
如果觉得我的文章对你有用,请随意赞赏