Synology NAS 硬碟“已損毀”、儲存集區降級但S.M.A.R.T.讀數健康是怎麼回事?還能用嗎?

想着花了錢買了NAS組RAID鏡像就能確保珍貴資料丟失?小U前文和大家分享 《 NAS壞硬盤後,我才發現雙盤RAID1並不可靠?!》 ,本文繼續深入探討爲什麼會出現Synology DSM 咇咇響報錯「嚴重」、儲存集區「降級」、硬碟「已損毀」,但SMART自檢卻正常「健康良好」的“奇怪現象”,到底磁盤還能不能用、是硬件壞了還是數據壞了?是HDD損毀還是NAS的機體出現問題?本文請與我一同分析。

網友遇到這個情況還不少

被Synology DSM標註“已損毀”的這個磁盤,在DSM的磁盤管理器中可以查看他的S.M.A.R.T.數值卻顯示是「健康良好」 (什麼是SMART讀數? S.M.A.R.T. 健康度解讀:如何判斷磁盤前期損壞和不能忽視的局限性),這個“互相矛盾“的DSM讓小U第一次遇到NAS壞碟的小U十分頭大,網上搜了一下遇到這個情況的網友還不少:

雖然討論有不少,但是卻找不到一個明確答案:爲什麼DSM就判斷一個「健康良好」的磁盤死刑呢?本來我第一次遇到這個奇怪情況的時候,想着是磁盤已經5年了,壞了也正常,誰知壞了一個Seagate IronWolf之後的3個月又出現同樣的問題。這次我就忍不住了,憑着刨根到底的精神,小U一定要找出問題的真相。

拆出“損壞”磁碟嘗試用電腦讀取

爲了探究到底是磁盤機械性能出錯(硬錯誤),還是文件系統出現問題(軟錯誤),小U把“已損毀”的磁盤拆出來嘗試用電腦去查看裏面的數據。

根據Synology的官方資料 How can I use a PC to recover data when my Synology NAS malfunctions? – Synology Knowledge Center,可以把RAID磁盤拿出來接到Linux電腦上直接讀取,已經組RAID和使用BTRFS文件系統的磁盤都可以支援。教學中提到兩個重要的命令:

mdadm -AsfR && vgchange -ay

這個命令串包含了兩個不同的指令,分別是 mdadm -AsfRvgchange -ay。我將分別解釋每一個指令以及它們所使用的參數:

  1. mdadm -AsfR這個命令用來操作和管理 Linux 上的軟體 RAID 陣列。下面是這個命令中各個參數的解釋:
    • -A: 這個參數表示 “Assemble”,它用來將已存在的 RAID 陣列組合起來。
    • -s: 這個參數表示 “Scan”,它用來掃描所有的已知設備以找到可以用來組裝 RAID 陣列的設備。
    • -f: 這個參數表示 “Force”,它用來強制組裝 RAID 陣列,即使某些設備目前是不活動的。
    • -R: 這個參數表示 “Run”,它用來在組裝後立即運行 RAID 陣列。
  2. vgchange -ay這個命令用來操作和管理 Linux 上的 LVM(Logical Volume Management)系統。下面是這個命令中各個參數的解釋:
    • -a: 這個參數用來設定 volume group 的活動狀態。
    • y: 這個參數用來指示 vgchange 命令應該激活指定的 volume group。

整體來說,這個命令串是用來:

  1. 強制組裝並運行所有已知的 RAID 陣列。
  2. 激活所有的 LVM volume groups。

小U就嘗試用這個命令,看看能否讀取被DSM標註“已損毀”的磁盤。我是把HDD接到電腦,用PROXMOX直通passthrough給Ubuntu虛擬機來執行操作:

RAID陣列中的一個盤(不完整)可以讀取嗎?

小U用官網教程提供的命令執行到12步: cat /proc/mdstat 的時候,並沒有任何輸出。我就想因爲官網教程是要求把所有RAID盤都接到電腦上去,而我只接了一隻,所以認不到。

正當小U以爲這個磁盤已經沒救,要把它format掉的時候,分區系統卻認出了這個是一個RAID1陣列中的一員:

這讓小U又思考自己是否漏了些什麼。看到Reddit的這個討論:2Bay-SHR BRTFS: Can I retrieve data from one drive ONLY via PC : synology (reddit.com),網友說Synology教程的命令是不能處理我這種RAID中單顆磁碟不完整的掛載,要手動掛載。於是小U又再戰硬碟。小U這次並沒有按照官方給出的合併命令,而是分解成每一步來執行。

先來用mdadm --examine看看能否認出是RAID1盤:

