無法使用外部驅動器在 Windows 10 上重新啟動 Postgres
我一直在研究一個 postgres 數據庫,我的數據目錄在我的 8TB 外部 USB 驅動器上。有時,我需要重新啟動 postgres 實例來更改配置設置,但由於某種原因,我永遠無法重新啟動服務。
- 在 Windows 7 中一切正常
- 無法在 Windows 10 中重新啟動 postgres
- D:\postgresdata\ 中的數據目錄
- 數據庫目前是空的,只是預設的 postgres 實例
- windows啟動時,數據庫引擎自動啟動,並正常執行
- 執行“show data_directory”返回 D:/postgresdata/
- 打開 services.msc 並重新啟動我的 postgres 服務啟動和停止,從未成功啟動。
- 執行
pg_ctl.exe start -D D:\postgresdata
無法啟動並出現以下錯誤:
FATAL: could not access status of transaction 0 DETAIL: Could not open file "pg_notify/0000": Invalid argument.
我嘗試過的事情:
- 我在我的 C: 驅動器上測試了相同的場景,它總是正確啟動和重新啟動。
- 我已經在 D: 驅動器上執行了 chkdsk,它沒有任何問題。
- 我玩過 D: 的權限,沒有任何區別。
- 我從我的 C: 驅動器創建了第二個分區,並驗證其上的數據目錄始終正確啟動和重新啟動。
- 在 D: 驅動器上使用 pg_ctl init -DD:\someotherpath\ 初始化新數據庫也不起作用,與通常重新啟動相同的錯誤。
我不知道還能嘗試什麼。最奇怪的是系統總是在系統啟動時啟動和工作,但在任何其他情況下都沒有。
更新:我試圖在 USB 拇指驅動器上執行 postgres,但錯誤是一樣的。
驅動器使用什麼類型的分區方案和 USB 晶片組(USB-sata 橋接器)?您仍然可以在具有某些分區類型/大小和晶片組的現代 USB 驅動器上遇到各種意想不到的限制。我遇到了一些 USB 驅動器控制器施加的 2TB 限制問題。您可以格式化大於該值的分區,但是當您嘗試讀取/寫入更高的塊號時會出錯。
您還可以達到舊 MSDOS 分區方案施加的限制,可以通過重新格式化為 GPT 來克服這些限制(顯然首先移動/備份您的數據)。
因此,您的解決方案可能只是購買更現代/高端的外殼。
另一種可能性是您遇到了與寫回記憶體相關的某種錯誤。您可以嘗試按照本文所述調整驅動器記憶體設置
它在win7中有效但在win10中無效的事實也可能表明驅動程序錯誤,但不確定除了查看製造商網站之外您是否可以做任何事情。
您可以通過嘗試將一些非常大的文件寫入驅動器然後測試文件是否損壞來測試上述所有理論,其中一種方法是使用您的網路攝像頭或 VLC 螢幕擷取記錄一個巨大的 MPEG。要成為有用的測試,文件需要非常大(例如 2TB+)
也許權限是正確的,但驅動器可能處於只讀模式,或者 postgresql 數據文件夾可能只是只讀的。