ZFS ARC là gì? Vì sao TrueNAS ngốn RAM, cần bao nhiêu GB

ZFS ARC là gì? Vì sao TrueNAS ngốn RAM, cần bao nhiêu GB

Cài TrueNAS xong, chép dữ liệu vài hôm, bạn mở Dashboard và thấy widget Memory gần như kín màu. ZFS Cache chiếm cỡ 90%, Free lèo tèo vài trăm MB. Câu đầu tiên bật ra thường là "NAS mình bị rò RAM à?".

Xem video tóm tắt: ZFS ARC là gì? Vì sao TrueNAS ngốn RAM, cần bao nhiêu GB

ZFS ARC là gì và vì sao TrueNAS "ăn" gần hết RAM

Cài TrueNAS xong, chép dữ liệu vài hôm, bạn mở Dashboard và thấy widget Memory gần như kín màu. ZFS Cache chiếm cỡ 90%, Free lèo tèo vài trăm MB. Câu đầu tiên bật ra thường là "NAS mình bị rò RAM à?". Không phải. Đó là ARC, và nó đang làm đúng việc nó được thiết kế để làm.

ARC (Adaptive Replacement Cache) là bộ nhớ đệm đọc của ZFS, nằm ngay trong RAM. TrueNAS cố tình lấy gần hết RAM rảnh để giữ dữ liệu bạn vừa đọc hoặc hay đọc, vì đọc từ RAM nhanh hơn đọc từ ổ quay nhiều bậc. App hay VM cần RAM thì ARC tự co lại để nhường. RAM để trống không làm NAS nhanh thêm chút nào — nó chỉ làm đồ thị trông đẹp hơn thôi.

Hiểu ARC giúp bạn mấy việc rất thực tế:

  • Đọc lại nhanh hơn: mở lại thư mục ảnh, duyệt thư viện phim hay liệt kê thư mục nghìn file đều lấy thẳng từ RAM, không phải đợi đầu đọc ổ cứng đi tìm.
  • Không tự làm chậm NAS: nhiều người thấy RAM "đầy" là đi giới hạn ARC. NAS chậm đi, đổi lại chẳng được gì.
  • Mua RAM đúng cỡ: có con số rõ ràng để chọn 16, 32 hay 64GB, khỏi nghe theo "luật 1GB/1TB" đã lỗi thời. Năm nay giá RAM đang cao, mua thừa một cấp là đau ví thật.
  • Bớt lo chuyện ECC: ECC nên có nhưng không bắt buộc, nên build NAS từ PC cũ hay main desktop vẫn hoàn toàn được.

Vài tình huống rất đời

  • Gia đình biến PC cũ (i5, 16GB DDR4) thành NAS, chỉ để chia sẻ file qua SMB và backup máy tính. Vài ngày sau, ZFS Cache lên khoảng 13–14GiB, Free gần 0, và chủ nhà nhắn nhóm Zalo hỏi máy có sắp cháy không. Không cháy. Cũng không cần làm gì cả, máy đang chạy đúng thiết kế.
  • Cài thêm Immich và Jellyfin trên chính máy 16GB đó. Riêng Immich đã cần tối thiểu 6GB, khuyến nghị 8GB. ARC co lại nên app vẫn chạy, nhưng cache còn ít nên duyệt ảnh và thư viện phim ì hơn. Đây là lúc nên lên 32GB.
  • Homelab 32GB chạy một VM Windows 8GB và một VM Home Assistant. Bấm Start VM thì hiện hộp thoại "Not Enough Memory", dù phần lớn RAM đang là ARC. Cách gỡ nằm ở mục lỗi hay gặp bên dưới.
  • Muốn bật dedup cho pool ảnh/phim 20TB cho "tiết kiệm". Theo Hardware Guide của TrueNAS, dedup cần cỡ 5GB RAM cho mỗi TB, tức khoảng 100GB RAM — để gộp một kho ảnh và phim gần như chẳng có gì trùng. Giữ nén LZ4 mặc định là đủ.

Nếu bạn chuyển từ Synology sang: DSM cũng dùng RAM trống làm cache. Khác ở chỗ máy Synology có số khe cố định và danh sách RAM tương thích của hãng. TrueNAS chạy trên máy tự build, mainboard hỗ trợ RAM nào (tra QVL của mainboard) thì lắp RAM đó. Không có "danh sách RAM chứng nhận TrueNAS" nào cả. Ai mới làm quen nền tảng này có thể đọc qua TrueNAS là gì trước cho đỡ bỡ ngỡ.

