博主有一台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块硬盘,分别是sda,sdb,sdc。其中sda硬盘下是挂载了3个分区,分别是/boot,/,[SWAP],这三个分区使用了硬盘全部空间,这3个分区中/使用了大部分空间。sdb,sdc则是没有分区,完全没有使用。
ZFS可以直接把磁盘、分区绑成一个存储池,本次我要将sdb,sdc磁盘和sda中的一个分区绑成存储池,所以sdb,sdc我们不用去动他,当然你也可以将几个不同磁盘的分区绑成一个存储池。
如果sdb,sdc中之前新建了分区,可以先删除,具体可以参考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% /btxzZFS创建存储池后会自动挂载上的,可以直接当分区使用了,可以重启下看会不会掉,好了教程到此结束。
测试了一下存储池的性能
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