2 điểm bởi GN⁺ 2024-04-30 | 1 bình luận | Chia sẻ qua WhatsApp
  • Sau khi cài NixOS lên Terramaster F2-221, SSD USB gắn ngoài trở thành điểm bất tiện, nên tác giả tự chế backplane để lắp SSD khởi động NVMe bên trong
  • Backplane F2-221 hiện có chủ yếu xoay quanh SATA và mạch nguồn; qua phân tích ảnh F5-422, tác giả xác nhận cách Terramaster mở rộng các bay bằng 2 bộ điều khiển SATA ASM1061
  • Các cặp vi sai PCIe được lần theo bằng ảnh F5-422, datasheet ASM1061 và vị trí tụ ghép, nhưng một số chân không được xác định đến cùng và pinout PCIe2 cũng không được kiểm chứng
  • PCB nguyên mẫu nối trực tiếp khe M.2 NVMe vào một lane PCIe x1 Gen 2; BIOS hiển thị Patriot P300 128GB và ổ cứng cũng hoạt động bình thường
  • F3 Backplane bản cuối được đơn giản hóa để dùng trực tiếp rail 3.3V; sau vài tuần khởi động từ NVMe và chạy btrfs scrub không lỗi, dự án KiCad được công bố trên GitHub

Điểm khởi đầu: loại bỏ SSD USB gắn ngoài

  • Terramaster F2-221 là NAS x86_64 tiêu chuẩn dựa trên Intel J3355, nên bản thân việc cài NixOS thay cho TOS mặc định khá đơn giản
  • Vì cả 2 cổng SATA đều đang dùng cho ổ cứng 4TB, thiết bị lưu trữ hệ điều hành buộc phải là SSD USB gắn ngoài
  • Cần chừa chỗ cho SSD gắn ngoài quanh NAS phía sau kệ, và mỗi lần chuyển đồ lại phải để ý dây cáp, nên phát sinh nhu cầu có thiết bị lưu trữ bên trong
  • Trên bo mạch chủ có đầu nối USB nội bộ để bootstrap TOS, nhưng vì là USB 2.0 nên không phù hợp làm SSD khởi động

So sánh backplane F2-221 và F5-422

  • Trên bo mạch chủ F2-221 có đầu nối dạng PCIe x4 để cắm PCB backplane, nhưng backplane hiện có không có IC chuyển PCIe-SATA
  • Các cổng SATA được đi dây trực tiếp tới đầu nối cạnh PCIe, và sơ đồ chân thực tế là pinout không chuẩn, không phải PCIe tiêu chuẩn
  • Intel J3355 cung cấp 2 cổng SATA và 6 lane PCIe Gen 2, nên các mẫu 4 bay và 5 bay của Terramaster có khả năng đã dùng lane PCIe để tăng số cổng SATA
  • Từ ảnh độ phân giải cao trong bài review Terramaster F5-422, tác giả nhận diện được 2 IC ASMedia ASM1061
    • ASM1061 là bộ điều khiển SATA dựa trên PCIe Gen 2 x1, cung cấp 2 cổng SATA
    • Trên F5-422, ASM1061 thứ nhất được xác định là nối tới cổng 3 và 4 của backplane, ASM1061 thứ hai nối tới cổng 5
  • Ở mặt sau bo mạch chủ F2-221, tác giả cũng xác nhận rằng các chân trông như tín hiệu PCIe trên backplane F5-422 thực sự có được đi dây

Dịch ngược tín hiệu PCIe

  • Dựa trên ảnh backplane F5-422 và datasheet ASM1061, tác giả lần theo các đường PCIe, nhưng nhiều cặp vi sai đi qua via vào các lớp bên trong nên khó phân biệt TX, RX, REFCLK
  • Một manh mối có thể xác nhận là một chân của đầu nối PCIe được nối với PERST# của ASM1061
  • Tác giả dùng đặc điểm truyền thống của PCIe là cặp vi sai TXtụ ghép để phân biệt hướng tín hiệu
    • Cặp vi sai nối với TX của ASM1061 phải có tụ ghép ở phía backplane
    • Nhìn từ góc độ CPU và bo mạch chủ, cặp vi sai đó sẽ là RX
    • Cặp vi sai nối với RX của ASM1061 được suy đoán dựa trên vị trí tụ ghép phía bo mạch chủ
  • REFCLK được suy đoán là cặp vi sai còn lại gần TX·RX nhất của mỗi giao tiếp PCIe x1
  • Tác giả đưa ảnh backplane F5-422 vào KiCad, lần theo các trace bên ngoài tới via và so sánh khả năng routing ở lớp trong để kiểm chứng sơ bộ pinout PCIe1
  • Một số chân không được nối trên backplane F2-221 hiện có, hoặc đi vào lớp trong nên không xác định được mục đích
  • Pinout PCIe2 không được kiểm chứng