Sơ đồ ARC của ZFS: đọc dữ liệu, có trong ARC thì trả từ RAM, không có thì đọc ổ cứng rồi lưu vào ARC; khi app hoặc VM cần RAM thì ARC tự co lại

ARC hoạt động ra sao

Chữ "Adaptive" là phần đáng tiền nhất. ARC giữ hai nhóm dữ liệu cùng lúc: thứ bạn mới dùng gần đây và thứ bạn dùng đi dùng lại nhiều lần. Tỉ lệ giữa hai nhóm được tự cân theo cách bạn thật sự đọc dữ liệu. Nhờ vậy, copy một lần cả thư mục phim lớn không đẩy hết metadata và các file bạn mở hằng ngày ra khỏi cache.

Hình dung theo thang tốc độ: nhanh nhất là RAM (ARC). Kế đến là SSD, nếu bạn gắn L2ARC làm cache đọc cấp hai. Chậm nhất là HDD trong pool. ZFS tìm dữ liệu đúng theo thứ tự đó, tầng trên không có mới xuống tầng dưới.

Chỗ hay nhầm: SLOG/ZIL không phải cache đọc. ZIL là nhật ký cho các lệnh ghi đồng bộ (sync write), còn SLOG là đưa nhật ký đó sang một SSD riêng cho nhanh. Không dính gì tới tốc độ đọc, cũng không ảnh hưởng chuyện mua bao nhiêu RAM.

Đọc widget Memory trên Dashboard cho đúng

Widget Memory trên Dashboard chia RAM thành ba phần:

  • Free (xanh dương): RAM chưa ai dùng. Thấp là bình thường.
  • ZFS Cache (hồng tím): chính là ARC. Càng cao đọc càng nhanh.
  • Services (cam): RAM của hệ thống, app và VM. Phần này mới đáng để mắt.

Widget chỉ là ảnh chụp một thời điểm. Muốn xem xu hướng, vào menu Reports, chọn Memory (đồ thị "Physical memory available") và ZFS (đồ thị ARC size). Nhìn số liệu cả tuần mới biết ARC đang chạy bình thường hay đang bị chèn ép.

Thiếu RAM thật thường có mấy dấu hiệu đi cùng nhau:

  • Phần Services phình to và giữ nguyên ở mức đó, chứ không chỉ nhích lên lúc app khởi động.
  • ARC bị ép xuống sát mức sàn và nằm lì ở đó nhiều ngày. Mức sàn (zfs_arc_min) là giá trị lớn hơn giữa 32MiB và RAM/32, tức khoảng 512MiB trên máy 16GB.
  • App bị kill vì hết bộ nhớ (OOM), hoặc VM không khởi động được.

Chưa thấy mấy dấu hiệu đó thì đừng chỉnh gì. Mặc định của TrueNAS hiện nay đã đúng cho đa số máy.

Mốc 24.04: ARC thôi bị chặn ở một nửa RAM

Forum cũ hay khuyên " SCALE phải tăng ARC lên", và hồi đó lời khuyên này có lý. OpenZFS 2.2 trên Linux mặc định chỉ cho ARC dùng tối đa ½ RAM, nên TrueNAS SCALE đời đầu bỏ phí gần nửa bộ nhớ. Bên kia, TrueNAS CORE (chạy FreeBSD) lấy giá trị lớn hơn giữa "RAM − 1GiB" và "5/8 RAM".

Từ bản 24.04 (Dragonfish), release notes ghi rõ ARC giờ "behave identically to TrueNAS CORE". Sau đó OpenZFS 2.3 áp dụng công thức này cho mọi nền tảng. Bản ổn định hiện tại là TrueNAS Community Edition 25.10.7 "Goldeye", đi kèm ZFS 2.3.9. Các mẹo chỉnh ARC kiểu cũ vì thế không còn cần nữa.

RAM máySCALE trước 24.04Từ 24.04 (như CORE)
8GB~4GiB~7GiB
16GB~8GiB~15GiB
32GB~16GiB~31GiB

Nhìn bảng là hiểu vì sao RAM "đầy 90%" là chuyện thường. Trần ARC giờ chỉ chừa lại khoảng 1GiB. Phần còn lại ARC được phép dùng, và sẽ trả lại khi app hoặc VM cần.

