iWIN 必須被解散!

Weil Jimmer's BlogWeil Jimmer's Blog


Category:General

Found 59 records. At Page 1 / 12.

[筆記] Git 快速入門教學

No Comments
-
更新於 2024-04-28 23:25:19

前言

最近用 Git 用得很順手,但同事們都是用 SVN,不怎麼熟 Git,打這篇文章順便是幫自己複習,寫筆記作為紀錄以免自己忘記,也能順便讓他們當成教學。

簡介

Git 克隆下來的本機儲存庫,其結構通常是不僅僅有 .git 的隱藏資料夾,也包括工作目錄的(就是你的原始碼),如下圖左側的橘色區域。

而遠端儲存庫通常是沒有工作目錄的「裸」儲存庫,也就是 .git 資料夾內的內容。

Git 本機目錄,主要分為三個區域,工作目錄、暫存區、儲存庫,你的程式碼都在工作目錄,儲存庫保存的是你的完整歷史紀錄,你可以理解成「精簡過 (不重複檔案)」的所有版本的所有程式碼快照內容。

所以只要歷史紀錄還在,隨時都可以還原成各種版本,每次 commit 相當於一個快照,並且是去中心化的,即使離線也可以 commit。

常見的流程

  1. 修改工作目錄的程式碼。
  2. 儲存檔案到工作目錄。
  3. 使用 git add 將程式碼加入到暫存區。
  4. 使用 git commit 建立一個提交(類似快照)。
  5. 使用 git pull --rebase 將遠端儲存庫拉取最新進度合併。
  6. 最後用 git push 上傳到遠端儲存庫。

下面介紹各種指令。

常用指令

git clone

複製克隆一個倉庫。


git clone <repo_url> <folder_name>
git clone http://192.168.2.5/git/project.git project

git init

初始化一個倉庫,會自動建立 .git 資料夾。

git init

如果要建立裸倉庫當伺服端,需加上 --bare

git init --bare

git remote

查看遠端有哪些儲存庫,只下 git remote 通常只會看到遠端儲存庫的命名。

用下面的命令可以看到更完整的路徑。

git remote -v

添加新的遠端儲存庫。

git remote add <origin_name> <repo_url>

修改當前 origin 的遠端儲存庫的位置,如果伺服器 IP 有變,或網址有異動。

git remote set-url <orgin_name> <new_repo_url>

git log

查看目前的 commit 歷史紀錄。

git log

用下面的指令能看到比較完整的包含線圖的 log。

git log --oneline --graph

我在網路上有找到更加華麗的客製化命令。

git config --global alias.lg1 "log --graph --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(dim white)- %an%C(reset)%C(auto)%d%C(reset)' --all"
git config --global alias.lg2 "log --graph --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold cyan)%aD%C(reset) %C(bold green)(%ar)%C(reset)%C(auto)%d%C(reset)%n''          %C(white)%s%C(reset) %C(dim white)- %an%C(reset)'"
git config --global alias.lg lg1

顯示歷史紀錄中的簽章資訊,如果有用 PGP 簽名的話會顯示出來。

git log --show-signature

git fetch

抓取遠端儲存庫至本機儲存庫。

git fetch

如果要抓取所有遠端儲存庫的所有分支。

git fetch --all

如果也要抓取遠端儲存庫的所有標籤(Tag)。

git fetch --tags

git merge

合併分支

假如當前在 master 分支,要合併目標分支 branch_name。

git merge <branch_name>

要合併包括目標 commit 之前的所有提交。

git merge <commit_hash>

普通合併如下圖:

舉例:master 分支的紀錄是 A←B←C←D←E (HEAD),在 D 點開始分岔,產生新分支 feature,紀錄為 A←B←C←D←F←G (HEAD)。

在 master 上執行合併後,會產生 H 點,其父節點為 E、G,只有 master 包含 H 點提交,而 feature 分支不包含 H 點提交。

此時,master 上的分支紀錄變成 A←B←C←D←E←H (HEAD),而 feature 上的分支紀錄還是原本的紀錄:A←B←C←D←F←G (HEAD)。