Tái cấu trúc mạch nguồn

  • Một mặt của backplane F2-221 không có IC cho tín hiệu PCIe, nhưng có nhiều mạch nguồn gồm MOSFET, diode, điện trở và tụ điện
  • Tác giả kiểm tra linh kiện và trace bằng ảnh cận cảnh rồi dựng lại sơ đồ mạch trong KiCad
  • Mạch được hiểu là cấu trúc load switch khởi động chậm cho từng rail nguồn của cổng SATA
    • F2-221 có tổng cộng 4 mạch: 2 cổng SATA × 2 rail nguồn
    • F5-422 có tổng cộng 10 mạch, tương ứng 5 bay
  • P4, một trong các chân ground của đầu nối SATA, bị kéo xuống ground khi ổ cứng được kết nối và được dùng giống như chân enable của load switch
  • Cấu trúc này có vẻ nhằm giảm tia lửa giữa đầu nối và ổ khi hot-plug ổ cứng do dòng khởi động ban đầu cao
  • Để tránh phải hàn nhiều linh kiện rời, tác giả chọn IC load switch tích hợp có slow starter bên trong onsemi NCP45521-L

Vì sao chọn NVMe thay vì SSD SATA

  • Ban đầu tác giả cân nhắc thêm cổng SATA bằng ASM1061 và gắn SSD SATA bên trong vỏ
  • Đầu nối M.2 có khoảng trống để đặt giữa các ray cố định backplane; dù rất chật, khoảng hở hai bên dưới 1mm, vẫn có thể lắp được
  • Nếu dùng SSD SATA M.2 thì cần bộ điều khiển chuyển PCIe sang SATA
    • Có thể dùng cách với ASM1061 như F5-422
    • Nhưng khó mua riêng IC ASM1061, nên sẽ phải tháo IC từ một card PCIe có ASM1061
  • NVMe tự thân là dựa trên PCIe, nên có thể nối trực tiếp các lane PCIe vào khe M-key M.2 mà không cần bộ điều khiển riêng
  • SSD NVMe thường dùng 4 lane PCIe Gen 3 trở lên, nhưng thiết kế này chỉ dùng 1 lane PCIe Gen 2, nên tốc độ được dự kiến là sẽ không nhanh hơn SATA
  • Dù vậy, NVMe phù hợp hơn cho mục đích này vì không cần bộ điều khiển, routing đơn giản và có nhiều lựa chọn SSD NVMe hơn
  • SSD thực tế được dùng là Patriot P300 128GB, mua tại địa phương với giá €14.90
  • Vì không chắc BIOS có khởi động trực tiếp từ NVMe hay không, tác giả cũng cân nhắc phương án tệ nhất là đặt phân vùng boot trên một USB 2.0 nội bộ

