2026-09-16 03:37(CST)把 rook-ceph-cluster 从 helm rev 31 升到 32。现网 ceph-block / ceph-filesystem 一个键都没改。多了两张要显式点名的 StorageClass:ceph-block-hdd、ceph-filesystem-hdd。正文落前舱 12 块 16T,EC 2+1、故障域 host,和录播对象池同一批轴。
盘位规划里写过「16T 不进块池」:三台 R730xd 的槽位和容量。那句话仍然对 默认类 成立。库、KubeVirt 系统盘、现网 113 个 RBD 还在后舱 960G。缺的是 POSIX 大容量(Debian / Ubuntu APT 源),不是把默认类改去打机械盘。
槽 10 怎么挂、换盘怎么走,见 记录一次给 6 个旧 HDD OSD 挂槽 10 缓存盘、机械盘和缓存盘故障时怎么换,不要和这篇混。
目录
要解决什么
现网唯一的 EC 2+1 是 ceph-objectstore.rgw.buckets.data(default~hdd),09-16 当天 stored 25 TiB,MAX AVAIL 84 TiB,几乎全是录播。块和 CephFS 钉在 default~ssd replica 3:ceph-block 还能写大约 1.1 TiB,ceph-filesystem-data0 同样大约 1.1 TiB。
APT 源要的是目录树:apt-mirror / rsync / nginx,不是 S3 客户端。对象 URL 对 apt 不合适(现网 oss.cyxc.club 上多数桶要密钥,apt 不会签)。现有 CephFS 太小,是因为 data0 钉死 960G,不是 CephFS 不能用 16T。
所以:另开一套 POSIX,正文进机械盘;默认类、现有 PVC 不动。
不要做的三件事
不要把 RBD 建进 rgw.buckets.data。 那是录播池,application=rgw。源站用新池,数据仍然落同一套 EC,但不要混在一个池里。
不要把 16T 并进现在的 ceph-block。 改 crush 会把库和虚机盘拽到机械盘上。09-04 那次 fio:6 块 S4510、三副本、12 路客户端,顺序写合计 388 MiB/s,4K 随机写 22.8k IOPS。那是 960G 的数字。机械盘 EC 的 4K 随机写差一个数量级以上,系统盘不能下去。
不要 apt-mirror 写一小块 ceph-block 再 rclone sync。 全量 amd64 就要 2–6 TiB,SSD 块池只剩 1.1 TiB。apt-mirror 增量靠本地文件还在,清掉暂存等于下次从头下,变成永久双份。rclone mount 也不是盘:wget 先写临时文件再 rename,S3 没有改名,每个包复制两次。
对象方案以后仍在。这次要的是 POSIX,就走新 StorageClass。
两张新类,旧类原样
默认 StorageClass 仍是 ceph-block。不写 storageClassName、或写旧名字,还在 960G。
| StorageClass | 谁用 | 正文 | 元数据 | 删 PVC |
|---|---|---|---|---|
ceph-block(默认) |
现网 113 卷、库、虚机盘 | 960G replica 3 | 同池 | Delete |
ceph-filesystem |
现网 9 卷 | 960G replica 3 | 960G metadata | Delete |
ceph-bucket |
ObjectBucketClaim | 16T EC(RGW) | 索引在 960G | Delete |
ceph-block-hdd |
显式点名 | 16T EC 2+1 | 960G 镜像头 | Delete |
ceph-filesystem-hdd |
显式点名,APT 源走这个 | 16T EC 2+1 | 960G 目录/inode | Delete |
RADOS 名字:
| 池 | crush | 角色 |
|---|---|---|
ceph-block-hdd |
default~hdd EC 2+1 |
块正文 |
ceph-block-hdd-metadata |
default~ssd replica 3 |
RBD 头 |
ceph-filesystem-hdd-metadata |
default~ssd replica 3 |
目录 / inode |
ceph-filesystem-hdd-data0 |
default~ssd replica 3 |
Rook 要求的默认数据池,没有 SC |
ceph-filesystem-hdd-ec |
default~hdd EC 2+1 |
文件正文 |
新文件系统是独立的 CephFilesystem,另起一对 MDS(rook-ceph-mds-ceph-filesystem-hdd-a / b)。不是给旧 FS 加第二数据池。旧 ceph-filesystem 的 MDS、池、SC 都没动。
CSI:块类 pool=ceph-block-hdd-metadata,dataPool=ceph-block-hdd。文件类 fsName=ceph-filesystem-hdd,pool=ceph-filesystem-hdd-ec。
CephFS 为什么多一块 SSD data0
Rook 官方 EC 文件系统示例写得很死:必须先有一个 副本数据池当默认,EC 只能当第二池。CSI 的 pool 再指到 EC 那一块。
所以 ceph-filesystem-hdd-data0 在 960G 上,几乎不放业务,也没有 StorageClass。不是漏了。有人自己改 layout 或另做 SC,写进去的才是 SSD 余量,不是 16T。
ObjectStore 那条「dataPool 别写 deviceClass: hdd」套不到这里。那是已经建好、EC profile 的 crush class 为空、改 CR 会让 ObjectStore 一直 Failure。新池必须写 hdd,不写的话 crush 走 default,条带会打到 960G。
块盘这边 Rook 会给 EC 池打开 allow_ec_overwrites。helm 里也写明了。没有 overwrite,RBD / CephFS 不能在 EC 上做部分写。
块和文件差在哪
两边正文都在同一批 12 块 16T、同一套 EC 2+1 上。Squid 19.2.3 没有 FastEC(部分读/写是 Tentacle 的池开关)。顺序大文件的带宽上限差不多,都受轴限制。差在目录走哪。
ceph-block-hdd |
ceph-filesystem-hdd |
|
|---|---|---|
| 元数据 | RBD 头在 SSD;ext4 的 inode / 日志在 16T | MDS + metadata 池在 SSD |
几十万个 .deb |
每次 create 改 ext4 日志,机械盘读改写 | 整文件写是 EC 舒适区;stat 不打 16T |
| 虚机盘 / 库 | 不要用。继续 ceph-block |
更不要 |
| 多 Pod | 一般 RWO | 原生 RWX |
APT 源用 ceph-filesystem-hdd。只要「一块大盘、文件很少」才用 ceph-block-hdd。槽 10 的 PM883 只是 HDD OSD 的 WAL/onode,不是把卷缓在 SSD 上。
chart 注释不能原样解开
上游 cephECBlockPools 示例是 failureDomain: osd、元数据 size: 2、SC 名叫 rook-ceph-block。三台机器抄这个:3 个 EC 分片可以落在同一台的 4 块盘上,整机掉线卷就没了。
这套取值:
- 故障域 host,k=2 m=1,和对象池一样
- 元数据 ssd replica 3
- 正文 deviceClass: hdd
bulk: "true"- 新文件系统
preserveFilesystemOnDelete: true(误删 CR 时文件系统还在) - 两张新类
reclaimPolicy: Delete(PVC 删了卷一起清) isDefault: false
helm 模板每个 cephFileSystems 项渲一张 SC,所以 HDD 文件系统自己带 ceph-filesystem-hdd,不必另写清单。cephECBlockPools 渲两个 CephBlockPool(正文名、名字-metadata)加一张块类。
2026-09-16 凌晨(CST)
| 时间 | 做什么 |
|---|---|
| 改 values 之前 | 备份 helm get values → helm-values-rev31-before-hdd-pools.yaml |
| 03:37 | helm upgrade rook-ceph-cluster,rev 32 |
| +30s | 两张 SC 已在;ceph-block-hdd / -metadata Ready |
| +1 min | ceph-filesystem-hdd Ready,SVG Ready,两台新 MDS Running(22 一台、21 一台) |
升完对照:
- 旧 PVC:113 个
ceph-blockBound,9 个ceph-filesystemBound ceph-filesystem-hdd-eccrushtake default~hdd,allow_ec_overwrites: true,MAX AVAIL 84.4 TiBceph-filesystem-hdd-data0crushdefault~ssd,AVAIL 1135Gceph-block-hdd同样ec_overwrites、application rbd- HEALTH_WARN 仍是过期 scrub(挂槽 10 那阵
noscrub积压),不是这次
PG autoscaler 会给两个 bulk 池加 PG,HDD OSD 上的 PG 数会涨。回填量很小(空池),不是 remap 数据。
和对象池抢轴
两套 HDD 正文和 rgw.buckets.data 抢同一笔空闲。helm 里没写配额。一块几十 TiB 的 PVC 或一次全量 Ubuntu 镜像,会把录播还能写的 84 TiB 吃掉。用之前先定 maxSize,或至少锁 suite / 架构,不要默认全镜像。
回滚不要把 cephECBlockPools 整段再注释掉:块池 CR 没有 preserve 标志,operator 可能删池。文件系统开了 preserveFilesystemOnDelete。
定位硬盘仍用 WWN / 序列号 / 槽,不要用 /dev/sdX。OSD 号会换盘。