如果不能快轉合併的話,這是 Git 的預設動作,下面介紹快轉合併。

快轉合併 (Fast-forward Merge)

快轉合併發生在目標分支的分岔點在來源分支中為 HEAD,來源分支分岔點之後正好沒有新的提交,那就可以進行快轉(快進)合併。

舉例:master 分支的紀錄是 A←B←C←D (HEAD),在 D 點開始分岔,產生新分支 feature,其紀錄為 A←B←C←D←E←F (HEAD)。

在 master 上執行後,通常是自動快轉合併,master 分支的 HEAD 會直接移動到 F,變成 A←B←C←D←E←F (HEAD)。兩條分支都會包含 E、F 點提交。

下面介紹 Rebase 合併。

git rebase

Rebase 合併能夠讓線圖呈現線性的,歷史線圖比較簡潔、清楚明瞭,在 commit 數量很大量、團隊人數很多,可能會導致線圖很亂的情況下,推薦採用這個方法。

git rebase <branch_name>

舉例:master 分支的紀錄是 A←B←C←D←E (HEAD),在 D 點開始分岔,產生新分支 feature,紀錄為 A←B←C←D←F←G (HEAD)。

在 feature 分支上執行 git rebase master 時,會將 feature 分支從 D 點開始的提交(F 和 G)重新應用於 master 分支的最新提交 E 之後。這樣,feature 分支的提交基底變為 E,並重新應用這些變更以形成新的提交 F' 和 G'。

合併後 feature 分支會變成 A←B←C←D←E←F'←G'。而 master 分支還是原來的 A←B←C←D←E,除非切換成 master 分支後,執行 git merge feature,才會使得 master 分支變成 A←B←C←D←E←F'←G'。

git pull

將本機的進度拉到最新。git pull 相當於 git fetch + git merge

git pull

在進行 git pull 時,Rebase 合併通常不是預設值,如果在拉取遠端儲存庫進行合併時,遇到建立新提交點的狀況,可以使用上面提到的 --rebase 參數,使得提交線圖呈現線性的,較為美觀以及清楚明瞭。

git pull --rebase

git add

將目標檔案加入到暫存區,如果在工作目錄建立一個新檔案,但沒有下 git add,是無法 commit 的,Git 會認為沒有變更所以無法 commit。

git add <...files>

加入所有已經追蹤但修改過的檔案到暫存區,不存在的檔案會被視為不追蹤。

git add -u

下面的指令會把已經不存在的檔案視為不追蹤,任何新添加的檔案加入到追蹤,相當於將目錄的所有檔案整個提交到暫存區。

git add -A

git rm

git rm 用於從工作目錄中刪除文件並將此刪除操作記錄到暫存區中,基本上是 git add 的反向操作。當你執行 git rm <file> 時,該文件將從你的工作目錄和索引(暫存區)中被移除。

git rm <...files>

如果你想從 Git 的追蹤中移除文件但仍想保留它在工作目錄中的物理文件,可使用 --cached

git rm --cached <...files>

git mv

檔案重命名。

git mv old_filename new_filename

git status

查看當前的工作區與暫存區狀態。能通過這指令了解哪些檔案已經修改了,有沒有加入暫存區等。

git status

如果你的工作目錄太多沒有被追蹤的檔案,而你不想看到它,可以使用 -uno 參數。

git status -uno

git commit

將目前的暫存區的變更套用提交至儲存庫,相當於一次快照。通常情況下,不允許空提交(暫存區未有變更的狀態)。

git commit -m 'update message'

將有變更的已追蹤的檔案自動加入到暫存區,不包括全新創建的文件,會把已追蹤但不存在的檔案視為不追蹤。

下面這個指令我非常非常常用。

git commit -a -m 'update messsage'

如果不小心發現打錯 commit 訊息,想要修改的話,可以使用 --amend,可以讓你修改最後一則 commit 的訊息。

git commit --amend

但如果你已經先 push 歷史紀錄上去遠端儲存庫的話,那麼已經來不及了,下這個指令的話只會導致你跟遠端分支不同步,產生分歧。