Chế tạo và thử nghiệm PCB nguyên mẫu

  • PCB mới phải khớp với kết cấu gắn backplane của vỏ, nên vị trí đầu nối cạnh PCIe và lỗ vít phải chính xác
  • Cũng cần cân nhắc kích thước PCB và hạn chế luồng khí, vì vậy nguyên mẫu không chỉ quan trọng để kiểm chứng điện mà còn để xác nhận độ khớp cơ khí
  • Tác giả đo PCB hiện có bằng thước và thước cặp, giảm méo ống kính của ảnh chụp chính diện rồi đưa vào KiCad để căn đầu nối, lỗ vít và đường viền
  • Trên nguyên mẫu, các chân chưa xác định được đưa ra test point; do phát hiện rail 3.3V muộn, tác giả thêm bộ buck converter để chuyển 5V thành 3.3V
  • Tác giả đặt JLCPCB làm PCB 4 lớp và nhận được sau vài tuần
  • Đây là lần đầu tác giả hàn gói DFN, linh kiện lại rất nhỏ, nhưng đã kiểm tra ngắn mạch giữa nguồn và ground, đồng thời dùng ảnh cận cảnh từ smartphone để kiểm tra mối hàn
  • Khi cắm vào NAS và khởi động, Patriot P300 128GB xuất hiện trong danh sách tùy chọn boot của BIOS, nên có thể khởi động trực tiếp từ NVMe
  • Dù không tìm được đường CLKREQ từng gây lo ngại, có vẻ nó luôn bị kéo xuống mức thấp ở đâu đó trên bo mạch chủ và REFCLK hoạt động
    • CLKREQ thường được dùng để SSD yêu cầu clock tham chiếu khi cần
    • Trong thiết kế này, ASPM không hoạt động, nhưng vì đây là ổ khởi động của một server luôn bật nên tác giả không xem là vấn đề lớn
  • Ổ cứng cũng hoạt động bình thường sau khi kết nối
  • Vì nguyên mẫu được tạo để thử nghiệm và debug lại hoạt động bình thường luôn, mục đích của các chân chưa xác định không còn quan trọng nữa

F3 Backplane bản cuối

  • Nguyên mẫu hoạt động bình thường, nhưng vẫn còn test point và ngồi hơi lệch trong vỏ, nên tác giả chế tạo lại bản cuối V1.0
  • Ở bản cuối, bộ buck converter được loại bỏ và đầu nối M.2 được nối trực tiếp với rail 3.3V của đầu nối PCIe
  • Tác giả chỉnh vị trí một chút để giảm độ lệch của nguyên mẫu, loại bỏ test point và thêm logo
  • Tên được đặt là F3 Backplane, với ý nghĩa thêm một vào F2
  • PCB bản cuối đặt lại từ JLCPCB cũng hoạt động bình thường như nguyên mẫu
  • Tác giả chạy btrfs scrub toàn bộ trên các ổ cứng và không phát sinh lỗi
  • Hệ thống chạy từ SSD NVMe trong vài tuần mà không hiccup
  • Việc hàn đầu nối SATA khó và hơi thô do không thêm thermal relief vào mặt ground bên trong, nhưng vấn đề này đã được sửa trong kho GitHub

Hiệu năng và tài liệu công khai

  • Kết quả hdparm của SSD NVMe như sau
/dev/nvme0n1:
 Timing cached reads:   4554 MB in  2.00 seconds = 2279.68 MB/sec
 Timing buffered disk reads: 1222 MB in  3.00 seconds = 407.22 MB/sec
  • Tốc độ này không nhanh đối với SSD NVMe, nhưng là kết quả dự kiến vì chỉ dùng 1 lane PCIe Gen 2
  • Hiệu năng đủ dùng cho vai trò ổ khởi động
  • Dự án KiCad được công bố trên GitHub