Ai còn ở TrueNAS CORE nên biết hãng đã ghi CORE "no longer under active development". Các bản cuối là 13.0-U6.8 và 13.3-U1.2. Máy vẫn chạy bình thường, nhưng về lâu dài nên tính chuyện chuyển sang Community Edition. Còn bản 27 (trước gọi là 26) mới ở 27-RC.1, thuộc loại Early Release, chưa có ngày GA. Để dành cho máy thử nghiệm.

Hai huyền thoại nên cho về hưu

"Mỗi TB phải có 1GB RAM"

Câu này truyền tai trên forum từ rất lâu, nghe có vẻ khoa học nên sống dai. Thực tế, Hardware Guide của TrueNAS nhánh 25.10 tính theo số ổ chứ không theo TB:

  • Tối thiểu 8GB cho tới 8 ổ, mỗi ổ vượt quá 8 cộng thêm 1GB.
  • Join Active Directory thì cộng 2GB.
  • Dùng iSCSI để chứa backup VM thì tối thiểu 16GB, tối ưu từ 32GB.

Con số tính theo TB chỉ đúng với dedup, mà dedup còn đòi nhiều hơn thế, khoảng 1–5GB mỗi TB. Một pool 40TB chỉ dùng chia sẻ file và backup thì 16GB RAM vẫn chạy tốt. Thêm RAM giúp NAS nhanh hơn nhờ ARC to hơn. Còn thiếu RAM thì ZFS cũng không vì thế mà sập.

"ZFS mà không có ECC là mất dữ liệu"

Nỗi sợ này có hẳn một cái tên: "scrub of death". Kịch bản là RAM lỗi khiến lần scrub "sửa" hỏng cả pool. Jim Salter đã phân tích kỹ và đi tới kết luận ngược lại: RAM hỏng gây hại cho mọi filesystem như nhau, còn ZFS nhờ có checksum nên phát hiện lỗi tốt hơn chứ không gây hại thêm. Matt Ahrens, đồng sáng lập ZFS, nói thẳng: "There's nothing special about ZFS that requires/encourages the use of ECC RAM more so than any other filesystem". Dù vậy, chính Ahrens vẫn khuyên dùng ECC.

Hardware Guide của TrueNAS cũng nói cả hai chiều: "most users strongly recommend ECC RAM", nhưng "Many TrueNAS systems operate every day without ECC RAM". Hiểu cho thực dụng thì: mainboard và CPU hỗ trợ ECC, NAS lại đang giữ bản dữ liệu duy nhất của bạn — dùng ECC. Còn build từ PC văn phòng cũ không hỗ trợ ECC thì vẫn được, miễn có backup và test RAM kỹ trước khi dùng.

NAS ZFS cần bao nhiêu RAM: bảng theo nhu cầu

Bảng dưới dựa trên Hardware Guide 25.10 cộng yêu cầu của các app phổ biến. Giá là giá niêm yết tham khảo lúc viết (cuối tháng 10) ở Hacom, Phúc Anh và An Phát. Mức thấp nhất của DDR4 là giá ưu đãi khi mua kèm build PC. Giá RAM năm nay thay đổi theo tuần, xem lại trên web shop trước khi chốt.

16GB là 8GB nền theo hướng dẫn cộng phần dư cho ARC. 8GB vẫn chạy được nhưng chỉ là mức tối thiểu. 32GB dành cho máy chạy app, vì riêng Immich đã cần 6–8GB. Với VM, công thức là 32GB cộng tổng RAM cấp cho các VM, nên thường rơi vào 48–64GB. Lý do: VM giữ chặt phần RAM được cấp, ARC buộc phải nhường. Đi DDR4 thì cần board 4 khe mới lên được 64GB bằng thanh 16GB.

Mẹo mua RAM trong năm giá cao