如果要進行簽章的話,可以加上 -S (大寫)。如果用小寫(-s)的話,commit的訊息會多出類似下面的訊息:

Signed-off-by: Weil Jimmer <me@weils.net>

加上 --allow-empty 可以允許沒有任何變更,卻能 commit。

git commit --allow-empty -m 'message'

git push

將本機的歷史紀錄推送到遠端儲存庫。

git push

如果要完整一點,比如指定遠端儲存庫,因為遠端可能有很多個,或是要指定分支。

git push <origin_name> <branch_name>

加上 -u 能夠修改預設的上游遠端儲存庫。

git push -u <origin_name> <branch_name>

如果被 reject 的話,建議可以下 git pull,更新一下歷史紀錄,然後再重新推送。

推送標籤。預設狀態下,標籤是不會跟著一起被推送出去。要推送標籤的話,加上 --tags

git push --tags

預設狀況下,只會推送當前的分支,如果要推送全部分支,加上 --all

git push --all

如果要刪除遠端儲存庫的分支或標籤,可以用 --delete 參數。

git push --delete origin <branch_name | tagname>

如果要鏡像儲存庫的話,可以使用 --mirror

git push <repo-url> --mirror

下面是危險指令,強制推送(Force Push)本機儲存庫到遠端儲存庫,會覆蓋掉遠端儲存庫的歷史紀錄,即便遠端有最新的進度,仍然會被蓋成跟你本機一樣的紀錄。

使用這指令,有可能導致組員的工作進度被你清洗掉,也可能導致接下來團隊的歷史紀錄出現混亂、不同步。

要使用前,先清楚知道你自己在做什麼,先確定沒有別人在推送,而且你的進度是最新的,沒有分岔,別人能夠正常銜接上去。

git push -f

通常現代化的 Git Server 會有分支保護,會阻止強制推送。

git reset

reset 通常用於退版本用,如果要查看特定 commit 的內容會用 git checkout

reset 有分三種狀態,soft、mixed、hard,預設值是 mixed。

--soft

這個指令,會把你的 HEAD 移到目標 commit,但是不會改變暫存區和工作目錄。如果較新的 commit 有新的檔案,仍然會在暫存區內。

git reset <commit_hash> --soft
--mixed

這是預設的模式,會把你的 HEAD 到目標 commit,但是不會改變工作目錄,會清空先前 commit 的暫存區,使得暫存區與目標 commit 一致。

git reset <commit_hash>
--hard

這是危險指令,它會把你的工作目錄(即便你有已經儲存到文件上的修改),全部重置到目標 commit,使得工作目錄與目標 commit 完全一致,會讓你已儲存但未 commit 的程式碼徹底丟失,並且無法通過 git reflog 恢復。

git reset <commit_hash> --hard

git reflog

Git 的復原紀錄的大絕招,如果某些 commit 已經因為被刪除標籤或因為 reset 看不到歷史紀錄,可以嘗試使用它。

能夠找回之前的 commit,只要有找到 commit hash,就基本上能還原。

git reflog

如果你想要找回的東西並沒有 commit hash,而且使用了 git reset --hard 造成程式碼的丟失,是無法用這個指令復原的。

git tag

替當前 commit 加上標籤。

git tag <tagname>

指定 commit 加上標籤。

git tag <tagname> <commit_hash>

刪除本機儲存庫上的標籤。

git tag -d <tagname>

如果要把 Tag 也加上簽章,可以使用參數 -s

Tag 名稱是不可以重複存在的,即使分支不同也不能重名。

git branch

Git 分支相比 SVN 很廉價的,不會複製很多個儲存庫,只佔幾個 bytes 而已,可以不用擔心空間問題。

下面的命令能查看本機有哪些分支,並且查看現在在哪個分支。

git branch

可以查看遠端儲存庫有哪些分支。

git branch -r

建立分支。

git branch <branch_name>

刪除本機儲存庫的分支。

git branch -d <branch_name>

git checkout

切換分支到 branch_name。

