doc 32: nullstone storage upgrade plan
R&M S02-S08 import (~105GB) blocked on disk pressure (post-import 117GB->12GB free). Plan upgrade first. Hardware probed: MSI X470 Gaming Plus Max, single Intel 512GB NVMe in M2_1, M2_2 free, 6 SATA ports free. Recommended path: 2TB NVMe in M2_2 (~£130) -> pvcreate -> vgextend keystone-vg -> lvextend lv-home -> resize2fs. ~5 min downtime, no reinstall. Alt: SATA SSD/HDD, USB external. Cheapest /GB = SATA HDD. Doc covers procedure, alternatives, post-upgrade R&M bulk import plan via playbooks/import-media/. Owner to pick + execute install.
This commit is contained in:
parent
a30edcfa2f
commit
cb9d5db1ce
1 changed files with 120 additions and 0 deletions
120
docs/32-nullstone-storage-upgrade-plan.md
Normal file
120
docs/32-nullstone-storage-upgrade-plan.md
Normal file
|
|
@ -0,0 +1,120 @@
|
||||||
|
# 32 — Nullstone Storage Upgrade Plan
|
||||||
|
|
||||||
|
> Status: PLAN (2026-05-10). Hardware purchase + install pending.
|
||||||
|
|
||||||
|
## Why
|
||||||
|
|
||||||
|
ARRFLIX library growth — Rick and Morty S02-S08 import (~105 GB) would push `/home` from 70 % → 92 % full. Tight margin for transcodes, logs, future imports. Pre-emptive upgrade beats emergency cleanup.
|
||||||
|
|
||||||
|
## Current state
|
||||||
|
|
||||||
|
| Item | Value |
|
||||||
|
|---|---|
|
||||||
|
| Drive | Intel SSDPEKKF512G8 NVMe 512 GB (single) |
|
||||||
|
| Slot | 1 NVMe (`nvme0n1`) |
|
||||||
|
| LVM VG | `keystone-vg`, fully allocated (475 GB) |
|
||||||
|
| LV `/home` | 406.2 GB, 263 GB used, 117 GB free (70 %) |
|
||||||
|
| LV `/`, `/var`, `/tmp`, swap | 30/11/3/24 GB |
|
||||||
|
| Mobo | MSI X470 Gaming Plus Max (MS-7B79) |
|
||||||
|
| **Free slots** | **1× M.2 (M2_2)**, **6× SATA ports** |
|
||||||
|
|
||||||
|
Mobo has two M.2 slots:
|
||||||
|
- `M2_1` — PCIe 3.0 ×4, **occupied** (Intel 512 GB)
|
||||||
|
- `M2_2` — PCIe 2.0 ×4 / SATA, **free**
|
||||||
|
|
||||||
|
## Recommended path — 2nd NVMe in M2_2
|
||||||
|
|
||||||
|
| Capacity | Approx cost | Recommended |
|
||||||
|
|---|---|---|
|
||||||
|
| 1 TB NVMe | ~£60 | adequate |
|
||||||
|
| 2 TB NVMe | ~£130 | **best** — leaves headroom for full Disney+ / Star Wars catalogue |
|
||||||
|
| 4 TB NVMe | ~£250 | long-term, future-proof |
|
||||||
|
|
||||||
|
Specs: NVMe PCIe 3.0 ×4 (M.2 2280). Brand: WD SN770, Samsung 990 EVO, Crucial P310, Lexar NM790. M2_2 is PCIe 2.0 — drive will negotiate down (still ~1.5 GB/s — plenty for media).
|
||||||
|
|
||||||
|
### Procedure
|
||||||
|
|
||||||
|
1. Power off nullstone.
|
||||||
|
2. Open case, install drive in M2_2 slot.
|
||||||
|
3. Boot.
|
||||||
|
4. Verify: `lsblk` should show new `nvme1n1`.
|
||||||
|
5. Partition: `sudo parted /dev/nvme1n1 mklabel gpt && sudo parted /dev/nvme1n1 mkpart primary 0% 100%`
|
||||||
|
6. Add as LVM PV: `sudo pvcreate /dev/nvme1n1p1`
|
||||||
|
7. Extend VG: `sudo vgextend keystone-vg /dev/nvme1n1p1`
|
||||||
|
8. Extend LV: `sudo lvextend -l +100%FREE /dev/keystone-vg/home`
|
||||||
|
9. Grow filesystem online: `sudo resize2fs /dev/keystone-vg/home`
|
||||||
|
10. Verify: `df -h /home` should show new size, no reboot needed.
|
||||||
|
|
||||||
|
Total downtime: ~5 min for case open + boot. No reinstall.
|
||||||
|
|
||||||
|
## Alternative paths (if M.2 install blocked)
|
||||||
|
|
||||||
|
### SATA SSD/HDD (option 4 from poll)
|
||||||
|
|
||||||
|
- 6 SATA ports free. Mobo has space for 2.5"/3.5" drives (case-dependent).
|
||||||
|
- 2 TB SATA SSD ~£80, 2 TB HDD ~£25, 4 TB HDD ~£60.
|
||||||
|
- Procedure same as NVMe but `/dev/sda` instead of `nvme1n1`.
|
||||||
|
- HDD slower (~150 MB/s vs NVMe's 1500 MB/s) but fine for media — 4K HDR HEVC peaks at ~15 Mbps = 1.9 MB/s read.
|
||||||
|
- Pro: cheapest per GB. Con: slower transcodes if SSD cache not configured.
|
||||||
|
|
||||||
|
### USB external (option 3 from poll)
|
||||||
|
|
||||||
|
- USB 3.0/3.1 ports available (at least 2× 10 Gbps slots).
|
||||||
|
- Plug-and-play, no case open.
|
||||||
|
- Pro: no install risk, can move drive between machines.
|
||||||
|
- Con: cable disconnect risks media server uptime (auto-mount needs udev rule or fstab `nofail`). Slower than internal (~400-500 MB/s real-world over USB 3.1).
|
||||||
|
- Best if: temporary expansion or testing.
|
||||||
|
|
||||||
|
## Migration of `/home/user/media`
|
||||||
|
|
||||||
|
Once new drive added to LVM and lv-home extended → media stays in place. NO migration needed. Just more headroom.
|
||||||
|
|
||||||
|
If using a SEPARATE drive (not joining LVM):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Mount new drive at /mnt/media-2
|
||||||
|
sudo mkfs.ext4 /dev/nvme1n1p1 # or /dev/sda1
|
||||||
|
sudo mkdir /mnt/media-2
|
||||||
|
sudo mount /dev/nvme1n1p1 /mnt/media-2
|
||||||
|
sudo chown user:user /mnt/media-2
|
||||||
|
|
||||||
|
# Move TV to new drive (movies stay on /home for now)
|
||||||
|
sudo rsync -aHAX --info=progress2 /home/user/media/tv/ /mnt/media-2/tv/
|
||||||
|
|
||||||
|
# Update fstab for auto-mount on boot
|
||||||
|
echo '/dev/nvme1n1p1 /mnt/media-2 ext4 defaults 0 2' | sudo tee -a /etc/fstab
|
||||||
|
|
||||||
|
# Update Jellyfin container — stop, edit docker-compose.yml volume:
|
||||||
|
# /mnt/media-2/tv → /media/tv-2
|
||||||
|
# OR just mount-bind /mnt/media-2/tv onto /home/user/media/tv (transparent to Jellyfin):
|
||||||
|
sudo umount /home/user/media/tv # if anything's there
|
||||||
|
sudo rmdir /home/user/media/tv
|
||||||
|
sudo ln -s /mnt/media-2/tv /home/user/media/tv
|
||||||
|
```
|
||||||
|
|
||||||
|
LVM-extension path is much cleaner — recommended.
|
||||||
|
|
||||||
|
## Decision pending
|
||||||
|
|
||||||
|
Owner picks NVMe / SATA / USB based on what's easier to get + budget. Update this doc after decision + install.
|
||||||
|
|
||||||
|
## After upgrade — Rick and Morty bulk import
|
||||||
|
|
||||||
|
Once `/home` has ≥ 200 GB free:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Per playbooks/import-media/ v1.0
|
||||||
|
# Stage all 7 seasons on onyx (already done — names need normalising)
|
||||||
|
# rsync to nullstone in one bulk
|
||||||
|
# Force Library/Refresh
|
||||||
|
# Verify Series 12→13 (only 1 new — R&M existed since S01), Episodes 217→285 (+68 with all 7 seasons full)
|
||||||
|
# Wait for S03 E06+E10 to finish download first, OR import partial + add later
|
||||||
|
```
|
||||||
|
|
||||||
|
Run logs: `playbooks/import-media/runs/rick-and-morty-s02-s08-2160p-hdr.md` (template).
|
||||||
|
|
||||||
|
## See also
|
||||||
|
|
||||||
|
- `playbooks/import-media/` — import workflow
|
||||||
|
- `docs/05-file-structure-rules.md` — TV folder layout
|
||||||
|
- ROADMAP.md — track upgrade as item
|
||||||
Loading…
Reference in a new issue