本次測試使用 ADATA SX8200 1TB硬碟(絕版老骨董),比較相同SSD在Win10系統原生NTFS格式和離線掛載到TrueNAS的ZFS格式的速度差異。還有TrueNAS資料集壓縮和加密對使用速度上的差異。
一、如何測試
說到硬碟測速,市面上有非常多種軟體可以快速且方便的檢測,但是TrueNAS是網路硬碟,我是沒有找到可以測網路硬碟的軟體,所以只好自己寫一個……(還好平時開車經驗老道)
以下簡單說明
private void Start_Button_Click(object sender, EventArgs e)
{
string sourceFolder = SourceFolder_Entry.Text;//來源資料夾
string targetFolder = TargetFolder_Entry.Text;//目的資料夾
double readtime = 0;//花費時間-讀取
double writetime = 0;//花費時間-寫入
int times = Convert.ToInt32(times_Entry.Text);//重複次數
for (int i = 0; i < times; i++)
{
readtime += Move(sourceFolder, targetFolder);
writetime += Move(targetFolder, sourceFolder);
}
readtime_Entry.Text = (readtime / times).ToString();//顯示讀取結果
writetime_Entry.Text = (writetime / times).ToString();//顯示寫入結果
}
private double Move(string sourceFolder, string targetFolder)
{
DirectoryInfo source = new DirectoryInfo(sourceFolder);
FileInfo[] files = source.GetFiles();
Stopwatch stopwatch = new Stopwatch();
stopwatch.Start();
foreach (var item in files)
{
try
{
item.MoveTo(Path.Combine(targetFolder, item.Name));
}
catch { }
}
stopwatch.Stop();
Thread.Sleep(3000);
return stopwatch.ElapsedMilliseconds;
}
- 先把用來測速的檔案放在TrueNAS網路硬碟,路徑輸入到「來源資料夾」
- 「目的資料夾」選擇比要測的硬碟更高速度的硬碟裡的資料夾
- 啟動後軟體會把「來源資料夾」裡的東西丟到「目的資料夾」,然後再丟回來,只要測花費時間就知道速度了


ADATA SX8200(K槽)的讀寫速度最高不超過3000MB/s,所以我只要找一個比它更快的硬碟……找不到,算了,就用記憶體模擬硬碟吧(A槽)。
用來測速的檔案分為四組
- 第一組 12552張圖片檔 大小5G
- 第二組 118個影片檔 大小5G
- 第三組 286個音樂檔 大小5G
- 第四組 前面的檔案壓縮成一個7z檔 大小13.9G
二、實測
以下數據都是重複3後平均的結果
1.Win10 NTFS
MB/s | 第一組 | 第二組 | 第三組 | 第四組 |
讀 | 675 | 2333 | 1987 | 2482 |
寫 | 677 | 2607 | 3022 | 1478 |
讀寫速度高於預期,手動丟檔案也不會這麼快。
2.TrueNAS 無壓縮
把同一顆SSD加入TrueNAS後,新增儲存集區。

把預設的LZ4壓縮改為OFF


MB/s | 第一組 | 第二組 | 第三組 | 第四組 |
讀 | 97 | 1913 | 1433 | 1859 |
寫 | 76 | 1055 | 1023 | 828 |
相較Win10,屬於正常速度。
3.TrueNAS LZ4壓縮(預設)


MB/s | 第一組 | 第二組 | 第三組 | 第四組 |
讀 | 108 | 2433 | 1693 | 1794 |
寫 | 76 | 805 | 1023 | 872 |
和無壓縮相比差別不大,甚至部分速度高於無壓縮。
4.TrueNAS GZIP壓縮
重複前面操作,把壓縮等級改成GZIP。
MB/s | 第一組 | 第二組 | 第三組 | 第四組 |
讀 | 92 | 1282 | 1360 | 1767 |
寫 | 75 | 298 | 249 | 266 |
寫入速度明顯下降,不推薦用於頻繁使用的資料集。(目前不討論壓縮率)
5.TrueNAS 資料集加密
重複前面操作,關閉壓縮,勾選「加密」選項。

MB/s | 第一組 | 第二組 | 第三組 | 第四組 |
讀 | 89 | 1281 | 945 | 1731 |
寫 | 77 | 1059 | 980 | 890 |
在寫入的重複測試時,所需時間會漸增,可能是前面寫入的檔案還沒加密好,所以拖累到後面的檔案寫入速度。
5.TrueNAS 儲存集區加密
刪除前面的儲存集區,建立新儲存集區,勾選「加密」選項。

建立資料集,關閉壓縮。
MB/s | 第一組 | 第二組 | 第三組 | 第四組 |
讀 | 93 | 1262 | 1216 | 1781 |
寫 | 75 | 989 | 1039 | 827 |
和前面的資料集加密速度差不多,可能是因為加密法相同(AES-256-GCM),所以速度也相同。
三、結論
1.系統差異
Win10和TrueNAS一定會有速度上的差異,一個是本地硬碟,一個是網路硬碟,資料會經過的電子元件和邏輯判斷數愈多,速度就愈慢。
●Win10
原資料→判斷資料是否可以讀取→寫入記憶體→判斷硬碟是否有足夠空間→把記憶體裡的資料寫入硬碟裡
●TrueNAS
原資料(Win10)→判斷資料是否可以讀取→寫入記憶體(Win10)→藉由SMB通道判斷是否有權限使用TrueNAS→把記憶體(Win10)的資料透過網卡寫入記憶體(TrueNAS)裡→判斷硬碟(TrueNAS)是否有足夠空間→把記憶體(TrueNAS)裡的資料寫入硬碟裡
如果有使用TrueNAS壓縮或加密,資料還會經過CPU(TrueNAS)運算後寫入硬碟。
2.壓縮和加密
就結論來講,直接使用預設LZ4壓縮就好,效率不影響還可以省空間,但是要考慮到CPU和記憶體速度,本測試使用Hyper-V的CPU虛擬化,intel i9-13900K其中的2個核心和16G 4000Hz記憶體,不同平台的表現可能會有所差異。

是否加密全憑使用情況,可以只加密資料集而非儲存集區,用不同的資料集區分檔案是否加密。