git checkout <branch_name>

查看特定 commit 或 tag 的內容。

git checkout <commit_hash | tagname>

使用上面這個指令的話,HEAD 會移動到目標 commit,會進入斷頭狀態(detached HEAD),如果在這裡 commit 的話,會從這邊長出一個新的 commit。(但是沒有分支指向它。)

下面這個指令是創建一個分支 branch_name,並切換過去。

git checkout -b <branch_name>

git stash

如果當前目錄已經正在修改,但是又還不能 commit,這時候無法使用 checkout,可以使用下面的指令先暫存起來。

git stash

還原先前的草稿。

git stash pop

查看當前暫存起來的列表。

git stash list

清除所有暫存內容。

git stash clear

git gc

清除無用多餘的紀錄。基本上一個分歧的紀錄,如果沒有分支指向它並長達一段時間,就會被清除掉。

一個無法到達的 commit 也會被清除,例如:通過 reset 退版本,然後重新 commit 的狀態,先前 commit 的歷史紀錄都會是無法到達。

git gc

解決衝突 (Conflict)

如果在 git pull 之後出現類似下面的訊息:

CONFLICT (content): Merge conflict in xxx.txt
Automatic merge failed; fix conflicts and then commit the result.

通常情況下,那代表,別人修改了跟你相同檔案中的同一行,要先手動解決衝突。

如果使用 VSCode 之類的編輯器,會很貼心的幫你找出衝突的地方並給出比較。

像是這樣:

<<<<<<< HEAD
我的修改
=======
別人的修改
>>>>>>> 75f66a4b22c06e2526b9ab01689b3becfdbf6c93

編輯器會讓你選擇要套用哪種變更,或是你自行修改,修改完之後,使用 git add 重新 commit 一個紀錄後,即可再次 git push 推送上去。

總結:

Git 最常用的指令不外乎是 git clone/pull/push/add/commit,其他的基本上不太會用到,只要把握好幾個基礎指令的用法,已經能應對大多數狀況了。

By Weil Jimmer


This entry was posted in General, Git, Note By Weil Jimmer.

[筆記] 解決 Git 錯誤 fatal: repository <http://git-url> not found 的問題

No Comments
-
更新於 2024-04-21 12:30:13

問題:

最近遇到了一個從沒見過的錯誤,為此特別紀錄一下,明明已經初始化 git 倉庫,卻沒辦法從遠端經由 HTTP 進行 pull、clone、push 等動作。

會出現下面的錯誤:

fatal: repository 'http://xxxxxxx/xxx.git/' not found

但是實際上目錄是有資料的,不論是初始化過的或是直接複製 .git 資料夾都沒辦法正常的 clone 或 push。

解決方法:

直接開門見山,講重點,只是因為伺服端建倉庫時少下一個指令:

git update-server-info

只要下完這個指令後,git 會進行一系列更新或建立索引的動作(建立objects/info/packs),類似於建立一個檔案目錄清單的動作。

之後,從遠端伺服器就可以透過 HTTP clone 下 repo 了。

原由:

其實會發生這個問題的主因在於伺服端不是 Smart HTTP server。

Smart HTTP vs. Dumb HTTP:

  • Smart HTTP: 支援 Git 所有功能的 HTTP 協定實現,例如 git push、git pull 等操作。 需要專門的伺服器軟體,例如 Gitea、GitLab、GitHub 等。
  • Dumb HTTP: 僅支援基本的 HTTP 檔案下載功能,無法進行 git push 等操作。 通常用於簡單的 Git 倉庫發布,例如靜態網站。

Dumb HTTP 只是提供簡單的網頁儲存託管倉庫而已。

By Weil Jimmer


This entry was posted in General, Experience, Git, Note By Weil Jimmer.

深入研究 iWin 網路封鎖的模式 以及 如何免 VPN 繞過網路封鎖

No Comments
-
發布於 2024-03-09 15:46:59

前言

