Add usb-hdd-ceph-tier: hdd-bulk Ceph OSD pool, now backing Nextcloud data #34
No reviewers
Labels
No labels
blocked
borg-backup
ceph
forgejo
in-progress
infra
netdata
nextcloud
p:high
p:low
p:medium
searxng
service-onboard
swarm-nodes
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
copper/ccnet-prod-devops!34
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "worktree-usb-hdd-ceph-tier"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
hdd-bulk) backed by 3 USB3 HDDs, one each on node01/node04/node05 (the non-mon-quorum pilot group already used for the NIC bonding rollout)hdd-bulkis live:size=2 min_size=1,hdd-usb3crush rule,snappy/aggressivecompression, all 3 OSDs up/in, clusterHEALTH_OK.p4and a pre-existingp5(the boot NVMe's real layout differs from whatdocs/homelab-architecture.mddescribes — see README).bluestore_prefer_deferred_size_hddtuning was tested live with a real on-cluster A/B and found to be a no-op (bluestore_max_blob_size_hddis also 65536 on this cluster, so it can never matter) — removed from the plan entirely, left at the stock default./dev/disk/by-id/, andpveceph osd create --db_devrejects a pre-made LV (now usesceph-volume lvm create --block.dbdirectly).hdd-bulkattached toswarm-data-fsas a second CephFS data pool; Nextcloud'sdatadirectory pinned to it (existing users migrated via two-passrsync, ~332GiB relocated; new users inherit automatically).appdata_*/files_externalexplicitly pinned back toswarm-data. Full detail indocs/homelab-build-history.mdItem 13. Pre-migration copies kept as<user>-old-ssd, tracked for deletion in issue #37.BLUESTORE_SLOW_OP_ALERT. Drives shipped at the factory-default 8s park timer; osd.14 happened to arrive with idle3 disabled, giving a controlled same-model comparison — 0.39 load cycles/hr vs ~40/hr on osd.12, i.e. ~350k cycles/year against a 300k–1M rating. Applied viahdparm -J 0(idle3ctlcan't reach it over USB/SAT; these are native-USB drives with no SATA path). The alert itself was deliberately not muted —bluestore_slow_ops_warn_thresholdstays at the stock 1; it was 11 events total, 9 in one 0.5s window during the first post-migration borg full re-read, with every real-problem discriminator clean.Test plan
bash -n+shellcheckclean on all scriptsdisable-usb-power-mgmt.sh+prepare-nvme-db.sh+create-osd.shon node01/node04/node05 — all 3 OSDs up/in,hddclass,bluefs_db_devconfirmed on the NVMe LVhdd-testpool, ranrados benchand RBD-mappedfio(pre-filled image to avoid the thin-provisioning sparse-read artifact) against ithdd-testpool/image, verifiedceph -sHEALTH_OKhdd-bulkpool via the equivalent ofcreate-pool.sh— confirmedsize=2 min_size=1,hdd-usb3rule, compression settings,HEALTH_OKceph fs add_data_pool+ceph.dir.layout.pool— verified layout inheritance with real probe files (not just directory xattrs), ownership (www-data:www-data) on every migrated directory,ceph dfshowing 335GiB stored,ceph -sHEALTH_OK, andnc.coppercore.net/status.phpreturning 200 post-cutovernoout— verified the value persisted after a physical power cycle (Power_Cycle_Countincremented, distinguishing a real power cycle from a bus reset), each OSD returnedup/inbefore advancing,nooutunset, ending at 15/15 OSDs up and 369/369 PGsactive+cleanwith SMARTPASSEDon all three🤖 Generated with Claude Code
https://claude.ai/code/session_018L4oDuJgxNPK6vGqWskEHk
Real disk layout differs from docs/homelab-architecture.md's "~317GiB unpartitioned tail" claim -- a pre-existing 150G p5 already occupies the disk end on node01/04/05, leaving a ~167GiB gap between p4 and p5 as the actual free space. prepare-nvme-db.sh now computes that gap live from parted output instead of assuming a contiguous tail, and creates the new partition as p6 (not p5, which is taken). Also fixes an idempotency bug where a re-run would see its own p6 as an obstructing partition. Two bugs found running the original scripts against real nodes, both fixed: drive lookup string-matched the ATA serial against the /dev/disk/by-id/ filename, which actually encodes the USB descriptor's differently-formatted iSerial and never matches -- now resolved via smartctl -i's reported serial instead. pveceph osd create --db_dev rejected a pre-made LV ("unable to get device info for /dev/dm-N") -- now uses ceph-volume lvm create --block.db directly, confirmed working against all 3 real nodes. bluestore_prefer_deferred_size_hdd tuning removed entirely: tested live with a controlled on-cluster A/B (same pre-filled RBD image, same fio workload, OSDs restarted between runs) and found to be a measurable no-op -- bluestore_max_blob_size_hdd is also 65536 on this cluster, so writes are already fragmented into blobs at or below the old threshold before the deferred decision is ever evaluated. Left at the stock default. CRUSH rule renamed hdd-replicated -> hdd-usb3 to signify these are USB drives, matching what's already live on the cluster. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018L4oDuJgxNPK6vGqWskEHkWIP: Add usb-hdd-ceph-tier: low-priority Ceph OSD pool for 3 USB3 HDDsto Add usb-hdd-ceph-tier: hdd-bulk Ceph OSD pool for 3 USB3 HDDs (live)Add usb-hdd-ceph-tier: hdd-bulk Ceph OSD pool for 3 USB3 HDDs (live)to Add usb-hdd-ceph-tier: hdd-bulk Ceph OSD pool, now backing Nextcloud dataInvestigating a BLUESTORE_SLOW_OP_ALERT on osd.12/13/14 found the drives running WD's factory-default 8s idle3 ("Intellipark") park timer. osd.14 happened to arrive with idle3 already disabled, giving a controlled comparison on identical hardware: 0.39 load cycles/hr vs ~40/hr on osd.12. At that rate osd.12 would reach ~350k cycles/year against a mechanism rated 300k-1M, and each unpark costs ~1s+ on first access -- a plausible cause of the isolated 5.2s read that helped trip the alert. Now disabled on all three via `hdparm -J 0`, verified persisted across a real power cycle. idle3ctl cannot reach it (legacy HDIO_DRIVE_CMD ioctl, not exposed over USB/SAT), and these are native-USB drives with no SATA path, so WDIDLE3.EXE isn't an option either. The alert itself was deliberately NOT muted: bluestore_slow_ops_warn_ threshold stays at the stock 1. It was 11 events total, 9 of them in one 0.5s window during the first post-migration borg full re-read, with every real-problem discriminator clean. It only looked persistent because threshold=1 latches the warning for 24h. Also documents that replugging any of these drives breaks its OSD until `vgchange -an/-ay` + `ceph-volume lvm activate` refresh the stale device-mapper table -- the drive re-enumerates to a new /dev/sdX and the resulting EIO/abort reads as hardware failure but is not. Docs only; the drive changes were applied by hand and are run-once provisioning steps (NVRAM + physical power cycle), not scriptable state. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018L4oDuJgxNPK6vGqWskEHkd3a0f78548toa20d8962a7