1 bình luận

 
GN⁺ 2024-04-30
Ý kiến trên Hacker News
  • Với cách hàn package DFN này thì gần như là một cách làm hoàn toàn điên rồ, nhưng trông có vẻ thú vị
    Có thể nó sẽ hoạt động một cách kỳ lạ, nhưng khó mong đợi độ tin cậy nhất quán; có lẽ chỉ đủ cho một dự án dùng một lần

    • Thực tế thì cả 8 lần đều ổn
      May là pad ở đáy của package DFN chạm tới cả hai mép bên nên mới làm được; tôi nghĩ cách này không dùng được với QFN
    • Không hiểu vì sao lại cần “quá nhiều” kem hàn
      Tôi đã làm việc tương tự nhiều lần với chì hàn thông thường; chỉ cần cho hơi dư một chút lên từng pad và tránh tới mức gây chập là được
      Bôi flux, nếu có thể thì dùng flux gốc nhựa thông chịu được lâu cả ở bước gia nhiệt tiếp theo, làm nóng toàn bộ footprint bằng máy khò rồi đặt nhẹ IC lên là xong
      Như vậy không cần thổi khí nóng vào IC quá lâu chỉ để làm nóng toàn bộ
    • Tôi cho rằng đây là một phương pháp hoàn toàn hợp lệ
      Nếu luôn đặt vài via trên pad tản nhiệt và để lộ đồng ở mặt đối diện, các via sẽ không bị solder mask che và sẽ hút phần chì hàn dư
      Với các công việc SMD ngân sách cực thấp, cũng có thể làm nóng pad tản nhiệt từ mặt đối diện bằng mỏ hàn
      Ấn chip xuống cũng được, nhưng phải cẩn thận căn thẳng với các pad
      Tôi hầu như chưa từng thấy cầu hàn, ngoại trừ các giọt chì lớn ở mép ngoài trên QFN
      Hợp kim hàn và solder mask ngày nay ngăn cầu hàn khá tốt, và chì hàn có xu hướng bám vào kim loại hơn là nằm giữa thân package và solder mask
    • Nếu kéo pad từ dưới chip ra ngoài nhiều hơn, việc hàn tay khi cần sẽ dễ hơn nhiều
  • Mong có thêm nhiều tiêu chuẩn hóa cho các bản dựng NAS tiêu dùng
    Tôi đã hỏi ASUSTOR suốt mấy năm nay xem họ có định làm backplane hoặc adapter tương thích Mini ITX không
    Sẽ thật tốt nếu vài năm sau chỉ cần thay backplane, hoặc có thể lắp SBC dạng Pico ITX vào
    Tôi không thích việc sau 5 hay 10 năm thì rất khó nâng cấp NAS cho đúng nghĩa
    Nếu chỉ cần thay bo mạch chủ, nhiều NAS 1Gbps có thể được nâng lên 2.5Gbps hoặc 10Gbps, và chassis có thể dùng lâu hơn thay vì bị đưa ra bãi rác

    • Tôi muốn Framework tham gia lĩnh vực này
      Việc chỉ phần tính toán bị lỗi thời mà phải bỏ cả chassis NAS và backplane là quá lãng phí
      Cũng có thể có synergy với bo mạch chủ Laptop 13, cùng TDP cấp laptop và cả khả năng ARM
      Tuy nhiên thị trường thiết bị NAS appliance có vẻ không lớn, chỉ ở mức “prosumer” và doanh nghiệp nhỏ; điểm khác biệt nằm ở phần mềm hơn là phần cứng
      Người ta mua Synology không phải vì phần cứng mà vì DSM
      Tôi nhớ đã đọc ở đâu đó rằng Framework không có kế hoạch tích hợp dọc, nên hơi tiếc
      Sẽ rất tốt nếu có một OS hỗ trợ Framework mà những thứ như tiết kiệm điện hay cảm giác touchpad đều hoạt động tốt ngay lập tức
    • Ước gì FLASHSTOR của ASUSTOR là một card mở rộng NVMe 6/12 bay, thay vì mainboard tích hợp + switch PCIe + CPU hàn chết + RAM hàn chết
      Tôi muốn chỉ việc cắm thứ như vậy vào PC thông thường, nhưng các sản phẩm tìm được hoặc chỉ có 4 cổng, hoặc quá đắt
    • Cứ mua bo Supermicro, tự làm backplane hoặc dùng loại có sẵn, rồi thêm card mở rộng trong khả năng bo mạch chủ chịu được là xong
    • Nhưng nếu vậy thì nhà sản xuất sẽ không thể bán chassis và bo mạch chủ trị giá 100 đô la với giá 500 đô la nữa
      Câu trả lời thì chính bạn đã nói rồi
  • Luôn thấy khâm phục trước mức độ đào sâu và công sức mà mọi người sẵn sàng bỏ ra
    Đặc biệt là với những việc như độ guitar hay phần cứng, hỏng là mất tiền thật
    Có lẽ trước khi lao ngay vào những dự án kiểu này, nên tích lũy kinh nghiệm với mỏ hàn hay dụng cụ mộc ở chỗ khác
    Cũng tò mò vì sao thị trường những chiếc hộp nhỏ thân thiện với hacking để có thể can thiệp phần cứng hoặc phần mềm dễ hơn lại không lớn
    Giá mà có một NAS tầm giá người dùng phổ thông, có thể gỡ hệ điều hành đi và thay bằng OS hoặc kernel thông thường
    Có lẽ chỉ là mình quá sợ việc sửa đổi các vật thể vật lý thật

    • Tự dựng một NAS với tổng chi phí £1000
      Có 24TB đĩa vật lý, dung lượng dùng được 16TB (Raid Z2), chạy Ubuntu LTS bản server, các container cần thiết thì chạy trên Docker qua Portainer
      Không phải GUI bấm chuột dễ dùng cho mọi người, những thứ như mount SMB phải tự tạo trong terminal, nhưng để bảo trì thì đủ dễ
      Phần cứng gồm mainboard Asrock Rack C246 WSI Mini ITX, 32GB ECC RAM, Intel i3-9100T, 6 ổ IronWolf 4TB NAS, chassis rackmount 2U chiều sâu ngắn, và ổ boot 1TB Samsung 850 Evo
      Điện năng khi idle là 23W, đủ thấp, khi tải lên đến 65W
      Đĩa được cho spin down sau 10 phút không hoạt động, vậy mà số chu kỳ load/unload hằng năm chỉ khoảng 10 nghìn lần, vẫn ổn so với định mức 600 nghìn lần
    • Có thể không thuộc tầm giá người dùng phổ thông, nhưng Supermicro làm phần cứng khá tốt cho NAS
      Có thể tự lắp ổ và cài OS mình muốn
      Tôi có một máy cấu hình 183TB chạy TrueNAS (ZFS), dùng rất tốt
      Về cơ bản đó là một hộp x86 tiêu chuẩn với nhiều khe ổ, backplane, cổng SAS/SATA và dung lượng controller
      Thị trường đồ cũ cũng khá sôi động
      Tuy nhiên vì nhắm tới những người muốn nhét hơn 10 ổ vào một chassis, nên gọi là hàng tiêu dùng thì hơi khó
    • Tò mò không biết hiện giờ có lựa chọn nào tốt không
      Tôi cứ nghĩ mãi chuyện mua một NAS, nhưng không muốn dùng OS độc quyền của nhà cung cấp có thể quét dữ liệu của mình vì tích hợp cloud vô dụng hoặc mang tính đối nghịch
      Cũng không thích khả năng còn sót lại backdoor mật khẩu hard-code
    • Có barebone NAS hỗ trợ 2 ổ cứng 3.5 inch, 2 M.2 NVMe và 2 cổng LAN 2.5GbE
      Không rõ chất lượng BIOS, không có RAM nhưng có thể nâng lên 32GB, còn OS thì tự mang đến
      Mẫu Intel Alder Lake N100 giá $189: https://aoostar.com/products/aoostar-r1-2bay-nas-intel-n100-...
      Mẫu Ryzen 5700 giá $299: https://aoostar.com/products/aoostar-r7-2-bay-nas-amd-ryzen-...
    • Nếu sẵn sàng tự mày mò thì lựa chọn khá nhiều
      Cũng có người dùng Raspberry Pi làm NAS, tuy chậm nhưng dùng làm backup cục bộ rẻ tiền thì vẫn được
      Các NAS tích hợp cũ như DNS-320 cũng có thể root để chạy một bản Debian tương đối gần đây vẫn còn có bản vá bảo mật
      Nhưng CPU và RAM rất yếu nên phải quen với dòng lệnh
      Cũng có thể mua một server HP Proliant cũ (cỡ gen8), cắm 4 ổ cứng 16TB và boot từ ổ thứ 5
  • Tò mò về đoạn “header USB này chỉ là USB 2.0 nên không phải lựa chọn cho mục đích này”
    Không phải nghi ngờ dự án tuyệt vời này, nhưng muốn biết vì sao USB 2.0 lại không phù hợp để chứa OS trong NAS
    Ngoài việc đọc lúc boot và thỉnh thoảng ghi chút dữ liệu thì nó còn làm gì nữa không?

    • Tôi đang chạy NAS bằng đĩa boot USB 2.0, vấn đề duy nhất là systemd-journald không được thiết kế với đĩa chậm trong đầu
      Khi thao tác journalctl trên log file 6 tháng, do kiểu truy cập file không tối ưu của journalctl nên mất 1–2 phút
    • Trong bài không viết, nhưng tôi cũng chạy vài tác vụ server nhẹ trên máy này, và với USB 2.0 flash drive thì chậm đến mức khó chịu
      Tất nhiên tôi không phủ nhận lý do thật sự làm cái này chỉ là vì mày mò cho vui
  • Có vẻ là hacker tệ rồi
    Tôi cũng gặp vấn đề tương tự là phải cắm ổ ngoài vào NAS, và chỉ dùng Velcro dán nó lên nóc NAS

    • Với mục đích kiểu này thì súng bắn keo là thứ tiện tay nhất
  • Trông ngầu hơn nhiều so với cái case “custom” bằng Lego mà tôi làm để nhét NAS tự chế ở nhà
    Tôi cắm 4 ổ cứng USB vào hub, rồi nối hub đó với Nvidia Jetson
    Muốn làm thành một khối liền, mà Lego nhái thì quá rẻ nên có thể thử nghiệm dễ dàng
    Cũng vui, nhưng cái này trông chuyên nghiệp hơn nhiều nên hơi ghen tị

  • Đáng kinh ngạc và tao nhã
    Thật ấn tượng khi đi được đến đây chỉ bằng suy đoán, một chút thử-sai, kiểm tra thông mạch, và cách thay thế khá nhẹ nhàng cho IC load switch

    • Tôi đã gom một lượng thông tin khổng lồ từ nhiều diễn đàn và Stack Exchange, có vài thứ thì đành miễn cưỡng chấp nhận là sự thật
      Nhưng cuối cùng mọi thứ đã chạy tốt
  • Một giải pháp thật sự tuyệt vời
    Tôi đang dùng mẫu 5-bay của cùng NAS này, cắm một USB Samsung vào cổng USB bên trong để cài TrueNAS Scale
    Tôi chọn loại được dùng rộng rãi cho camera hành trình Tesla, nên nghĩ ít nhất nó cũng có độ bền nhất định
    Đến giờ thì hài lòng, nhưng hiệu năng CPU vẫn thiếu rất nhiều nên đang định nâng cấp lên loại mạnh hơn

    • CPU yếu là đúng thật
      Tôi cũng từng nghĩ tới việc thay mainboard bằng carrier custom cho ARM compute module hoặc Lattepanda mu mới, nhưng có lẽ trước hết nên dùng dự án mới đã bỏ công làm này đã
  • Làm rất tốt, và tôi thích những dự án kiểu này, nơi mọi người tự mình kiểm soát phần cứng của họ
    Việc công khai tài liệu hóa cũng đáng được khen thêm lần nữa
    Tuy vậy tôi vẫn tò mò liệu có phát sinh vấn đề về luồng khí hay không
    Trên PCB gốc và PCB đã chỉnh sửa có một lỗ lớn ở giữa, tôi đoán là để luồng khí đi qua phía trên các ổ đĩa
    Nhưng ổ NVMe lại che mất phần đó
    Có lẽ vẫn đủ khí lọt qua quanh mép NVMe để làm mát các ổ thông thường, và biết đâu còn được thêm chiếc NVMe được làm mát tốt nhất thế giới
    Dù vậy không gian trông vẫn rất chật

    • Phần đó tôi cũng đã lo
      Tôi không rành khí động học nên không thể chắc chắn, nhưng tôi nghĩ vẫn sẽ có một lượng khí nhất định đi qua các lỗ
      Việc đẩy các standoff bắt vít cho SSD sát về mép trái của PCB cũng là để khí đi qua bên phải nhiều hơn
      Ít nhất cho đến giờ tôi chưa cảm thấy hiệu năng làm mát bị kém đi
  • Tôi không có việc gì trực tiếp để dùng đến, nhưng vẫn thấy hào hứng
    Thật tuyệt và truyền cảm hứng khi thấy ai đó đào sâu đến vậy, học hỏi, rồi chia sẻ những gì mình đã học