最近我朋友向我抱怨,iWin 此舉竟然開始影響到他的生活,讓他覺得很幹。我個人也是這麼覺得的,既然剛好有這個案例,何不來深入研究呢,前幾日本該發文的,不過身體不舒服就懶得發文了,一直沒什麼時間,現在忙太多專案,沒什麼空。

釐清

首先呢,avhu.com 這組網域被封鎖了,依照朋友提供給我的圖片是這樣。

第一直覺應該不是擋 IP 而是擋解析,先嘗試用了一下 VPN 發現完全正常,解除了 VPN 後,發現還是能正常訪問,讓我懷疑了一下是否真有封鎖?

原來,只是因為我自己本身的網路就不是走中華的 DNS ,最終確定,應該是 DNS 汙染無誤。

DNS 汙染

何謂 DNS 污染呢,上網搜尋應該會有一大堆文章,這邊也不細說太多,基本上對岸的防火長城有一部分阻擋的方法就是 DNS 汙染。

各位在瀏覽網頁時,都會需要將網域名稱(例如weils.net)轉換成 IP (例如123.123.123.123),然後再發送封包到目的地IP。

而 DNS 服務就是為了讓人查詢正確的 IP 是多少,使用者會去詢問這個網域他的 IP 是多少呢?DNS 伺服器才會返回正確的 IP 給使用者,這樣使用者才可以連線。

那 DNS 汙染又是什麼?只要在 DNS 伺服器投毒,讓上游的伺服器給出錯誤的 IP 地址,那你就沒辦法連線到正確的網站,會被導向到他所給予的錯誤 IP 地址,以至於無法訪問你要去的網站。

基本上 iWin 的所作所為就是 DNS 汙染,只感染國內的 ISP 業者提供的 DNS,例如中華電信的 DNS 被汙染了。

以上圖為例,如果將 DNS 伺服器設定為 中華電信 DNS。

我查詢了 weils.net 返回的結果,完全是正常的 IP 位置,也就是他是正確的 IP 地址。

而一旦查詢 avhu.com 則返回錯誤的地址(被汙染的結果)。

反之,如果我將 DNS 伺服器設定為 Google DNS,進行查詢。

結果會截然相反,avhu.com 返回的 IP 會是他原本正確的 IP。

而 IP 150.242.101.120 直接訪問的話會到下圖這個網站。

由此可知,目前的阻擋方法是屬於落後的 DNS 汙染,並沒有解析封包,攔截 SNI Host,如果這麼做的話,成本也有點太大。

解決方法

只要了解原理,基本上這種低能方法,只要改個 DNS 就可以繞過了,比如換成 Google DNS,或是其他國外的 DNS,任何一個能夠查詢到權威紀錄的 DNS 就可以了。

直接去「控制台」,找到網路和共用中心,點乙太網路,然後再點「內容」,設定IPv4,把 DNS 修改為 8.8.8.8 及 8.8.4.4 (Google DNS) 即可繞過封鎖。

就這麼簡單,沒什麼難度。

By Weil Jimmer


This entry was posted in General, Experience, The Internet By Weil Jimmer.

RAID 陣列降級與重建:一個自組 NAS 使用者的親身經驗 Truenas Scale

No Comments
-
更新於 2024-04-20 22:29:32

前言

記得上次組完 NAS 經過了約略一個月半,五十天左右的時間,沒想到我的二手硬碟就出事了(果然便宜沒好貨,其實是我人品太差了),就順便來寫篇文章記錄一下。

原本還期望大概可以撐個一兩年再開始慢慢換硬碟的說,沒想到兩個月不到就壞了一顆硬碟。

簡單來說就是週日下午,突然聽到很吵的聲音,正思考是什麼東西發出來的,仔細聽才發現是 NAS 傳來的,是那種磁頭反覆到硬碟上讀不到資料又復位的感覺(聲音非常像下面的影片),一聽到這聲音我就覺得這硬碟大概是沒救了。

既然沒救了,我就先提前拔掉硬碟,並且火速上網買了 ST6000NT001,而 NAS 直接呈現「降級狀態(DEGRADED)」,跳出警告。

TrueNAS @ truenas  
  
