一、 因為疫情……
實在是疫情太嚴重的緣故,於是把家里的機器使勁反復折騰,硬件上從蝸牛到AMD3600到i73770到gen10再到i59600kf,軟件上從ESXI到PVE再到ESXI,反復折騰群暉、愛快、LEDE,從ALL IN ONE再到ALL IN ONE……最后,走的山多終遇虎,群暉的2個4T、RAID0的硬盤終於不堪折磨,報“設置數據損毀”,這下完犢子了!
二、 題外的吐槽
不得不重點提一下,群暉在轉移系統的時候千萬要謹慎。比如我,原來是ds3615系統,在不斷切換PVE、ESXI平台的過程中,先是發現手機程序無法登錄ds photo,再后網頁訪問總是跳回到群暉首頁,搜索無解決辦法時,決定將之遷移到ds3617系統(看看是否能夠自動修復此問題)。要命的是在點擊安裝時,它竟然提示“某個盤數據將會被格式化”?不是已經選擇“”保存數據“的遷移模式了嗎?這太危險吧了!然后我果斷慫了,還是不要了吧?當場再切換回到ds33615,不料啟動時,它居然報“可轉移”,而且也會格式化硬盤?什么情況?我雖然想過要出軌,但還沒有實際行動啊!行吧行吧,既然你這么說,那我就出軌一次看看?再切換到3617,竟然已經“設置數據損毀”了。
以上,充分說明,群暉系統的數據處理方式有點特殊。通常我們只是想想,不到最后一步點擊確認操作時,總覺得還是安全的;但群暉呢,想想都不可以,你一想它就動手給你干了。
三、 后果很嚴重
手賤的結果,就是只能自己含淚吃下苦果;還好有UFS Explorer Professional Recovery(必須注冊版)軟件。win10開機,安裝UFS,打開群暉盤,開始了漫長的數據恢復拷貝過程……,20幾個小時之后,所有數據成功恢復到新的群暉系統,開機訪問正常,美滋滋啊!偶然打開NoteStation,咦?數據呢?捶胸頓足后:不怕不怕,雖然沒有備份過,但咱本地不是還有數據嗎?可以恢復回去啊!
- 1. 嘗試使用本地NoteStation客戶端恢復數據
打開本地NoteStation(Synology Note Station Client)客戶端,這不是本地數據還都在嗎?點擊軟件“設置“按鈕,未登錄打不開?那登錄吧,成功登錄了,數據更新了,更新結束了,本地的數據全沒了、沒了、了!
這個路走不通了。
- 2. 嘗試舊群暉系統NoteStation安裝文件夾數據恢復
咱就想着,你不就是個APP嗎?那我把原來APP安裝文件連同原始數據文件都覆蓋過去,里面的數據不就全部恢復了嗎?很多windows下的軟件這么干都可以的。
說干就干,網上查了一下,還真找到NoteStation安裝文件地址,在/volume1/@appstore/NoteStation目錄。打開UFS,該文件實際上是位於/@syno/@appstore/NoteStation目錄。復制到本地硬盤,保險起見,先壓縮另存一份。
1) 打開新群暉系統,在控制面板-終端機和SNMP下,勾選“啟動SSH功能”;
2) 在群暉中卸載NoteStation軟件。
3) 安裝WinSCP,PuTTY軟件,連接到群暉系統。
4) 在WinSCP中點擊打開PuTTY終端界面,管理員登錄,執行如下命令,授權/volume1/@appstore目錄可以修改。
sudo chmod -R 777 /volume1/@appstore
5) 在WinSCP中,將本地的NoteStation整個目錄復制到群暉的/volume1/@appstore目錄下。
6) 重新到群暉中安裝NoteStation軟件。
大功告成!打開客戶端,成功登錄,傻眼了:為什么數據還不出現呢?
- 3. 嘗試直接修改NoteStation數據庫文件恢復
在WinSCP中反復查看NoteStation目錄,雖然重新安裝了APP,但這個目錄下的數據還是和我本地拷貝過去的數據一樣,沒有變化啊!目錄下有個DB文件夾,打開看,里面有3個數據庫文件,和本地的3個對應文件對比,大小、修改時間都一樣,那它怎么就不行呢?
既然如此,不是有數據庫文件嗎?那我直接修改數據庫里面的數據總可以了吧。
在win10中安裝Navicat Premium軟件,打開fts.db數據庫(sqlite),果然是它(因為它比較大),總共有10個數據表。打開notestation_content表,沒錯,就是它!所有的日志數據都在呢!熱淚盈眶啊,這下數據有救了!!!
仔細研究了一下,主要的表有3張,notestation(日志標題信息)、notestation_content(日志信息表,含內容)、perm_user(日志與用戶關系表)。
如上,發現perm_user記錄的用戶ID(user_id),在不同的群暉系統里面可能會不一樣(雖然創建了相同的群暉帳戶)。我上一個群暉系統的用戶ID是1027,但新的系統用戶ID變成1026了。但不要在意細節,把所有1027編號的,調整為1026就是了。
於是施展SQL大法,將對應的3個表perm_user、notestation、notestation_content涉及到用戶ID的,全部調整為新的用戶ID(其實,數據不多手工改改也可以)。
打完收工。因為/volume1/@appstore/NoteStation/db文件夾里面的數據無法覆蓋,執行命令也不行,必須先把文件改名上傳上去,再執行cp命令覆蓋。
sudo chmod -R 777 /volume1/@appstore/NoteStation/db
cp -r /volume1/@appstore/NoteStation/db/fts1.db /volume1/@appstore/NoteStation/db/fts.db
覆蓋完畢,刷新一下,看到現有系統里面的fts.db文件修改時間、大小已經變更了。這說明覆蓋成功了。滿懷信心打開Note客戶端,登錄,更新――泥馬,為什么還是沒有?再同步?還是沒有?!不死心,重新下載fts.db,重新打開細細觀察,沒有問題啊,已經修改成功了,可為什么還是不行呢?
- 4. 嘗試直接覆蓋@SynoDrive文件夾恢復
這下子抓瞎了。本來以為十拿九穩的,這都修改數據庫了,咋人家還不認可呢?沒道理啊。想了半天,做了好多嘗試,發現已有的數據,你直接在數據庫中修改了但在客戶端里面並沒有顯示修改;但如果在客戶端修改了,數據庫中也會跟着修改。那么估計是客戶端寫入后,后台有個鈎子之類的程序,把數據寫到其他地方再進行顯示。換句話說,客戶端顯示的數據,實際上不是從數據庫中直接提取出來的,它有個中間存儲位置。
話是這么說,但咱對linux不熟啊,對這個APP也不熟。一句話,難吶。
沒有辦法,到處轉轉看。在/volume1目錄下,看到好多APP的文件,什么video、photo、music啊什么的,都安裝在這里,一個一個點進去看看。終於點到@SynoDrive,咦?里面居然還有一個NoteStation目錄?再點進去,天哪,數據原來藏在這里面?
化成灰我都認得你!這里面的前4位ID不就是用戶ID嗎?后面的編號不就是日志ID嗎?急忙對照了一下數據庫,果然如此(小樣的,你以為你藏得深一點我就不認得你了?)!打開文件夾,進入/version/text目錄,打開文件逐一看過去(好幾個文件),沒錯,日志內容果然是記錄在這里!
嘗試着把對應用戶的數據刪除掉,然后登錄客戶端一看,果然也不見了!
馬上行動!
1) 打開UFS,把事故盤里面/@syno/@SynoDrive/NoteStation整個目錄拷到本地硬盤。
2) 打開PuTTY終端,輸入以下命令取得目錄控制權:
sudo chmod -R 777 /volume1/@SynoDrive/NoteStation
3) 打開WinSCP,將拷出的文件覆蓋到新系統同一目錄下。
4) 打開Note客戶端,登錄,同步,更新――哦耶,數據出來了!
等等?數據是有了,但不是我的數據啊!前面說了,我舊系統的用戶ID是1027,但新系統用戶ID變成了1026,這登錄進去,數據是有了,但不是我的數據啊!
- 5. 終極解決辦法:數據導出、導入恢復
眼看着革命就快成功了,說啥也不能倒在這個關頭啊!眼看着肉就在嘴邊,但這個是別人的嘴啊,總不能每次都用別人的嘴吃吧?
我突然想起來了,Note不是有個導入導出的功能嗎?那我用別人的帳戶登錄進去,先把數據導出,再切換到自己的帳戶導入,這不就了啦?(我真是太英明了)
於是,用其他帳戶登錄,導出;再用自己的帳戶登錄,導入,同步(雙手合十ing)……,離我而去許久的數據,終於回到了我的懷抱(速效救心丸預備)!
四、 總結經驗教訓
其實很簡單,就一句話:“不折騰不會死!”。
非得再加一句,那就:“作死之前請系好安全帶”。
萬一還是出事了,那就只能事先多學習一點求生技能吧。
以下總結救援步驟:
- 准備好WinSCP,PuTTY,UFS Explorer Professional Recovery 三個救援工具。
- 將事故盤目錄拷貝到本地:/@syno/@SynoDrive/NoteStation 。
- 卸載群暉系統中的NoteStation,並選擇“永久刪除數據庫”。
- 通過PuTTY執行以下命令取得/volume1/@SynoDrive/修改權。
sudo chmod -R 777 /volume1/@SynoDrive/
- 用WinSCP將本地事故盤備份的NoteStation目錄拷貝到群暉/volume1/@SynoDrive/目錄下。
- 群暉系統中重新安裝NoteStation。
- 創建與原群暉系統相同的帳戶,但同名帳戶反映到NoteStation中的用戶ID可能會不相同,這個只能自己試驗(提示:結合Note客戶端添加記錄,查看/volume1/@SynoDrive/NoteStation里面增加的記錄)
- 使用對應的帳戶登錄Note客戶端(有大概率用戶ID號會變化),導出Note備份文件。
- 用自己的號重新登錄Note客戶端,導入備份文件。然后記得點擊“更新”(注意要等一會兒,根據日志數量一到幾分鍾不等)