Synology NAS 的 USB 外接硬碟在系統中的順序 / HyperBackup 備份後自動卸載該如何重新掛載





為了資料備份的考量,我的 Synology DS1821+ 還外接了幾顆硬碟當作 Hyper Backup 的目的地。其中我有用一種 5 bay 的硬碟槽,如圖,還蠻好用的,搭配 DS1821+ 已經穩定工作快一年,從來沒有發生過無故斷線的問題,而且他本身有提供省電功能,假如一陣子都沒有資料進出某硬碟,就會讓某硬碟睡去,省電安靜也少些廢熱。

Ds1821+ & Orico-6558us3-c

只是有幾個問題:

  1. 這個外接硬碟槽雖然穩定,但我把硬碟裝上去後,他在系統裡面對應的 usbshare? 的那個 ? 數字有點難以捉摸,尤其是五個硬碟槽沒插滿或著跳著用時,好像這數字和硬碟的對應關係還很隨興,無法固定下來(整個理解後知道不是數字編號亂跳,只是不在自己掌控範圍內會有難用),加上我還不只這一組 USB 外接硬碟,還有外接一個 SSD 當作 Download Station 在做 BT 下載時的暫存區(希望BT時很安靜),一共 6 個 USB external device 如果不把這 usbshare? 的路徑給確定下來,那對於備份目的地的路徑來說很是困擾。synology usbshare?
  2. 雖然他標榜可以讓一陣子沒有資料進出的硬碟休眠,我不與 NAS 連接做測試是有效,但是一但連接 NAS 成為共用資料夾 usbshare? 後,就算我 100% 確定沒有去動到他,但是硬碟就是睡不著了,感覺 NAS 可能偶爾就觸碰了一下 usbshare? 導致外接盒不認為可以讓硬碟去休眠,這使得硬碟一直處於運轉狀態,重點是很熱。這個問題搭配接下來的 Hyper Backup 自動卸載後可以完美解決。
  3. Hyper Backup 完以後有自動卸載目的地裝置的功能,這個不錯,比較安全,萬一 NAS 被人入侵想要亂搞我,也不會馬上發現我還有 USB 備份碟。可是接著就會遇到的問題是:卸載後 USB 硬碟還是有供電,也與 NAS 連接著,但是系統中看不到被 Hyper Backup 卸載的目的地外接硬碟,所以想要再次備份時就找不到目的地了,需要有個辦法能夠自動掛載回來,但很確定的是,這自動掛載回來的功能是沒有內建在 Synology NAS 中的。synology-usb-auto-unmount

最後這些問題我都解決了,這邊做個筆記,給有需要的人參考一下囉!

環境準備與必需技能

我不會一步一步講得非常詳細,請自行 Google 上網需要的技能。如果您發現以下文字都看不懂,建議您就放棄,不要自己來,畢竟以下動作都牽涉到非原廠建議的行為,弄亂了只會給自己帶來更大的災難。

您需要了解以下知識技能:

  1. 開啟 NAS 的 SSH 登入功能。
  2. 理解 Synology NAS 系統管理者與 Linux root 帳號的差異。
  3. 理解 Linux 的基本操作。
  4. 理解 vi 文字編輯器。

如何固定下來 USB 外接硬碟在 Synology NAS 中的順序編號?

把你所有需要連接到 NAS 的外接硬碟都插好,確保在控制台的外接裝置中都看到他們了:

synology-external-device

接著用你在 NAS 上有管理員權限的帳號,以 SSH 登入 NAS,sudo -i 或 sudo su 切換成 root 繼續做事。

用 vi 編輯 /usr/syno/etc/usbno_guid.map

vi /usr/syno/etc/usbno_guid.map

然後你就會看到類似這樣的資訊,以下是我的狀況,您的一定不會與我一樣。左邊編號就是共用資料夾 usbshare? 的 ?,右邊序號是您的 USB 裝置辨識碼,編輯內容成您想要的硬碟順序。

1="DD564198838B40"
2="DD564198838B41"
3="DD564198838B42"
4="DD564198838B43"
5="DD564198838B44"
6="43564C543632373130363841323430430"

以我那個 5 bay 的硬碟槽來說,其實可以看到就尾碼 0-4 不同,前面一堆數字英文都是一樣的,我稍微反覆插拔一下就會知道這個順序就是硬碟槽從右至左編號 0-4。所以哪一個硬碟想要在 usbshare? 就很清楚明瞭了。您如果也有這種多槽的 USB 外接裝置,不妨透過這裡來驗證編號順序的方向。

接下來是有點重要的操作順序,就是編輯好的 /usr/syno/etc/usbno_guid.map 檔案,別急著在 vi 中存檔離開,請先保持著 vi 仍在編輯的狀態,然後操作你的 NAS 把所有的外接硬碟全部安全退出,接著才保存這個檔。那麼下次當 USB 硬碟重新插入系統時,就會按照這個檔案的順序給定好 usbshare?,不再難以掌控。