New alert:

  * Pool z2cpool1 state is DEGRADED: One or more devices is currently being resilvered. The pool will continue to function, possibly in a degraded state.  
The following devices are not healthy:

    * Disk ST6000NM0024-1HT17Z Z4D04HLW is UNAVAIL

這一連串事件,真的是打個我措手不及,我每天都在做 S.M.A.R.T. Short Test,根本沒想到硬碟會直接 GG。雖說這批硬碟剛到的時候,我其實偶爾發現硬碟會有怪聲音,但都是非常突然冒出一下就沒了,我也沒辦法定位到是哪個硬碟有問題,我上網查聽說企業硬碟讀取很吵是正常的,所以也不在意,以為企業硬碟本來就是這樣。

而現在那硬碟真的是吵到我光用聽的就知道是哪個槽出事,而且讀寫燈號也是不停的閃爍,就那槽長亮綠燈,其他的燈號都是暗的,更是直接就鎖定了是它出事。拔掉之後也沒聽到怪聲了,因此確定就那硬碟問題。

所幸,我是用 6顆 6TB 硬碟組 RAID-Z2,能容忍兩顆硬碟同時壞掉,應該算挺保險的組法了。

更換硬碟

拿到剛買的新硬碟後,就立刻將其鎖上螺絲直接裝進 NAS 中,就完全熱插拔沒有關機。

登入管理員畫面,就能看到一顆未被配置的新硬碟。

之後直接點 Manage Devices,然後選取被拔掉的硬碟,直接點 Replace 替換上目前的新硬碟。

選取硬碟,然後按下「Replace Disk」(替換硬碟)。

之後就是等待漫長的重建時間了。

畫面會顯示 REPLACING (替換中)。

同時右上角刷新的圈圈也會不斷地旋轉,顯示「Resilvering」(重建中)。

到目前為止,一切都滿順利,挺無腦的,基本上沒有甚麼大問題。UI 點開按鈕點一點就好了,剩下只需要等待重建完成。

重建狀態,大概消耗了我 30% 左右的 CPU。全部硬碟的讀寫燈號都呈現綠燈常亮,很明顯可以聽到正在寫入資料的聲音。

最後,花了我大概 65 分鐘完成重建,其實比我想像中的還快速。

看不少網路文章提到,組 NAS 必須有 UPS 不斷電系統,就是擔心在這種重建資料的關鍵時刻,突然來個停電,真的會氣死。重建的時候,似乎其他硬碟也同時死掉機會滿高的……光是想想就瑟瑟發抖。

之後系統狀態就全部正常了,原本的健康度的紅燈和橙色警告全部都沒有了。

大概是這樣,操作的部分非常簡單。

其他文章:
DIY 自組 NAS 家用私有雲 TrueNAS 安裝經驗分享

By Weil Jimmer


This entry was posted in General, Experience, NAS, The Internet By Weil Jimmer.

DIY 自組 NAS 家用私有雲 TrueNAS 安裝經驗分享

No Comments
-
更新於 2023-12-04 22:09:10

前言

最近一直有心想組一台 NAS 備份我的資料,已經看了頗久,基於安全和價格的考量,最終還是沒有直接選用群暉(Synology)的套裝 NAS。

最主要還是因為怕資料外洩。看到 Youtube 上面安裝他們家的產品有夠簡單,掃個碼就可以註冊帳號登入,總有一種數據不受控的感覺,最近替公司開發產品也是一樣的概念。

那些東西要連線上雲端,讓客戶自己控制,那雲端必須得有存取裝置的權限及能力,所以,那些套裝 NAS 如果可以這麼簡單就遠端讀取查看分享資料的話,我覺得,那些販售該產品的公司的工程師說不定…呵呵。這只是猜測,個人比較敏感一點,也不好評論什麼。

總之為了隱密性、存放機密資料,勢必不可能讓自己的 NAS 曝露在公網上,更別提讓別人擁有一鍵後門抓資料的能力。

要買套裝 NAS 的大前提是要讓網路環境完全隔離。接觸不到公網,不過這是題外話了。好了,廢話也說太多了,直接進入正題。

