chore: link vault wiki to Gitea
This commit is contained in:
116
05-troubleshooting/obsidian-cache-hang-recovery.md
Normal file
116
05-troubleshooting/obsidian-cache-hang-recovery.md
Normal file
@@ -0,0 +1,116 @@
|
||||
---
|
||||
tags:
|
||||
- obsidian
|
||||
- troubleshooting
|
||||
- windows
|
||||
- majortwin
|
||||
created: '2026-03-11'
|
||||
status: resolved
|
||||
---
|
||||
# Obsidian Vault Recovery — Loading Cache Hang
|
||||
|
||||
## Problem
|
||||
|
||||
Obsidian refused to open MajorVault, hanging indefinitely on "Loading cache" with no progress. The issue began with an `EACCES` permission error on a Python venv symlink inside the vault, then persisted even after the offending files were removed.
|
||||
|
||||
## Root Causes
|
||||
|
||||
Two compounding issues caused the hang:
|
||||
|
||||
1. **79GB of ML project files inside the vault.** The `20-Projects/MajorTwin` directory contained model weights, training artifacts, and venvs that Obsidian tried to index on every launch. Specifically:
|
||||
- `06-Models` — ~39GB of model weights
|
||||
- `09-Artifacts` — ~38GB of training artifacts
|
||||
- `10-Training` — ~1.8GB of training data
|
||||
- `11-Tools` — Python venvs and llama.cpp builds (with broken symlinks on Windows)
|
||||
|
||||
2. **Stale Electron app data.** After Obsidian attempted to index the 79GB, it wrote corrupt state into its global app data (`%APPDATA%\obsidian`). This persisted across vault config resets and caused the hang even after the large files were removed.
|
||||
|
||||
A secondary contributing factor was `"open": true` in `obsidian.json`, which forced Obsidian to resume the broken session on every launch.
|
||||
|
||||
## Resolution Steps
|
||||
|
||||
### 1. Remove large non-note directories from the vault
|
||||
|
||||
```powershell
|
||||
Move-Item "C:\Users\majli\Documents\MajorVault\20-Projects\MajorTwin\06-Models" "D:\MajorTwin\06-Models"
|
||||
Move-Item "C:\Users\majli\Documents\MajorVault\20-Projects\MajorTwin\09-Artifacts" "D:\MajorTwin\09-Artifacts"
|
||||
Move-Item "C:\Users\majli\Documents\MajorVault\20-Projects\MajorTwin\10-Training" "D:\MajorTwin\10-Training"
|
||||
Remove-Item -Recurse -Force "C:\Users\majli\Documents\MajorVault\20-Projects\MajorTwin\11-Tools\venv-unsloth"
|
||||
Remove-Item -Recurse -Force "C:\Users\majli\Documents\MajorVault\20-Projects\MajorTwin\11-Tools\llama.cpp"
|
||||
```
|
||||
|
||||
### 2. Reset the vault config
|
||||
|
||||
```powershell
|
||||
Rename-Item "C:\Users\majli\Documents\MajorVault\.obsidian" "C:\Users\majli\Documents\MajorVault\.obsidian.bak"
|
||||
```
|
||||
|
||||
### 3. Fix the open flag in obsidian.json
|
||||
|
||||
```powershell
|
||||
'{"vaults":{"9147b890194dceb0":{"path":"C:\\Users\\majli\\Documents\\MajorVault","ts":1773207898521,"open":false}}}' | Set-Content "$env:APPDATA\obsidian\obsidian.json"
|
||||
```
|
||||
|
||||
### 4. Wipe Obsidian global app data (the key fix)
|
||||
|
||||
```powershell
|
||||
Stop-Process -Name "Obsidian" -Force -ErrorAction SilentlyContinue
|
||||
Rename-Item "$env:APPDATA\obsidian" "$env:APPDATA\obsidian.bak"
|
||||
```
|
||||
|
||||
### 5. Launch Obsidian and reselect the vault
|
||||
|
||||
Obsidian will treat it as a fresh install. Select MajorVault — it should load cleanly.
|
||||
|
||||
### 6. Restore vault config and plugins
|
||||
|
||||
```powershell
|
||||
Copy-Item "$env:APPDATA\obsidian.bak\obsidian.json" "$env:APPDATA\obsidian\obsidian.json"
|
||||
Copy-Item "C:\Users\majli\Documents\MajorVault\.obsidian.bak\*.json" "C:\Users\majli\Documents\MajorVault\.obsidian\"
|
||||
Copy-Item "C:\Users\majli\Documents\MajorVault\.obsidian.bak\plugins.bak" "C:\Users\majli\Documents\MajorVault\.obsidian\plugins" -Recurse
|
||||
```
|
||||
|
||||
### 7. Clean up backups
|
||||
|
||||
```powershell
|
||||
Remove-Item -Recurse -Force "$env:APPDATA\obsidian.bak"
|
||||
Remove-Item -Recurse -Force "C:\Users\majli\Documents\MajorVault\.obsidian.bak"
|
||||
```
|
||||
|
||||
## Prevention
|
||||
|
||||
### Add a .obsidianignore file to the vault root
|
||||
|
||||
```
|
||||
20-Projects/MajorTwin/06-Models
|
||||
20-Projects/MajorTwin/09-Artifacts
|
||||
20-Projects/MajorTwin/10-Training
|
||||
20-Projects/MajorTwin/11-Tools
|
||||
```
|
||||
|
||||
### Add exclusions in Obsidian settings
|
||||
|
||||
Settings → Files & Links → Excluded files → add `20-Projects/MajorTwin/11-Tools`
|
||||
|
||||
### Keep ML project files off the vault entirely
|
||||
|
||||
Model weights, venvs, training artifacts, and datasets do not belong in Obsidian. Store them on D drive or in WSL2. WSL2 (Fedora43) can access D drive at `/mnt/d/MajorTwin/`.
|
||||
|
||||
## Key Diagnostic Commands
|
||||
|
||||
```powershell
|
||||
# Check vault size by top-level directory
|
||||
Get-ChildItem "C:\Users\majli\Documents\MajorVault" -Directory | ForEach-Object {
|
||||
$size = (Get-ChildItem $_.FullName -Recurse -File -ErrorAction SilentlyContinue | Measure-Object -Property Length -Sum).Sum
|
||||
[PSCustomObject]@{ Name = $_.Name; SizeMB = [math]::Round($size/1MB, 1) }
|
||||
} | Sort-Object SizeMB -Descending
|
||||
|
||||
# Check obsidian.json vault state
|
||||
Get-Content "$env:APPDATA\obsidian\obsidian.json"
|
||||
|
||||
# Check Obsidian log
|
||||
Get-Content "$env:APPDATA\obsidian\obsidian.log" -Tail 50
|
||||
|
||||
# Check if Obsidian is running/frozen
|
||||
Get-Process -Name "Obsidian" | Select-Object CPU, WorkingSet, PagedMemorySize
|
||||
```
|
||||
Reference in New Issue
Block a user