如何在備份開始前或有需要時,以自動或指令方式將卸載的 USB 硬碟掛載回來?

我在國外的 Synology 論壇曾經找到這樣的解答:

for scsi_host in /sys/class/scsi_host/host*/scan; do echo "- - -" > ${scsi_host}; done

說 USB 裝置在 Synology 裡面被視為 SCSI 裝置,利用這個 script 可以把所有的 USB 裝置重新連上。我測試了一下算半對。如果您是手動從控制台的外接裝置中,把 USB Disk 點選 退出 的話,那用此法確實可以把  USB disk 重新掛回。但是我發現被 Hyper Backup 備份完後主動予以卸載的 USB disk 是沒辦法透過這段 script 重新掛回的,所以需要更好的答案,以下是我查到並驗證過後的可行辦法:

用 lsusb 查出你的 USB 裝置是 usb?,以下是我的狀況:

synology-usb-lsusb

雖然訊息又多又雜,但慢慢可以看出有著 DD564198838B4 的 usb2-2 是我那個 5 bay 的硬碟槽裝置。

附帶一提,lsusb 這個工具還可以提供色彩豐富的表示法,以及更多的資訊,舉例 lsusb -c -I -e 可以這樣:

synology usb lsusb color

回到主題,只要指定 2-2 或上層的 usb2 就可以用指令掛載(不是上圖中的黃色 usb2,是左邊樹狀結構中的 usb2:

echo 1 > /sys/bus/usb/devices/2-2/authorized

大概一分鐘內就會看到您的 USB disk 陸續出現在控制台的外接裝置中了,共用資料夾也都會自動出現。

我反覆測試了幾天 Hyper Backup 備份後自動 unmount USB,並且在下次備份開始前自動掛載這件情,最後我發現需要這樣子搭配才會 100% 重新掛回裝置:

echo 0 > /sys/bus/usb/devices/2-2/authorized
echo 1 > /sys/bus/usb/devices/2-2/authorized

也就是需要補一個 unmount 的指令,再 mount,這樣才能保證一定會掛起來。我也不知道為什麼會這樣,如果您只要靠一行指令就能穩定掛起當然就不用像我一樣。

補充:echo “2-2” > /sys/bus/usb/drivers/usb/unbind 這樣也有一樣可以卸載的效果。

手動測試沒問題的話,可以把適用您的這段 script 用控制台的 任務排程表 建立起來,設定在您第一個 Hyper Backup 任務開始前的兩分鐘,應該是很足夠的了:

synology-usb-mount-scheduled

還是要溫馨提醒,我的環境是 usb22-2,您不一定是這個,請務必自己查好,不要直接照抄我的啊!

裝置名稱 usb2 與 2-2 有什麼不同?

以我的 DS1821+ 來說,usb2 就是機身後面那三個 USB 3.2 Gen 1 TYPE-A 插座。所以在上述指令中如果是指定 usb2,則這三個 USB 插座上的裝置都會被重新偵測掛回系統。

指定 2-2 則確定只有我那個 5 bay 的外接槽上的所有硬碟會被重新偵測掛回系統。

對我來說,因為我機身後面的三個 USB 3.2 Gen 1 只用到了一個,所以我指定 usb2 或 2-2,最終的效果都一樣。如果你有多個 USB 外接硬碟插滿了 NAS 機身,就要斟酌仔細考慮要重新偵測掛回的是那些裝置了。

也是透過 lsusb 指令與反覆在不同的 USB port 上插拔我的設備,我逐漸看出來 DS1821+ 機身後面的三個 USB 3.2 Gen 1 插座可以視為是用一個 USB HUB 擴充出來的,所以我發現將外接的 BT 暫存用 SSD 改插到背後時,就會與 5 bay 硬碟槽互相影響,拖慢彼此的速度。因此為了效能的考量,我是把 SSD 插到 DS1821+ 正面的 USB 3.2 Gen 1 上(本文第一張照片也可以看出來),也就是 lsusb 指令看到的 usb4 裝置,這樣它們就有獨立的頻寬,不會彼此影響。

附帶一提,透過 lsusb 還看出來一件事情,就是 Synology NAS 的開機前導區是以 USB 2.0 的方式存在於主機板上(我 lsusb 結果中的 3-2 或黃色的 synoboot),這也就是一堆黑群暉為什麼要你把破解過的前導程式裝在 USB 裡面去開機的原因了。如果你前陣子升級過 DSM 6.x -> 7.x,其中有部分動作就是來更新這一塊你看不到的 USB 碟。

如何用指令把 USB disk 給卸載?

呈上段已經知道,echo > 0 就是卸載,例如這樣是會一口氣卸載我的 5 bay 硬碟盒內的所有硬碟:

echo 0 > /sys/bus/usb/devices/2-2/authorized

但平常不建議這樣操作,因為這樣的動作就等於直接拔掉 USB 電纜線或斷電一樣,會收到系統警告與通知信,無端生事啊!所以知道這是暴力卸載的方法就好,應避免使用,或者是確認都已經安全退出後,再用這個指令就沒有關係,就像我上一段,是為了要成功掛起已經卸載的硬碟們,所以先 echo 0 > 一下,這是安全的。

平常想要安全卸載/退出,請操作 Synology NAS 的 控制台外接裝置退出(eject) 處理。

但如果您就是想要用指令來安全卸載或退出呢?只是稍微麻煩一點,自己斟酌看看囉!要查的檔案是 /tmp/usbtab,會用到的工具是 synousbdisk 。

synology-usb-command-mount-umount

這裡用到 Synology 自己為 USB disk 撰寫的工具,而 usb? 名稱並沒有與共用資料夾 usbshare? 有編號一定相同的對應關係,所以需要自行確認。

或者再看一次剛才那張 lsusb -c -I -e 的圖,彩色版 lsusb 挑黃色括號內的字來看,與 /tmp/usbtab 是一樣的事情,就是 synousbdisk 要卸載的對應名稱。

synology usb lsusb color

echo 1 > /…/usb?/authorized 來掛載 USB disk 和用 synousbdisk 來掛載 USB disk 有什麼不同?

細心的人可能發現我上面講了兩種指令掛載 USB disk 的方法,這兩種方法有什麼不同呢?

如果您的每一個 USB disk 都是一個獨立的裝置,那這兩種方法的最終效果沒有什麼不同。

但我那個 5 bay 的外接硬碟槽就有一點不一樣了。

echo 1 > /…/usb?/authorized 的方式等於是一口氣把我那 5 個 bay 裡面所有的硬碟全部接上,所以一個指令,一口氣接好 5 個硬碟。就好像你把 USB 線插入 NAS 後自然會一口氣抓到 5 個硬碟一樣。

而 synousbdisk 則是一個一個硬碟仔細的對應要掛載還是卸載。所以如果我用 synousbdisk 來掛載那個 5 bay 硬碟槽,就需要 5 次指令,而且我還需要先確認每一個硬碟的名稱是 usb?,並不一定就是 0-4 或 1-5,甚至會跳號都有可能。

Orico 6558us3-c-1 5 bay 硬碟外接盒

寫在文末,順便分享一下我這個硬碟外接盒,簡單好用最重要的是穩定,且可以讓一陣子沒資料進出的硬碟進入休眠,省電安靜又不會產生龐大廢熱,給有需要的人參考囉!

這個 5 bay 的外接盒是 Orico 6558us3-c-1,我當時是在蝦皮找到 NT$3110。本身也有硬碟對拷機的功能,不過我當然是沒用上。從機身上的標示看來硬碟順序是從左至右,但是在 USB 的編號卻是從右至左。

Orico 6558us3-c-1

Orico 6558us3-c-1

Orico 6558us3-c-1

Orico 6558us3-c-1

卸載外接硬碟省了多少電?

我將 TP-Link 的 HS110 智慧插座接在市電與 Orico 6558us3-c-1 硬碟外接盒之間來觀察消耗的電力。

Orico USB Power Saving

  • USB硬碟待機:外接盒連接 NAS 並且在 NAS 中看得到外接盒內的所有硬碟對應的 usbshare? 共用資料夾。
  • USB硬碟卸載:是指 Hyper Backup 完後的自動卸載外接裝置,或者從 NAS 的控制台->外接裝置->將硬碟一一卸載後的狀態,此時所有外接硬碟不但有通電且馬達旋轉中,硬碟會發熱,但是在 NAS 中看不到 usbshare? 的共用資料夾。
  • USB硬碟休眠:除於上述卸載狀態一陣子後,外接盒會將硬碟休眠,停止硬碟的馬達運作,硬碟會逐漸降溫下來。

當作 40W 降到 7W 好了,這降幅還蠻可觀的,而且省電、少廢熱、安靜,所以外接盒能夠提供硬碟休眠功能還是挺實用的。

歷史上的今天...


You may also like...

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。

:D 
:) 
:( 
:| 
(H) 
:P 
:$ 
:\ 
*-) 
;) 
:-.-: 
:!: 
:S 
:!!: 
[B01] 
[B02] 
[B03] 
[B04] 
[B05] 
[B06] 
[B07] 
[B08] 
[B09] 
[B10] 
[B11] 
[B12] 
[B13] 
[B14] 
[XP] 
:XD 
(Y) 
(N) 
:-O 
:@ 
8o| 
:-# 
(L) 
(U) 
^o) 
|-)