12 months ago

前言

隨著使用時間越來越久,磁碟的容量也漸漸不夠用了,又加上一開始創立儲存空間的時候手殘選到了 SHR,導致沒辦法手動選擇我要的 RAID 型態,因此決定趁 Seagate 硬碟特價來升級。

在升級之前也猶豫了很久,究竟要選擇 Raid 5 還是 Raid 6,兩者各有優缺,對於只有四顆硬碟的我選擇 Raid 6 就只剩下兩顆硬碟的容量可以用,也是有點傷,但經過多方面的詢問,Raid 5 的死亡率比我想像的還要高一些,後來還是決定採用Raid6來保護我的資料。

升級流程規劃

Synology 並沒有提供簡單的轉換儲存空間方法,不能無腦一鍵轉換,而直接無腦把整個 volume1 的東西丟到 volume2 然後期待一切可以順利的心臟實在太大顆了,因此我決定採取比較漸進式的轉移方法:

  • 先將所有 shared folder 都轉到 volume2 上
  • 用 Hyper Backup 備份所有套件
  • 移除所有套件,重新安裝在 volume2
  • 還原所有套件
  • 移除 volume1
  • 將 volume2 從 Raid 1 改為 Raid 5
  • 將 volume2 從 Raid 5 改為 Raid 6

列出來之後發現真的是一個大工程,大概要耗掉很多時間,且一定會有不少的 down-time,但硬碟都買了,儲存空間也是真的不夠,只好硬著頭皮衝了

開始

一開始就發現事情沒那麼簡單,因為搬移 volume 沒辦法一次搬移,只能一個一個搬,也沒辦法排程,因此會花很多時間在等待搬移並準備搬下一個,一開始先搬一些不會影響到服務的 share 例如 backup / download 之類的,這步驟還算簡單輕鬆。

接著為了節省時間,在搬移 share 的過程中也順便移除一些不相關的套件,如 Text Editor 這種就算砍掉重裝也不會掉資料,並一一安裝到 volume2 上。

Docker

接著開始轉移 Docker,在 Docker 上我跑了一個網站、Redis、兩個 proxy server,都是有挖進 container 做一些修改,所以不能直接重新載 image 下來使用,搬移 share 並把 Docker 重新安裝到 volume2 之後發現 -- 所有 container 和 images 全掉了...

趕快關掉 nas 重新打開,一切都是假的,是業障太重。
/volume1 下面看了一下發現 @docker 這資料夾有 87% 像是存 image 和 container 的地方,趕緊複製到 volume2 重新打開 docker,結果服務再起不能...

看了一下 /var/log/message 發現沒有任何資訊, /var/log/synopkg.log 也沒有甚麼有幫助的資訊,直接執行看看 /var/packages/Docker/scripts/start-stop-status start 之後發現錯誤 :

ERRO[0000] Failed to GetDriver graph btrfs /lxc/docker  
FATA[0000] Error starting daemon: error initializing graphdriver: driver not supported 

稍微 google 了一下發現是 aufs 不能在 btrfs 上執行的錯誤,因為之前 volume1 是使用 ext4 檔案格式,而 volume2 是用 btrfs ,導致之前的 container / image 沒辦法直接在新的 btrfs 上使用。這聽起來很棘手,但或許我可以試試先安裝回 volume1 ,然後用 docker export 把 container 倒出來,再用 import 把它倒回去,這樣就可以完成 Docker 的轉移,只是 port 那些要重新設定稍微麻煩了一點。

Cloud Station Server

Cloud statoin server 要移轉也很簡單,先在設定裡面選取 volume2 之後解安裝重裝即可

MariaDB / pgsql

其中讓我最棘手的莫過於 postgres 和 MariaDB 了
postgres 是系統內建且沒支援備份就算了,MariaDB 我用 Hyper backup 進行 restore 也重裝到 volume2 之後,居然還是 link 到 /volume1/@database/mysql,解決方法和 postgres 一樣,就是先停用之後複製到 volume2 再改 symbolic link

root> synopkg stop MariaDB
root> rsync -PavxH /volume1/\@database/mysql /volume2/\@database
root> rm /var/packages/MariaDB/target/mysql
root> ln -s /volume2/\@database/mysql /var/packages/MariaDB/target/mysql
root> synopkg start MariaDB

PostgresSQL 則是

root> initctl stop pgsql
root> rsync -PavxH /volume1/\@database/pgsql /volume2/\@database
root> rm /var/services/pgsql
root> ln -s /volume2/\@database/pgsql /var/services/pgsql
root> initctl start MariaDB

接著把其餘所有套件備份還原、安裝到 volume2 之後總算可以成功按下 raid1 -> raid5 了,接著再按下 raid5 -> raid6 就大功告成囉!

結語

總之在一開始買回 nas 之後要好好想清楚之後要用的檔案型態以及硬碟型態,不要傻傻的選擇 SHR 之後就會欲哭無淚 Q_Q
升級的過程無比艱辛,還好最後在沒有掉資料的情況之下完成升級

 
comments powered by Disqus