Theo VnExpress (23/08/2026), số liệu thị trường Mỹ cho thấy giá RAM tiêu dùng tăng khoảng 5 lần sau một năm. DDR4 tăng ít hơn, khoảng 156–168%, và các hãng dự báo thiếu hàng kéo dài tới 2027. Tom's Hardware (14/10/2026) ghi nhận kit 32GB DDR5-6000 đã ở khoảng 450 USD. Hệ quả: nền tảng DDR4 (PC văn phòng cũ, AM4) giờ rẻ hơn khoảng một nửa tính theo GB, nhìn cột giá ở bảng trên là thấy.

  • Chọn RAM theo QVL của mainboard. Không có loại RAM nào gọi là "tương thích TrueNAS".
  • Chừa khe trống để nâng cấp. Mua 1×16GB thay vì 2×8GB thì sau này lên 32GB khỏi phải bỏ RAM cũ.
  • Định chạy nhiều VM thì tính đường lên 64GB ngay từ lúc chọn mainboard.
  • RAM ECC: giá niêm yết trên web các shop lúc viết bài còn thấp hơn cả RAM thường, có mã RDIMM báo hết hàng, nhiều khả năng giá chưa được cập nhật. Gọi shop hỏi giá và tình trạng hàng thực tế trước khi tính ngân sách.
Nhu cầuRAM gợi ýGhi chú
Chia sẻ SMB, backup16GBARC đầy là bình thường
Thêm Immich, Jellyfin32GBImmich cần 6–8GB
Apps + vài VM32–64GBCộng đủ RAM từng VM
Bật dedup+5GB mỗi TBThường không đáng

L2ARC và dedup: hai thứ âm thầm ăn RAM

L2ARC là gắn thêm SSD làm vdev Cache cho pool, đóng vai cache đọc cấp hai. Nghe giống cách rẻ để "mở rộng RAM". Thực ra mỗi block nằm trong L2ARC tốn 96 byte header ngay trong ARC. Docs TrueNAS lấy ví dụ: L2ARC 480GB với block 4KiB cần hơn 10GiB metadata. Ước lượng thận trọng là khoảng 1GB RAM cho mỗi 50GB L2ARC.

Cộng đồng hay khuyên có khoảng 64GB ARC rồi mới tính tới L2ARC. Bài "L2ARC tuning guide" trên forum TrueNAS thì phản biện: máy 16GB vẫn dùng được L2ARC nếu tải phù hợp, chẳng hạn dữ liệu block lớn thì số header ít hơn. Cả hai đều có lý. Với NAS gia đình, thứ tự an toàn là thêm RAM trước, chỉ gắn L2ARC khi RAM đã đủ mà lượng dữ liệu đọc lặp lại vẫn lớn hơn ARC.

Dedup thì khỏi bật cho kho ảnh và phim. Bảng dedup (DDT) cần nằm trong RAM. Docs tính 5GB mỗi TB, chỉ hạ xuống 1–3GB mỗi TB khi tỷ lệ dedup đạt từ 3x trở lên — mức mà ảnh/phim gần như không bao giờ chạm tới. Nếu bạn thật sự có nhiều dữ liệu trùng, OpenZFS 2.3 có Fast Dedup. Docs khuyên dùng kèm special vdev là SSD mirror chất lượng tốt (NVMe nếu được) và giữ dung lượng đã dùng dưới 65–70%.

Lỗi hay gặp và cách xử lý

  1. Thấy RAM đầy rồi tự giới hạn ARC. Giống mua tủ lạnh to rồi dán băng keo chặn nửa ngăn cho "đỡ đầy". NAS đọc chậm hẳn, còn phần RAM giải phóng ra cũng chỉ nằm không. Cách xử lý: xoá script giới hạn, khởi động lại, rồi chạy cat /sys/module/zfs/parameters/zfs_arc_max để chắc chắn kết quả là 0 (tức tự động).
  2. Start VM báo "Not Enough Memory" dù RAM chủ yếu là ARC. Theo tài liệu API của TrueNAS, phần ARC có thể co lại chỉ được tính là RAM trống khi bạn chọn overcommit. Lần lượt thử: chọn overcommit trong hộp thoại, giảm RAM cấp cho VM, giới hạn ARC ở mức vừa phải (xem mục dưới), hoặc nâng RAM.
  3. Giới hạn ARC bằng script rồi nâng RAM nhưng quên sửa script. Lắp thêm 32GB mà ARC vẫn kẹt ở 16GiB, coi như tiền mua RAM bỏ đi. Mỗi lần thay RAM, nhớ xem lại Init/Shutdown Scripts.
  4. Mua nhầm loại RAM ECC. Lắp RDIMM (RAM server) vào main desktop, hoặc lắp lẫn UDIMM với RDIMM, thì máy không boot. Lắp ECC UDIMM vào nền tảng không hỗ trợ ECC thì máy vẫn chạy nhưng không có tính năng ECC. Tra manual/QVL của mainboard trước khi mua. Lệnh dmidecode -t memory | grep -i "error correction" cho biết firmware báo kiểu ECC nào, nhưng đó là thông tin firmware tự khai, chỉ để tham khảo.
  5. Lắp RAM mới mà không test. Hardware Guide ghi RAM thường hỏng trong ba tháng đầu. Chạy MemTest86+ qua đêm trước khi tạo pool.
  6. Bật dedup trên pool lớn khi thiếu RAM. Ghi chậm, và đã có báo cáo pool khó import sau khi reboot. Tắt dedup chỉ có tác dụng với dữ liệu ghi mới, dữ liệu cũ vẫn phụ thuộc DDT. Nếu thật sự cần dedup, thử trước trên pool nhỏ để đo kích thước DDT.
  7. Gắn SSD L2ARC to vào máy 8–16GB chạy zvol/VM block nhỏ. Header ăn bớt ARC, máy chậm hơn cả lúc chưa gắn. Tháo vdev Cache ra và dồn tiền mua RAM.
  8. Vẫn chạy 24.04.0. Bản này có lỗi ARC kết hợp với swap làm giao diện chậm hoặc treo. 24.04.1 đã tắt swap mặc định, đặt vm.swappiness=1 và tắt MGLRU. 24.04.2 sửa thêm lỗi OOM khi NFS chạy nặng, và 25.10.0 xử lý tiếp các xung đột quản lý bộ nhớ ARC. Cập nhật lên 25.10.7 là xong.

