今天正在安裝虛擬機時,突然發現網絡磁碟不能寫入,起初以為虛擬機出問題,後來發現其他分享資料夾也無法寫入檔案,打開後台畫面檢查後發現有一隻硬碟出現I/O異常問題!OMG,這隻硬碟才用上不夠二年!
這一隻硬碟運行才不到兩年就出現這個問題,我懷疑是否因為SMR硬碟不適合作為主要磁碟使用(補充:NAS廠商不建議使用SMR磁碟,可惜我後來才知道)。幸好我每天有將檔案備份至另一台NAS,所以也不太擔心失去資料,但考慮到又要花很多時間解決就覺得頭痛。
計劃
既然如此,這次趁機會將主碟(安裝系統和應用程序)替換上SSD,早前得悉CMR和SMR之後就一直希望更換主碟來提高速度。我的計劃如下:
- 將目前在PCIe NVMe Card Slot 1上的500GB SSD改到Slot2,並且取消Qtie而改為快取用途
- 新增一片1TB的SSD用為主碟,主要用於存放系統、應用程序和服務相關檔案:
- QTS系統檔案
- 主要應用程序和服務,如:
- * Station (e.g. Virtual Station, Container Station, Multimedia Console, Photo Station...etc.)
- Windows File Sharing
- 頻繁讀寫的資料等等
- 購買一隻NAS專用的硬碟(必需是QNAP認可的相容硬碟)以換掉目前出問題的硬碟,以存放用戶資料檔案:
- Homes
- Family Photos
- Download
- Mutlimedia
- 等等
- 保留原本Slot2 HDD作為資料備份和日後擴充用戶資料使用
NAS專用硬碟
近幾年留意到T牌的硬碟質量每況愈下,另外仍然對W牌硬盤沒有信心,所以只能選擇S牌。參考過這篇文章後:CMR 與 SMR 硬碟機 | Seagate 台灣,我決定買這一型號:Seagate IronWolf NAS ST4000VN006,最便宜的價錢為 HKD695, 3年保用,最緊要這是QNAP相容的硬碟。
工作日誌
準備工作和備份
- 首先必須盡早通知所有用戶停止使用NAS
- 鑑於系統報告表示硬碟需要檢查和清理所以跟著做,重啟系統,之後發現雖然硬碟仍然被標示錯誤但已經可以寫入了,鬆了一口氣。
- 因為啟用了 Qtier 功能,但考慮到主碟會使用SSD和風險評估後,決定取消使用 Qtier:
- 在 Storage & Snapshots 下,再到 Storage/Snapshots,找到出現問題的 Storage Pool 1,點擊 Management
- 在Management頁面下點擊 Action
- Remove Ultra-High Speed Tier
- Remove RAID Group 1
- 慢~慢等待完成,這個也挺花時間,大約超過20小時才完成 500GB 的 Qtier 移除,我猜主要原因是在於SMR
- 到控制台做設定備份,把設定保存在電腦
- 因為目前有2個虛擬機,所以到Virtual Station把停止2個虛擬機然後導出,再停止Virtual Station
- 盡可能停止QTS中的所有服務和APP,但保留SSH服務
- 因為所有用戶檔案已經備份到另外的NAS,所以只要備份系統檔就可以了:
- 以admin身份登入SSH後,利用
tar
指令備份/share/CACHEDEV1_DATA/.system
目錄 - 完成後用scp傳送到電腦
- (補充:其實我太懶惰,因為硬碟看似能繼續工作,所以我沒有備份
.system
目錄🤭)
- 以admin身份登入SSH後,利用
測試能否用SSD作為系統啟動盤
聽聞如果使用非官方的 PCIe NVMe Card可能無法利用NVMe SDD作為系統啟動盤,雖然早前我也換上官方的 PCIe NVMe Card - QM2-2S-220A | Flexible and versatile, boosts performance and functionality | QNAP (US),但還是測試一下:
- 首先把所有硬碟和SSD移除
- 然後換上新的 SSD 到 QM2 Slot 1(1-1)
- 啟動後觀察結果,結果如下:
- 系統能正常啟動並進入初始化頁面
- 執行初始化後,系統運作正常
- 注意:初始化後的系統並不會自動建立儲存池,這個部分需要手動建立,之後的操作會處理
- 還原早前備份的系統設定,基本仍可運作,設定仍然保留
在做這個之前其實做了另一個實驗,就是移除所有硬碟但保留原本的 500GB SSD,重啟後竟然發現整個QTS系統仍然正常啟動,除了沒有APP數據和用戶數據和影響大部分APP運作外,基本上仍然能夠使用。再深入調查就發現每一隻硬碟也有3個RAID1的磁區(Partition),這些磁區主要是QTS的系統磁區(如 Boot Image等)。而且RAID1是建立在所有硬碟,即無論那一隻硬碟也可以啟動系統。
為系統建立第一個儲存池及磁碟區(Volume)
- 首先確認 NVMe 卡上只插上 1TB SSD(即目前已做好初始化的SSD),500GB SSD 及所有硬碟已移除
- 到 Storage/Snapshots,點擊 Create,點擊 New Stroage Pool
- 根據指示建立儲存池,以下是非預設的參數:
- 不選擇 Qtier and SED
- 選擇 QM2 1-1 SSD (1TB)
- RAID Type: Single
- Space allocation:
- SSD over-provisioning = 5%
- Pool Guaranteed Snapshot Space =10%
- Threshold: Disable
- 成功建立儲存池,現在建立磁碟區(Volume)
- 到 Storage/Snapshots,點擊 Create,點擊 New Volume
- 根據指示建立磁碟區,以下是非預設的參數:
- Type = thick volume
- Volume Alias = SysAndAppData
- Volume Capacity = (Set to Max) (i.e. 713GB)
- Alert threshold = 80%
- File system option: Bytes per inode: 4K
- 成功建立磁碟區
為了運作順利,工序應分成多個階段,避免把一次過插入所有硬碟。
掛載舊儲存池
- 插入有問題的硬碟到HDD Slot 2(注意,不是Slot 1),因為支援熱插所以不需要關機
- 確認系統能夠辨認HDD後,嘗試掛載舊儲存池(Storage Pool)
- 在 Storage & Snapshots 下,再到 Storage/VJOB
- 點擊最右方的功能按鈕,點擊Recover,再點擊 Attach and Recover Storage Pool (見下圖)
- 按指示操作後,原有的Storage Pool就出現了
- 登入SSH,檢查舊檔案是否存在及可讀:
- 發現舊檔案在目錄:
/share/CACHEDEV2_DATA/
- 檔案可讀
- 發現舊檔案在目錄:
- 到File Station:
- 發現舊的Shared Folder被加入了,但是檔案夾名稱結尾多了「-1」,應該是因之前已有同名的Shared Folder
修正主碟上的Shared Folder
因為還原了舊系統設定,主要的儲存池和磁碟區也是手動建立的,所以我們需要手動還原目錄資料夾,亦需要留意今次會修改Shared Folder的儲存位置,即一部分會保留在主硬碟(1TB SSD)上,另一部分會轉到儲存用戶數據的硬碟上(4TB HDD)。
先修正主碟上的Shared Folder,確認可以從舊硬碟讀取檔案後,登入SSH手動修正Shared Folder配置:
- 以admin身份登入SSH,轉到系統碟目錄(即 1TB SSD)下:
/share/CACHEDEV1_DATA/
- 根據之前建立的Shared Folder,用指令手動創建以下目錄:
/share/CACHEDEV1_DATA/
Browser Station/share/CACHEDEV1_DATA/
Container/share/CACHEDEV1_DATA/
Multimedia/share/CACHEDEV1_DATA/
Public/share/CACHEDEV1_DATA/
Virtual Station/share/CACHEDEV1_DATA/
Web
- 將以上的目錄的權限(Permission)改為 ugo+rwx (即
chmod 777 <folder>
) - 在 File Station 下點擊這些目錄,如成功應該不會出現錯誤
- 再次確認除了SSH外,所有系統服務及APP是否已經停止
複製(還原)舊系統及服務相關檔案
以admin身份登入SSH,檢查以下資料夾的檔案:
- 舊硬碟數據儲存區的根位置:/share/CACHEDEV2_DATA/
- 主碟(1TB SSD)數據儲存區的根位置:/share/CACHEDEV1_DATA/
使用rsync
指令複製檔案,因為有太多資料夾所以預先準備一個include文件,位置為:/share/CACHEDEV2_DATA/include.txt
,內容如下:
.@analytic/*** .antivirus/*** .@app_center/*** .@backup_code_signing/*** .@backup_config/*** .@backup_qbox/*** .@backup_qfiling_v2/*** .codesigning/*** .HLS/*** .idmap/*** .ldapdb/*** .magick_tmp/*** .musicdata/*** .php_session/*** .php_session_sys/*** .qbox/*** .qbox_view/*** .qcoolie/*** .qfiling/*** .qpkg/*** .@qsync/*** .quftp/*** .samba/*** .samba_python3/*** _.share/*** .SSDLaboratory/*** .system/*** .team_folder/*** .tmp/*** .torrent/*** .@upload_cache/*** .utility/*** .versioning/*** .wifi/*** Browser Station/*** Container/*** Virtual Station/*** Web/***
這些資料夾並不需要拷貝,供參考:
# QTS系統會在各個硬碟建立以下資料夾 .qextension .@qmonitor .qulog .@wfm # 當前系統使用中的資料夾,除非特別原因否則保留不變: .@station_config .system_disk_data .log .logs .swap
注意,因為以下操作需時,建議先使用 screen 指令後才執行操作,然後按<CTRL-A>再按<D>脫離執行畫面,這樣就算斷開SSH連線也不會中斷執行,也可以隨時接入screen監察進度。
執行 rsync
指令:
# 進入 Screen screen # 進入舊硬碟位置 cd /share/CACHEDEV2_DATA/ # 為保安全請先使用 --dry Run,檢查後才正式執行 rsync --dry-run -avz --include-from include.txt --exclude '*' . /share/CACHEDEV1_DATA/ # 如正確,正式執行 rsync -avz --include-from include.txt --exclude '*' . /share/CACHEDEV1_DATA/ # --- Rsync 執行中... # 中途可以按 <CTRL-A>再按<D>脫離執行畫面 # 脫離執行畫面後,可列印 screens: screen -ls # 接入執行中的screen screen -x <scrren id>
在新硬碟建立儲存池及磁碟區(Volume)
- 插入新的硬碟到Slot 1 (即 Seagate IronWolf 硬碟),因為支援熱插所以不需要關機
- 確認檢測到新硬碟後,建立儲存池:
- 到 Storage/Snapshots,點擊Create,點擊 New Stroage Pool
- 根據指示在4TB HDD建立儲存池,以下是非預設的參數:
- 不選擇 Qtier and SED
- 選擇 3.5" SATA HDD 1
- RAID Type: Single
- Space allocation:
- Pool Guaranteed Snapshot Space =10%
- Threshold: Disable
- 成功建立儲存池,現在建立磁碟區(Volume)
- 到 Storage/Snapshots,點擊 Create,點擊 New Volume
- 根據指示建立磁碟區,以下是非預設的參數:
- Type = thick volume
- Volume Alias = UserData
- Volume Capacity = (Set to Max)
- Alert threshold = 95%
- 成功建立磁碟區
複製(還原)用戶資料
以admin身份登入SSH,查看以下資料夾的檔案:
- 舊硬碟數據儲存區的根位置:/share/CACHEDEV2_DATA/
- 新磁碟(4TB HDD)數據儲存區的根位置:/share/CACHEDEV3_DATA/
使用rsync
指令複製檔案,include文件位置是:/share/CACHEDEV2_DATA/include-userdata.txt
,內容如下:
homes/*** AutoFiling/*** COAXIAL/*** Download/*** FamilyPhotos/*** FamilyShares/*** Multimedia/*** Public/*** Resources/*** Stuffs/***
執行rsync
指令:
# 進入 Screen (如未有的話) screen # 進入舊硬碟位置 cd /share/CACHEDEV2_DATA/ # 為保安全請先使用 --dry Run,檢查後才正式執行 rsync --dry-run -avz --include-from include-userdata.txt --exclude '*' . /share/CACHEDEV3_DATA/ # 如正確,正式執行 rsync -avz --include-from include-userdata.txt --exclude '*' . /share/CACHEDEV3_DATA/ # --- Rsync 執行中... # 中途可以按 <CTRL-A>再按<D>脫離執行畫面
到此,舊資料基本上還原了。 因為硬體配置作出變,更所以部分設定需要重新配置和檢查。
好為了加快進度可以先關閉:Virtual Station, Container Station, Mutlimedia Console等耗資源的APP。
移除舊硬碟
- 在 Storage & Snapshots 下,再到 Storage/Snapshots,找到舊硬碟的 Storage Pool(即: Storage Pool 2)
- 點擊 Manage 後,選擇 Safely Detaching the pool
- ❌移除失敗,系統沒有提供進一步信息
- 再嘗試點擊 remove storage pool
- ❌仍然移除失敗,出現錯誤訊息:"Fail to destroy DRBD"
- 唯有關機直接物理移除 - 移除 HDD Slot 2 上的4TB HDD
- 重啟後重新執行 remove storage pool,這一次終於成功✅
還原備份用硬碟
- 插入備份用硬碟(即3TB HDD)到 HDD Slot 2,因為支援熱插所以不需要關機
- 確認系統能夠辨認HDD後,掛載舊儲存池(Storage Pool)
- 在 Storage & Snapshots 下,點擊 Storage/VJOB
- 點擊最右方的功能按鈕,點擊 Recover,再點擊 Attach and Recover Storage Pool
- 按指示操作後,原本的Storage Pool就回來了
- 登入SSH,檢查舊檔案是否存在及可讀:
- 發現舊檔案在目錄:
/share/CACHEDEV2_DATA/
✅
- 發現舊檔案在目錄:
- 到File Station:
- 備份用的Shared Folder回復正常 ✅
重新配置:Homes 位置
- 打開 Control Panel ,再到 Users
- 點擊 Advanced Settings,點擊 Home Folder
- 將 Disk Volume 改為UserData磁碟區
重新配置:部份 Shared Folder 位置
- 打開 Control Panel ,再到 Shared Folder
- 點擊需要改變位置的 Shared Folder 的 Edit Properties 按鈕
- 將 Disk Volume 改為UserData磁碟區
- 選擇路徑 Path
- 點擊OK按鈕儲存
清理多餘的資料夾
因為當硬碟插入系統後,系統可能會自動創建資料夾,部分經過手動配置之後,原有自動創建的資料夾就不需要了,所以需要手動刪除:
- 以admin身份登入SSH,利用
ls
或給rm
指令清理多餘的資料夾 - 例如:
- Download
- (用戶資料相關的資料夾)
- 留意以下的目錄是保留在
/share/CACHEDEV1_DATA/
- Browser Station
- Container
- homes (除了 admin 外應該沒有用戶資料)
- Multimedia(系統需要保留,實際資料會存放到另一隻硬碟並用symlink作為連結)
- Public(系統需要保留,實際資料會存放到另一隻硬碟並用symlink作為連結)
- Virtual Station
- Web(系統需要保留)
- 留意以下的目錄是保留在
/share/CACHEDEV3_DATA/
- homes
- Download
- Multimedia(實際存放Multimedia資料位置)
- Public(實際存放Public資料位置)
- (其他用戶資料夾)
快速檢查
到這裡,舊資料應該回來了,餘下的就是檢查NAS是否像之前一樣運作,如有問題就只能復修。對我來說以下是關注的部份:
- 用戶、密碼及用戶設定
- NAS系統設定
- Windows SMB 和 Share Folders
- 能否正常讀寫
- 用戶權限是否保持原樣
- myQNAPCloud 是否運作正常
- Container Station 的Application 是否運作正常
- Virtual Station 的Application 是否運作正常
- Multimedia Console, Photo Station/QuMagie 等
- 索引 (Indexes)是否正常
- 縮圖 (Thumbnail)是否正常
- 人臉辨識資料 (AI Face)是否正常
- Photo Album資料是否正常
以下是今次快速檢查的項目:
- Network & Virtual Switch: ✅
- DDNS -> myQNAPCloud:✅
- myQNAPCloud: ✅
- Access Control = Private:✅
- SSL Certificate:❌
- myQNAPCloudLink:✅
- Notification Center:✅
- Virtual Station:✅
- Container Station:⚠️
- App 啟動:✅
- Images and Volumes:✅
- Containers:⚠️
- 部份Container雖然啓動但運作不正常,經過重啟或者recreate後正常運作
- Shared Folders:✅
- 有“-1”的Folders已經被自動移除
- Multimedia Console:⚠️
- 索引:⚠️
- 部分索引資料及消失了,主要是改到新硬碟的資料夾消失了。
- 手動重新加進去
- 索引數目有些不準確
- 部分索引資料及消失了,主要是改到新硬碟的資料夾消失了。
- 縮圖:✅
- 人臉辨識資料:✅
- Photo Album: ⚠️
- Album存在人但數量不符: ⚠️
- Photo 資料夾消失了: ⚠️
- 就算補回索引部分,Photo 資料夾也沒有出現❌
- 索引:⚠️
修復SSL Certificate
因為SSL Certificate不正常運作也不能用web UI移除,所以需要以admin身份登入SSH手動操作:
# 獲取安裝位置 getcfg QcloudSSLCertificate Install_Path -f /etc/config/qpkg.conf # 位置顯示為: /mnt/ext/opt/QcloudSSLCertificate ls /mnt/ext/opt/QcloudSSLCertificate # 資料夾不存在,這個就是主因 # 移除設定 rmcfg QcloudSSLCertificate -f /etc/config/qpkg.conf
- 檢查APP center,SSL Certificate APP應該被成功移除
- 重新安裝SSL Certificate APP
- 早前的設定還原了,運作正常✅
修復 Multimedia Console
縱使我認為使用了相同的Share folder名稱,可能因為改變了儲存路徑,導致了Multi media Console的索引出現異常,要找出問題並修復可能要花很長時間,幸好對於目前我很少使用相冊以及人臉辨識的資料,所以決定重新安裝 Multimedia Console App,清除所有索引等資料。雖然這一個是我最不希望發生的情況,但已經最低限度減低損失的方法了。
- 到 App Center 移除Multimedia Console App 然後重新安裝
- 先暫停縮圖製作以及人工智能(AI Core)
- 根據以前的設定重新加入索引資料夾
- 等待完成建立索引
- 啟用製作縮圖,等待完成
- 啟用人工智能(AI Core),等待完成
- 重新建立相冊
重新配置:QuLog
- 打開QuLog Center
- 點擊記錄設定
- 再事件記錄設定中,找出「一般設定」「目的地」
- 將目的地改為UserData磁碟區
重新配置:Snapshot
- 打開 Storage & Snapshots ,再到 Storage/Snapshots
- 逐一設定磁碟區的排程:
- SystemAndAppData:每天早上 03:15
- UserData:每天早上 Daily 03:00
有關用戶設定
回復後發現過往使用的雙因驗證(2FA)或者無密碼驗證(Passwordless)會失效,需要重新啟用,所以需要告知用戶重新登入和檢查用戶設定。如果用戶只是使用密碼登入,應該是沒有影響。
後記
- 3-2-1 備份策略(見:什麼是 3-2-1 備份策略? | Seagate 台灣)確實重要!雖然我沒辦法做到全面,但因為我有定時每天把重要的資料備份到另一部舊NAS上,已經安心很多。另外資料分類也很重要,因為這個世代數碼資料膨脹速度十分快,資源(錢+時間)也有限,所以制定資料的重要性/級別,再進行相應的備份策略才是明智,如果不正視這個問題,時間越長越痛苦!
- 不盲從RAID配置是上策。因為今次問題做了幾個實驗,結果證明要取回RAID裡面的資料是十分困難。考慮到未來儲存空間的擴展、用途和成本等問題,確切了解RAID和制訂合適配置方案才是明智之舉。
- NAS原本只是網絡儲存裝置,但近代的NAS付加了太多額外功能,而且廠商會把這些功能整合在系統之內,但卻沒有為這些功能所儲存的數據提供合適的備份方案。例如最令很多用家頭痛的就是「相冊」這一個功能,不難從網絡上見到用戶投訴NAS出問題後「相冊」的資料不能復原,損失很大。
就以今次事件為例,我估計如果我沒有修改儲存位置還有機會可以把所有相冊復原,只可惜我以為不會影響的改動(改動儲存位置但保留路徑不變)卻影響了Multimedia Console這一個應用和連帶的相冊應用(QuMagie, Photo Station)。
未來或許需要自行建立應用服務器,擺脫商家的限制和影響。 - 嘗試過以sector by sector 克隆(Clone) QNAP的內置硬碟,無論是使用Windows的軟件或是使用Linux的Clonezilla,始終無法成功。即是說如果想用克隆方法替換即將會損毀的硬碟或者替換更大的硬碟,很大機會是不會成功。所以為什麼 QNAP建議使用RAID(RAID1)在QTS系統上。這意味著最好購買有4個Bay(可放4個硬碟)的NAS - HDD1和HDD2做RAID1,其餘硬碟放用家資料。
- 今次發現如果使用QNAP儲存池,無論是否只有單一隻硬碟,磁碟分割區(Partition) 一定是 RAID 格式。要讀取這個RAID分割區就需要配對付合的操作系統/硬件。
- 要讀取 QNAP 的 RAID 磁碟區,無論是在NAS直接操作,或是使用個人電腦,都必須使用QTS系統掛載。幸好有大神的努力(請自行上網找,朋友的話請直接找我🤭)才讓我可以在在虛擬機中讀取 QNAP 儲存池中的資料(目前只測試過RAID1/單碟,未試過其他的RAID類型)。
- 今次測試我學懂了一點 Linux 的RAID操作,而部份命令是可以在NAS中使用。花這麼多時間總算值得。