配備

這次我選用的配備是:

  • 1 * CPU N5105 暢網微控 妖板 (6 SATA)(ITX)
  • 2 * SAMSUNG 三星 980 500GB NVMe M.2
  • 2 * Micron Crucial 美光 DDR4 3200 16G RAM
  • 6 * 二手 6 TB HDD
  • 1 * 偏貴的 NAS 機殼 (ITX) + 250W電供

價格大概是 6200+2200+2000+9500+6200=26100 (NT)

如果是直接買現成套裝機,以六槽來看,光是 NAS 主機不包括硬碟就可能要三、四萬起跳。

外殼

買來大概長這樣,然後新竹物流有夠爛,都不打電話的,還會偽造紀錄。

正面圖:

背面圖:

取出來的硬碟槽:

正面圖:

俯視圖:

然後是配件,基本上螺絲很齊全,想到之前買 TP-Link 網卡沒有附上螺絲,真廢,連螺絲都捨不得給嗎?沒螺絲我鎖個屁。

最後是貴死人的雜牌電供,250瓦而已。唯一的優點是很小巧,可以塞進 ITX 機箱,除此之外沒什麼優點。

然後機箱必須先自己轉開螺絲,把外殼拆掉,內部大概長這樣。

左邊風扇,最下面是板子的空間,超級小。下次絕對不要買 ITX 機殼,有夠難安裝。

另外一面:

背面:(左邊那孔位是塞電供的。)

硬碟背板:3 個 SATA 一組。

上下各一個大4Pin供電:

用不到的 USB3.0線,風扇線和開機線(貌似也用不到,一插電就給我自動開機。)

背面的風扇也是大4Pin供電。

介紹完機殼後,該來介紹一下主機板了。

主板

開箱 6 SATA槽的 NAS 妖板。

這裡放個高清版的圖。

然後是 SATA 槽的位置,這是重點中的重點,上面的編號很重要,之後要按照順序由上往下接上數據線。

1 3 5
0 2 4

再來是 Power 的燈,和電源的針腳。

組裝

首先,先把主機板的擋板卡上機殼,不然之後主機板裝進去就不能裝了。

當初犯了個小錯,先把主機板放進去,其實應該先放接上電源再放進去。之後電源線根本進不去阿,很難插。

這縫隙真的很小,組得很痛苦。

最後,接電供和整線。

照順序,接上 SATA 線。

完成開機!

安裝作業系統

前面光是組裝硬體的部分就可以搞得滿頭大汗,鎖一堆螺絲,真累,接下來是軟體的安裝。

先到 TrueNAS 官網下載 iso。

然後使用 win32DiskImager 之類的軟體,把 ISO 寫入 USB 隨身碟,用 USB 開機。

直接開始安裝!

接下來基本上沒有甚麼難度,一直無腦下一步。就懶得貼那麼多圖了。

到這步驟,解壓縮真的超久,一度以為是不是掛了,超緊張,一直沒吐訊息出來。

接著重開機。系統應該就自動啟動了,要多等一下。

然後進入這個畫面基本就完成了,剩下網路配置搞一搞。

輸入 NAS 的 IP 就可以連到 NAS 的 WebUI 進行管理和後續的設定。

設定

首先,先到 Storage 那邊新建一個 Pool,把我要組的六個 HDD 都加進去,我是組 ZFS 檔案系統 Raid-Z2 可以有兩個容錯空間。然後 1 個 SSD 當系統碟,另 1 個當 快取碟 L2ARC。

設定 SMB 分享

直接到共用那邊,啟動服務,設定要分享路徑。

到「認證」>「本機使用者」>「新增」,創建一個使用者並給定目標目錄的讀寫權限,這樣就可以在 SMB 中使用。

Windows 直接新增網路資料夾。

測速

下圖是在 Windows 上進行測速,讀寫約 300 MiB/s,大概吃滿了我目前 2.5 Gbps 的網速。

這是我和 gateway (軟路由) 進行 iperf 測速的結果。