確實能認出來(Raid Level: Raid1)。然後我用 lsblk 查看分區表,發現 sdb5下面有一個 md127 的值,網上查詢才發現這個應該就是DSM指定的md磁盤陣列值。

如果直接加載會出現 sdb5 is busy – skipping。需要先 stop 了這個 md陣列,再重新強制加裝。輸入命令後會顯示 /dev/md127 has been started with 1 drive (out of 2).

再用 cat /proc/mdstat 查看 md陣列表,就能看到md127已經運行中。

然後用 vgchange 來加載lvm卷,確實看到vg1000就是lvm的名字,和教學一樣。就來到最後臨門一腳把LVM卷 mount 上去:

結果是不行,顯示BTRFS critical error。再深入查這個 corrupt leaf, open_ctree failed等等的錯誤就已經到了數據修復的專業範疇,小U嘗試了一些簡單的修復命令並沒有能解決,我的研究也到此爲止。

結論是我認爲這個被DSM判定“已損毀”的磁盤是BTRFS的文件系統中的核心信息已經損毀,但是BTRFS並沒有能成功自我修復,導致整個文件系統不能訪問。

BTRFS是不是一個很好的文件系統?

小U對BTRFS在NAS RAID的技術暸解並不夠多,不能發表很全面的評價BTRFS或者對Synology SHR的評價。但是就從我這兩次連續出現“已損壞”的情況來看,我覺得SHR1 on BTRFS是過分的敏感和脆弱。雖然像我前文說到: BTRFS確實是用校驗技術保護數據完整性,但是在SYNOLOGY SHR RAID1中卻會出現因爲BTRFS文件系統的問題而導致整個磁碟不能訪問。在傳統的EXT4和NTFS上,雖然他們沒有校驗,但是如果是某個文件損壞了,就僅限那個文件讀取不了而已,而不會出現整個磁盤無法訪問。我們覺得WINDOWS電腦的磁盤很少壞,也很可能是因爲壞掉的文件剛好不是常用的WINDOWS程序文件,即使壞了也不會察覺。

縮小問題到 “BTRFS是不是一個適合家用NAS的文件系統?” 未必是。我們家庭用戶不希望因爲文件系統校驗信息的錯誤,導致整個磁盤就不能訪問,因小失大。

那有沒有一種文件系統,既能夠提供校驗保護,又能夠在損壞的時候把錯誤限制在單個文件層面,即使有部分文件損壞了,甚至是NAS主機底板燒掉了,我仍然能很方便的把磁盤拿到電腦上讀取,存取到大部分沒有壞掉的文件?

,而且那就是小U新的文件備份方案( “Synology bye!~” )。下文小U再和大家分享。

導致BTRFS頻繁出錯的原因是什麼?

小U在3個月內就連續碰到相同的BTRFS出錯而導致要換硬碟,這讓我懷疑到底是硬碟有問題還是Synology NAS本身的系統或者硬件導致BTRFS文件系統無法正常工作。FACEBOOK和HKEPC上的網友都給了小U很多經驗分享,有兩個重點:

  • 電源不穩定會導致磁盤頻繁出錯
  • Synology NAS內部的積塵可能十分嚴重

小U覺得兩種原因都可能發生在我的NAS上,我的原廠電源已經用了5年,雖然NAS開機時間不長 (爲什麼我不長開NAS: NAS買不買?NAS廠家永遠不會告訴你的3個不要買NAS的原因!)。5年間長期接這電源應該也會讓電容什麼的會有損耗。這個容易解決,買一個更高承載的、多國認證的12V電源就好。原廠是60W (12V 5A),我買了72W (12V 6A)。

然後就要清理DS218+內部的灰塵,大家看圖吧,不想多說了:

Synology DS218+的拆機很不好拆。沒有做濾塵網,所以內部積塵十分十分十分嚴重。碰巧香港春夏潮溼,溼溼的塵會不會造成短路?或者干擾供電?

換了新電源火牛,清乾淨了塵,買了一塊新Toshiba 8T (MG08),報錯的IronWolf 8T代理給我換了個 Recertified 官方翻新貨,我就再看看這個DS218+會不會再損壞磁碟、降級再次發生。

全文總結

這次學到的很多:

第一、SHR on BTRFS不是一個“耐操”的磁盤系統。一旦出錯會導致「小病即死刑」無法提取數據。

第二、Synology NAS的防塵設計、維護設計有待提高,長期使用耐久性有待考究(畢竟原廠保用只有2年)

第三、不能把資料都交給Synology NAS,機外儲存備份很重要。

歡迎你的留言討論:

你可以一針見血

by Upsangel
Logo