我在一家医疗设备供应商工作。我们在一台机器上有几个 SquashFS 分区(用于操作系统文件,两个操作系统分区,只读 squashfs),一些启动分区(3x FAT32)和一个数据分区(120Gb,rw,ext4)。
问题是,作为医院使用的设备,有时他们会切断设备的电源,有时我们会遇到随机问题,这些问题似乎与 DATA 分区上的数据损坏有关。问题是,医疗软件记录了很多东西,所以我猜有时会发生写入,也许机器硬关机,这似乎会损坏相邻的文件。
无论如何,我认为将数据分区上的 ext4 更改为 ZFS 之类的写时复制 FS 可能会有所帮助。但有一件事是……ZFS 是否要求整个磁盘都是 ZFS(zpool 的东西),或者我们能否让 ZFS 分区与具有不同 FS 的其他分区共存于同一磁盘上。
谢谢!
答案1
您不必将整个磁盘格式化为 ZFS。zpool 可以由整个磁盘和分区的任意组合构建。
如果您确实与同一磁盘上的其他分区共享 ZFS 成员,则应记住输入/输出 (I/O) 性能也是共享的。
在最简单的配置中,您可以拥有一个由一个 vdev(只是一个分区或设备)组成的 zpool。我有一台格式化如下的计算机:
root@craptop [~]# zpool status -P
pool: rpool
state: ONLINE
scan: scrub repaired 0B in 00:00:30 with 0 errors on Sun Nov 14 00:24:31 2021
config:
NAME STATE READ WRITE CKSUM
rpool ONLINE 0 0 0
/dev/disk/by-id/ata-LITEONIT_LSS-24L6G_S45N8470Z1ZNDW089292-part4 ONLINE 0 0 0
errors: No known data errors
ZFS 成员是位于以下位置的一个分区/dev/sda
:
root@craptop [~]# blkid /dev/sda4
/dev/sda4: LABEL="rpool" UUID="3735190874680832032" UUID_SUB="15024274719792138025" TYPE="zfs_member" PARTUUID="a9a5ae01-90cd-4945-a9dd-fbccbfbfc075"
root@craptop [~]# lsblk -p
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
/dev/sda 8:0 0 22.4G 0 disk
├─/dev/sda1 8:1 0 1000K 0 part
├─/dev/sda2 8:2 0 512M 0 part /boot/efi
├─/dev/sda3 8:3 0 1G 0 part /boot
└─/dev/sda4 8:4 0 20.9G 0 part
/dev/sdb 8:16 0 931.5G 0 disk
├─/dev/sdb1 8:17 0 1000M 0 part
├─/dev/sdb2 8:18 0 260M 0 part
├─/dev/sdb3 8:19 0 1000M 0 part
├─/dev/sdb4 8:20 0 128M 0 part
├─/dev/sdb5 8:21 0 884G 0 part
├─/dev/sdb6 8:22 0 25.2G 0 part
└─/dev/sdb7 8:23 0 20G 0 part
/dev/sdc 8:32 1 58.6G 0 disk
└─/dev/sdc1 8:33 1 58G 0 part
如果没有冗余或奇偶校验 vdev(镜像、raidz、raidz2、draid 等),ZFS 可以检测到静默数据损坏,但无法纠正它,因为数据的唯一副本是坏的。
您应该考虑创建具有一个或多个冗余 vdev 的 zpool。
这是我的另一台电脑RAID 1等效的 vdev,称为镜像:
root@box1 [~]# zpool status -P
pool: fastpool
state: ONLINE
scan: scrub repaired 0B in 00:04:39 with 0 errors on Sun Nov 14 00:28:40 2021
config:
NAME STATE READ WRITE CKSUM
fastpool ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
/dev/nvme0n1p3 ONLINE 0 0 0
/dev/nvme1n1p3 ONLINE 0 0 0
errors: No known data errors
pool: slowpool
state: ONLINE
scan: scrub repaired 0B in 05:45:50 with 0 errors on Sun Nov 14 06:09:52 2021
config:
NAME STATE READ WRITE CKSUM
slowpool ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
/dev/sda1 ONLINE 0 0 0
/dev/sdb1 ONLINE 0 0 0
logs
/dev/nvme0n1p5 ONLINE 0 0 0
/dev/nvme1n1p5 ONLINE 0 0 0
cache
/dev/nvme0n1p4 ONLINE 0 0 0
/dev/nvme1n1p4 ONLINE 0 0 0
errors: No known data errors
入门
- 设置 ZFS 存储池作者:Aden Padilla
man 7 zpoolconcepts
其他阅读材料
- ZFS 101—了解 ZFS 存储和性能作者:Jim Salter
- ZFS:您应该使用镜像 vdev,而不是 RAIDZ。作者:Jim Salter