差不多約等於我硬碟的讀寫速度,其實 2.5 Gbps 網速似乎有點不夠,感覺還可以再更快,雖然 400~500 MiB/s 應該就是極限了。

設定 HTTPS 證書

我發現 TrueNAS 還有支援 ACME DNS Challenge,這樣就可以簽發一個 Localnetwork 的網域證書阿!

如果有網域的話會更安全,雖然都走有線網路了,也不用怕被竊取帳密。

只怕 Wi-Fi 被破解偷連,只是我家的網路還是雙層內網,連進 Wi-Fi 也沒用,因為是兩個網段,進不到 NAS,得再設定軟路由防火牆。

不過 HTTP 畢竟是沒加密的,洩漏管理員帳密的風險還是很大,更何況如果有機密資料,還是使用 HTTPS 會好一點。

可以參考這篇文章:Configuring ACME DNS

基本上就是把網域停在 Cloudflare 上,申請一個 API,填入 TrueNAS 讓它可以替網域新增 TXT 紀錄。

接下來就是設定 CSR,全自動簽發證書。把系統預設證書改成新簽發的網域。

設定雲端憑證

想到,我 Google Drive 上面還有不少東西,要一個一個下載有點麻煩,可沒想到 TrueNAS 也有這個功能!內建的!

可以參考這篇文章:Backing Up Google Drive to TrueNAS SCALE

一鍵授權,也不用自己搞 API,直接從 Google Drive 拉目標資料夾下來備份,真的很讚。

設定好後,到「資料保護」>「Cloud Sync Tasks」,新增定時同步任務,然後直接啟動它,就會開始拉檔案下來備份了。

七百 GB 大概要花三、四個小時。

現在直接連進去 NAS 可以看到:我雲端的檔案已經出現在裡面了。

而且感覺起來也不怎麼吃資源。

介紹得差不多了,如果以後有試到甚麼好用的功能再補充吧。

其他文章:
RAID 陣列降級與重建:一個自組 NAS 使用者的親身經驗 Truenas Scale

By Weil Jimmer


This entry was posted in General, Experience, NAS, The Internet By Weil Jimmer.

 1 2 3 4 5 6 7 8 9 10 11 12 /12 頁)下一頁 最終頁

Visitor Count

pop
nonenonenone

Note

支持網路中立性.
Support Net Neutrality.

飽暖思淫欲,饑寒起盜心。

支持臺灣實施無條件基本收入

歡迎前來本站。

Words Quiz


Search

Music

Blogging Journey

4262days

since our first blog post.

The strong do what they can and the weak suffer what they must.

Privacy is your right and ability to be yourself and express yourself without the fear that someone is looking over your shoulder and that you might be punished for being yourself, whatever that may be.

It is quality rather than quantity that matters.

I WANT Internet Freedom.

Reality made most of people lost their childishness.

Justice,Freedom,Knowledge.

Without music life would be a mistake.

Support/Donate

This site also need a little money to maintain operations, not entirely without any cost in the Internet. Your donations will be the best support and power of the site.
MethodBitcoin Address
bitcoin1gtuwCjjVVrNUHPGvW6nsuWGxSwygUv4x
buymeacoffee
Register in linode via invitation link and stay active for three months.Linode

Support The Zeitgeist Movement

The Zeitgeist Movement

The Lie We Live

The Lie We Live

The Questions We Never Ask

The Questions We Never Ask

Man

Man

THE EMPLOYMENT

Man

In The Fall

In The Fall

Facebook is EATING the Internet

Facebook

Categories

Android (7)

Announcement (4)

Arduino (2)

Bash (2)

C (3)

C# (5)

C++ (1)

Experience (51)

Flash (2)

Free (13)

Functions (36)

Games (13)

General (59)

Git (2)

HTML (7)

Java (13)

JS (7)

Mood (24)

NAS (2)

Note (32)

Office (1)

OpenWrt (5)

PHP (9)

Privacy (4)

Product (12)

Python (4)

Software (11)

The Internet (24)

Tools (16)

VB.NET (8)

WebHosting (7)

Wi-Fi (5)

XML (4)