Khi nào mới nên giới hạn ARC (tuỳ chọn nâng cao)

Chỉ có một trường hợp đáng làm: bạn chạy VM cần RAM cố định và không muốn dùng overcommit. Không chạy VM thì bỏ qua mục này. TrueNAS không có ô GUI riêng cho zfs_arc_max, nên phải dùng script chạy bằng quyền root.

Trên TrueNAS Community Edition (SCALE):

  1. Vào System → Advanced Settings → Init/Shutdown Scripts → Add.
  2. Ở Type chọn Command, ở When chọn Post Init.
  3. Nhập lệnh. Ví dụ dưới giới hạn ở 16GiB, đơn vị là byte:
echo 17179869184 > /sys/module/zfs/parameters/zfs_arc_max

Số byte bằng số GiB nhân 1073741824, ví dụ 24GiB là 25769803776. Lưu lại, reboot, rồi kiểm tra bằng cat /sys/module/zfs/parameters/zfs_arc_max. Chọn mức trần sao cho RAM cấp cho VM cộng trần ARC cộng vài GB cho hệ thống và app vẫn nằm gọn trong RAM thật.

Trên TrueNAS CORE: vào System → Tunables → Add, điền Variable là vfs.zfs.arc.max, Type chọn sysctl, Value là số byte.

Muốn biết cache có hiệu quả không thì phải xem tỷ lệ hit. Trang Reporting của 25.10 chỉ có đồ thị ARC size, không có tỷ lệ hit. Vào Shell, chạy arc_summary để xem tổng quan, hoặc arcstat 5 để xem số liệu cập nhật mỗi 5 giây.

Bảo trì: mấy thứ quan trọng hơn chuyện RAM

  • Init/Shutdown Scripts chạy bằng quyền root. Chỉ dán lệnh mà bạn hiểu từng chữ. Docs 25.10 cũng cảnh báo rủi ro khi script thay đổi ở cấp hệ điều hành.
  • Tải bản sao cấu hình trước khi chỉnh: System → General Settings → Manage Configuration → Download File.
  • Scrub định kỳ ở Data Protection → Scrub Tasks. Scrub đều đặn có giá trị hơn chuyện có ECC hay không, vì chính nó mới phát hiện lỗi sớm.
  • Backup theo quy tắc 3-2-1: 3 bản sao, trên 2 loại thiết bị, 1 bản để ở nơi khác. ECC không thay được backup, ZFS cũng vậy.
  • Không cài 27-RC lên NAS thật. Docs ghi rõ: "Do not use early-release software for critical tasks".

Trên NAS ZFS, RAM để trống là RAM bỏ phí. Cứ để ARC dùng hết, chỉ bắt đầu lo khi phần Services lấn át. Và backup đi: ổ nào rồi cũng có ngày chết, ARC to cỡ nào cũng không cứu được file chưa có bản sao.

No comments yet