--- title: "Obsidian Vault Recovery — Loading Cache Hang" domain: troubleshooting category: general tags: [obsidian, troubleshooting, windows, majortwin] status: published created: 2026-03-11 updated: 2026-04-02 --- # 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 ```