2P by GN⁺ | ★ favorite | 댓글 1개
  • Terramaster F2-221에 NixOS를 올린 뒤 외장 USB SSD가 걸림돌이 되자, 내부에 NVMe 부팅 SSD를 넣기 위한 백플레인을 직접 제작함
  • 기존 F2-221 백플레인은 SATA와 전원 회로 중심이었고, F5-422 사진 분석으로 Terramaster가 ASM1061 SATA 컨트롤러 2개로 베이를 확장한 방식을 확인함
  • PCIe 차동쌍은 F5-422 사진, ASM1061 데이터시트, 커플링 커패시터 위치를 맞춰 추적했지만 일부 핀은 끝까지 확인되지 않았고 PCIe2 핀아웃도 검증하지 않음
  • 프로토타입 PCB는 M.2 NVMe 슬롯을 PCIe x1 Gen 2 라인에 직접 연결했으며, BIOS에 Patriot P300 128GB가 표시되고 하드디스크도 정상 동작함
  • 최종 F3 Backplane은 3.3V 레일을 직접 쓰도록 단순화됐고, 몇 주간 NVMe 부팅과 btrfs scrub에서 오류 없이 동작해 KiCad 프로젝트가 GitHub에 공개됨

외장 USB SSD를 없애려는 출발점

  • Terramaster F2-221은 Intel J3355 기반의 표준 x86_64 NAS라서, 기본 TOS 대신 NixOS를 설치하는 일 자체는 단순했음
  • SATA 커넥터 2개가 모두 4TB 하드디스크에 쓰이고 있어 운영체제 저장장치로는 외장 USB SSD를 연결해야 했음
  • 선반 뒤 NAS 주변에 외장 SSD 공간을 확보하고, 물건을 옮길 때마다 케이블을 신경 써야 해 내부 저장장치가 필요해짐
  • 메인보드에는 TOS 부트스트랩용 내부 USB 커넥터가 있었지만 USB 2.0이라 부팅 SSD 용도로는 부적합했음

F2-221과 F5-422 백플레인 비교

  • F2-221 메인보드에는 백플레인 PCB가 꽂히는 PCIe x4 형태의 커넥터가 있었지만, 기존 백플레인에는 PCIe-SATA 변환 IC가 없었음
  • SATA 커넥터는 PCIe 엣지 커넥터에 직접 배선되어 있었고, 실제 핀 배치는 표준 PCIe가 아닌 비표준 핀아웃이었음
  • Intel J3355는 SATA 포트 2개와 PCIe Gen 2 레인 6개를 제공하므로, Terramaster의 4베이·5베이 모델은 PCIe 레인으로 SATA 포트를 늘렸을 가능성이 있었음
  • Terramaster F5-422 리뷰의 고해상도 사진에서 ASMedia ASM1061 IC 2개를 식별함
    • ASM1061은 PCIe Gen 2 x1 기반 SATA 컨트롤러이며 SATA 포트 2개를 제공함
    • F5-422에서는 첫 번째 ASM1061이 백플레인의 3·4번 포트에, 두 번째 ASM1061이 5번 포트에 연결된 것으로 파악함
  • F2-221 메인보드 뒷면에서도 F5-422 백플레인에서 PCIe 신호로 보이는 핀들이 실제로 배선되어 있음을 확인함

PCIe 신호 역공학

  • F5-422 백플레인 사진과 ASM1061 데이터시트를 바탕으로 PCIe 라인을 추적했지만, 여러 차동쌍이 비아를 거쳐 내부 레이어로 들어가 TX, RX, REFCLK 구분이 쉽지 않았음
  • 확인 가능한 단서 중 하나는 PCIe 커넥터의 한 핀이 ASM1061의 PERST#에 연결되어 있다는 점이었음
  • PCIe에서 전통적으로 TX 차동쌍에 커플링 커패시터가 들어간다는 점을 이용해 신호 방향을 구분함
    • ASM1061의 TX에 연결된 차동쌍은 백플레인 쪽에 커플링 커패시터가 있어야 함
    • CPU와 메인보드 관점에서는 해당 차동쌍이 RX가 됨
    • ASM1061의 RX에 연결되는 차동쌍은 메인보드 쪽 커플링 커패시터 위치로 추정함
  • REFCLK는 각 PCIe x1 인터페이스의 TX·RX에 가장 가까운 남은 차동쌍으로 추정함
  • KiCad에 F5-422 백플레인 사진을 불러와 외부 트레이스를 비아까지 따라가고 내부 레이어 라우팅 가능성을 비교하면서 PCIe1 핀아웃을 대략 검증함
  • 일부 핀은 기존 F2-221 백플레인에서 연결되지 않았거나 내부 레이어로 들어가 목적을 확인하지 못함
  • PCIe2 핀아웃은 검증하지 않았음

전원 회로 재구성

  • F2-221 백플레인의 한쪽 면에는 PCIe 신호용 IC가 없었지만 MOSFET, 다이오드, 저항, 커패시터 중심의 전원 회로가 많았음
  • 클로즈업 사진으로 부품과 트레이스를 확인하고 KiCad에서 회로도를 다시 만듦
  • 회로는 SATA 포트의 각 전원 레일마다 하나씩 있는 슬로 스타트 로드 스위치 구조로 파악함
    • F2-221에는 SATA 포트 2개 × 전원 레일 2개로 총 4개가 있음
    • F5-422에는 5베이에 맞춰 총 10개가 있음
  • SATA 커넥터의 접지 핀 중 하나인 P4가 하드디스크 연결 시 접지로 당겨지며, 로드 스위치의 enable 핀처럼 쓰이는 구조였음
  • 이 구조는 하드디스크 핫플러그 시 높은 초기 돌입 전류 때문에 커넥터와 드라이브 사이에 스파크가 생기는 것을 줄이기 위한 것으로 보임
  • 많은 개별 부품을 납땜하지 않기 위해, 내장 슬로 스타터가 있는 통합 로드 스위치 IC onsemi NCP45521-L을 선택함

SATA SSD 대신 NVMe를 선택한 이유

  • 처음에는 ASM1061로 SATA 포트를 추가하고 SATA SSD를 케이스 안에 붙이는 방안을 고려함
  • M.2 커넥터는 백플레인 고정 레일 사이에 들어갈 공간이 있었고, 양쪽 여유가 1mm 미만일 정도로 좁았지만 장착은 가능했음
  • SATA M.2 SSD를 쓰려면 PCIe를 SATA로 바꾸는 컨트롤러가 필요했음
    • F5-422처럼 ASM1061을 쓰는 방식이 가능함
    • 하지만 ASM1061 IC를 단품으로 사기 어려워, ASM1061이 들어간 PCIe 카드에서 IC를 떼어내야 했음
  • NVMe는 자체가 PCIe 기반이라 별도 컨트롤러 없이 PCIe 라인을 M-key M.2 슬롯에 직접 연결할 수 있음
  • NVMe SSD는 보통 PCIe Gen 3 이상 4레인을 쓰지만, 이 설계에서는 PCIe Gen 2 1레인만 사용하므로 속도는 SATA보다 빠르지 않을 것으로 예상함
  • 그래도 컨트롤러가 필요 없고 라우팅이 단순하며, NVMe SSD 선택지가 더 많아 이 용도에는 NVMe가 더 적합했음
  • 실제 SSD로는 Patriot P300 128GB를 현지에서 €14.90에 구입함
  • BIOS가 NVMe에서 직접 부팅할지 불확실해, 최악의 경우 내부 USB 2.0 스틱에 부트 파티션을 두는 방안도 고려함

프로토타입 PCB 제작과 테스트

  • 새 PCB는 케이스의 백플레인 장착 구조에 맞아야 했기 때문에 PCIe 엣지 커넥터와 나사 구멍 위치가 정확해야 했음
  • PCB 크기와 공기 흐름 제한도 고려해야 해서, 프로토타입은 전기적 검증뿐 아니라 기계적 맞춤 확인에도 중요했음
  • 기존 PCB를 자와 캘리퍼스로 측정하고, 정면 사진의 렌즈 왜곡을 줄인 뒤 KiCad에 불러와 커넥터·나사 구멍·외곽선을 맞춤
  • 프로토타입에는 미확인 핀을 테스트 포인트로 빼두었고, 3.3V 레일을 늦게 발견해 5V를 3.3V로 바꾸는 벅 컨버터를 넣음
  • JLCPCB에 4레이어 PCB를 주문해 몇 주 뒤 수령함
  • DFN 패키지 납땜은 처음이었고 부품이 매우 작았지만, 전원과 접지 사이 단락을 확인하고 스마트폰 클로즈업으로 납땜 상태를 점검함
  • NAS에 꽂아 부팅하자 BIOS 부팅 옵션 목록에 Patriot P300 128GB가 표시되어 NVMe에서 직접 부팅할 수 있었음
  • 우려했던 CLKREQ 라인은 찾지 못했지만, 메인보드 어딘가에서 항상 낮게 당겨져 있는 것으로 보였고 REFCLK가 동작함
    • CLKREQ는 보통 SSD가 필요할 때 참조 클럭을 요청하는 데 사용됨
    • 이 설계에서는 ASPM이 동작하지 않지만, 항상 켜져 있는 서버의 부팅 드라이브라 큰 문제로 보지 않음
  • 하드디스크도 연결 후 정상 동작함
  • 테스트와 디버깅을 위해 만든 프로토타입이 그대로 정상 작동하면서, 미확인 핀의 목적은 더 이상 중요하지 않게 됨

최종판 F3 Backplane

  • 프로토타입은 정상 동작했지만 테스트 포인트가 남아 있고 케이스 안에서 약간 비뚤게 앉아, 최종판 V1.0을 다시 제작함
  • 최종판에서는 벅 컨버터를 제거하고 M.2 커넥터를 PCIe 커넥터의 3.3V 레일에 직접 연결함
  • 위치를 약간 조정해 프로토타입의 비뚤어짐을 줄이고, 테스트 포인트를 제거하고 로고를 추가함
  • 이름은 F2에 하나를 더했다는 뜻으로 F3 Backplane으로 정함
  • JLCPCB에 다시 주문해 수령한 최종 PCB도 프로토타입처럼 정상 동작함
  • 하드디스크 대상으로 전체 btrfs scrub을 실행했으며 오류는 발생하지 않음
  • 몇 주 동안 NVMe SSD에서 시스템을 실행했지만 hiccup 없이 동작함
  • SATA 커넥터 납땜은 내부 접지면에 thermal relief를 추가하지 않아 어려웠고 거칠게 되었지만, 이 문제는 GitHub 저장소에서 수정됨

성능과 공개 자료

  • NVMe SSD의 hdparm 결과는 다음과 같음
/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
  • NVMe SSD치고 빠른 속도는 아니지만, PCIe Gen 2 1레인만 사용하므로 예상된 결과임
  • 부팅 드라이브 용도로는 충분한 성능임
  • KiCad 프로젝트는 GitHub에 공개되어 있음

댓글과 토론

Hacker News 의견들
  • DFN 패키지를 납땜하는 방식으로는 완전히 미친 방법에 가깝지만 재미는 있어 보임
    묘하게 작동할 수는 있겠지만, 일관된 신뢰성은 기대하기 어렵고 일회성 프로젝트에나 충분할 듯함

    • 실제로는 8번 다 잘 됐음
      다행히 DFN 패키지의 바닥 패드가 양쪽 가장자리까지 닿아서 가능했고, QFN에는 이 방식이 안 통할 것 같음
    • 왜 “너무 많은” 솔더 페이스트가 필요한지는 모르겠음
      비슷한 작업을 일반 납으로 여러 번 해봤는데, 각 패드에 약간 넉넉하게만 올리고 쇼트가 날 정도는 피하면 됨
      플럭스, 가능하면 다음 가열 단계에서도 오래 버티는 송진계 플럭스를 바르고, 열풍기로 전체 풋프린트를 데운 뒤 IC를 살짝 올리면 됨
      이러면 전체를 데우느라 IC에 열풍을 오래 쏘지 않아도 됨
    • 충분히 유효한 방법이라고 봄
      항상 열 패드에 비아를 몇 개 넣고 반대편 구리를 노출해 두면, 비아가 솔더 마스크로 막히지 않고 남는 납을 빨아들임
      아주 저예산 SMD 작업에서는 반대편에서 인두로 열 패드를 데울 수도 있음
      칩을 눌러도 괜찮지만 패드와 정렬을 조심해야 함
      QFN에서 바깥쪽 가장자리에 큰 납방울이 생기는 것 말고는 솔더 브리지를 거의 본 적이 없음
      요즘 납 합금과 솔더 마스크는 브리지를 꽤 잘 막아 주고, 납은 패키지 몸체와 솔더 마스크 사이에 머무르기보다 금속에만 붙으려는 성질이 강함
    • 패드를 칩 아래에서 바깥쪽으로 더 빼두면 필요할 때 손납땜이 훨씬 쉬워짐
  • 소비자용 NAS 빌드에 표준화가 더 많아졌으면 함
    ASUSTOR에 몇 년째 Mini ITX 호환 백플레인이나 어댑터를 만들 생각이 없는지 물어봤음
    몇 년 뒤 백플레인만 갈아 끼울 수 있거나, Pico ITX 같은 형태로 SBC를 넣을 수 있으면 좋겠음
    5년이나 10년 지나면 NAS를 제대로 업그레이드하기 어렵다는 게 싫음
    메인보드만 바꿀 수 있다면 많은 1Gbps NAS를 2.5Gbps나 10Gbps로 올리고, 섀시는 매립지로 보내지 않고 더 오래 쓸 수 있음

    • Framework가 이 분야에 들어오면 좋겠음
      연산부만 낡았는데 NAS 섀시와 백플레인까지 폐기하는 건 너무 큰 낭비임
      Laptop 13 메인보드와 시너지도 있을 수 있고, 노트북급 TDP에 ARM 가능성까지 있음
      다만 NAS 어플라이언스 시장은 “프로슈머”와 소규모 사업자 정도로 크지 않아 보이고, 차별화는 하드웨어보다 소프트웨어에 있음
      사람들이 Synology를 사는 건 하드웨어가 아니라 DSM 때문임
      Framework가 수직 통합 계획은 없다고 어디선가 읽은 것 같아 아쉬움
      절전이나 터치패드 감각 같은 것까지 바로 잘 동작하는 Framework 지원 OS가 있으면 좋겠음
    • ASUSTOR의 FLASHSTOR가 통합 메인보드+PCIe 스위치+납땜된 CPU+납땜된 RAM이 아니라, 6/12베이 NVMe 확장 카드였으면 좋겠음
      그런 걸 일반 PC에 그냥 꽂고 싶은데, 찾아본 제품들은 4포트짜리거나 너무 비쌈
    • Supermicro 보드를 사고, 백플레인은 직접 만들거나 기성품을 쓰고, 메인보드가 감당하는 만큼 확장 카드를 추가하면 됨
    • 그렇지만 그러면 업체가 100달러짜리 섀시와 메인보드를 500달러에 팔 수 없게 됨
      답은 이미 스스로 한 셈임
  • 사람들이 기꺼이 파고드는 깊이와 노력이 늘 감탄스러움
    기타나 하드웨어 개조처럼 망치면 실제 돈을 잃는 작업일수록 더 그렇다
    이런 프로젝트에 바로 손대기 전에 납땜 인두나 목공 도구 경험을 다른 데서 쌓아야 할 것 같음
    하드웨어나 소프트웨어를 더 쉽게 만질 수 있는 해킹 친화적 소형 박스 시장이 왜 크지 않은지도 궁금함
    운영체제를 걷어내고 일반 OS나 커널로 바꿀 수 있는 소비자 가격대 NAS가 있으면 좋겠음
    어쩌면 실제 물리 물체를 개조하는 데 너무 겁이 많은 걸지도 모름

    • £1000으로 직접 NAS를 만들었음
      물리 디스크 24TB, 사용 가능 용량 16TB(Raid Z2)이고, Ubuntu LTS 서버판을 돌리며 필요한 컨테이너는 Portainer로 Docker에서 띄움
      누구나 쓰기 쉬운 클릭식 GUI는 아니고 SMB 마운트 같은 건 터미널에서 직접 만들어야 하지만, 유지하기엔 충분히 쉬움
      하드웨어는 Asrock Rack C246 WSI Mini ITX 메인보드, 32GB ECC RAM, Intel i3-9100T, IronWolf 4TB NAS 드라이브 6개, 짧은 깊이의 2U 랙마운트 섀시, 1TB Samsung 850 Evo 부팅 드라이브임
      유휴 전력은 23W라 충분히 낮고, 부하 시 65W까지 올라감
      디스크는 10분간 비활성화되면 스핀다운시키는데도 연간 로드/언로드 사이클이 약 1만 회 정도라, 정격 60만 회 대비 괜찮음
    • 일반 소비자 가격대는 아닐 수 있지만, Supermicro는 NAS용으로 꽤 좋은 하드웨어를 만듦
      직접 드라이브를 채우고 원하는 OS를 올릴 수 있음
      183TB 구성에 TrueNAS(ZFS)를 돌리는 장비가 있는데 아주 좋음
      기본적으로 드라이브 슬롯, 백플레인, SAS/SATA 포트와 컨트롤러 용량이 많은 표준 x86 박스임
      중고 시장도 꽤 활발함
      다만 한 섀시에 드라이브를 10개 이상 넣고 싶은 사람을 겨냥해서, 소비자용이라고 하긴 애매함
    • 지금 좋은 선택지가 있는지 궁금함
      NAS를 하나 살까 계속 생각하지만, 쓸모없거나 적대적인 클라우드 통합 때문에 내 데이터를 스캔할 수도 있는 독점 벤더 OS는 쓰고 싶지 않음
      하드코딩된 비밀번호 백도어가 남아 있을 가능성도 싫음
    • 3.5인치 하드디스크 2개, M.2 NVMe 2개, 2.5GbE LAN 2개를 지원하는 NAS 베어본이 있음
      BIOS 품질은 알 수 없고, RAM은 없지만 32GB까지 확장 가능하며 OS는 직접 가져오면 됨
      Intel Alder Lake N100 모델은 $189: https://aoostar.com/products/aoostar-r1-2bay-nas-intel-n100-...
      Ryzen 5700 모델은 $299: https://aoostar.com/products/aoostar-r7-2-bay-nas-amd-ryzen-...
    • 직접 만질 의향이 있으면 선택지는 꽤 많음
      Raspberry Pi를 NAS로 쓰는 사람들도 있고, 느리지만 저렴한 로컬 백업용으로는 작동함
      DNS-320 같은 오래된 통합 NAS도 루팅해서 보안 패치가 나오는 비교적 최근 Debian 계열을 돌릴 수 있음
      다만 CPU와 RAM 사양이 매우 낮아서 명령줄에 익숙해야 함
      오래된 HP Proliant 서버(gen8 정도)를 사서 16TB 하드디스크 4개를 꽂고 5번째 드라이브에서 부팅하는 방법도 있음
  • “이 USB 헤더는 USB 2.0뿐이라 이 목적에는 선택지가 아니다”라는 부분이 궁금함
    훌륭한 프로젝트를 의심하는 건 아니지만, NAS에서 OS용으로 USB 2.0이 왜 부적합한지 알고 싶음
    부팅 때 읽고, 가끔 약간의 데이터를 쓰는 것 말고 더 하는 일이 있나?

    • USB 2.0 부팅 디스크로 NAS를 돌리고 있는데, 유일한 문제는 systemd-journald가 느린 디스크를 염두에 두고 만들어지지 않았다는 점임
      6개월치 로그 파일에 대해 journalctl 작업을 하면, journalctl의 최적이 아닌 파일 접근 패턴 때문에 1~2분은 걸림
    • 글에는 쓰지 않았지만 이 머신에서 가벼운 서버 작업도 돌리고 있고, USB 2.0 메모리로는 짜증 날 정도로 느렸음
      물론 이걸 만든 진짜 이유가 그냥 만지작거리는 게 재미있어서였다는 점은 부정하지 않겠음
  • 나쁜 해커인 것 같음
    NAS에 외장 드라이브를 꽂아야 하는 같은 문제가 있었는데, 그냥 벨크로로 NAS 위에 붙였음

    • 이런 용도에는 글루건이 제일 손에 잘 감
  • 집에서 만든 NAS를 넣으려고 레고로 만든 “커스텀” 케이스보다 훨씬 멋져 보임
    USB 하드디스크 4개를 허브에 꽂고, 그 허브를 Nvidia Jetson에 연결했음
    일체형으로 만들고 싶었고, 짝퉁 레고가 워낙 싸서 쉽게 실험해볼 수 있었음
    재미도 있었지만, 이건 훨씬 더 전문적으로 보여서 좀 부러움

  • 놀랍고 우아함
    추측, 약간의 시행착오, 회로 도통 확인, 그리고 로드 스위치 IC를 꽤 가볍게 대체하는 방식만으로 여기까지 간 게 대단함

    • 여러 포럼과 Stack Exchange에서 엄청난 양의 정보를 모았고, 어떤 건 마지못해 사실로 받아들여야 했음
      그래도 결국 잘 됐음
  • 정말 멋진 해결책임
    같은 NAS의 5베이 모델을 쓰고 있는데, 내부 USB에 Samsung USB 메모리를 꽂아 TrueNAS Scale을 설치했음
    Tesla 블랙박스용으로 널리 쓰이는 제품을 골라서, 적어도 어느 정도 내구성은 있다고 봤음
    지금까지는 만족하지만 CPU 성능은 여전히 많이 부족해서 더 강한 걸로 업그레이드할 계획임

    • CPU 성능이 부족한 건 정말 맞음
      메인보드를 ARM 컴퓨트 모듈용 커스텀 캐리어나 새 Lattepanda mu로 바꾸는 생각도 해봤지만, 일단 이렇게 공들여 만든 새 프로젝트부터 써야 할 것 같음
  • 잘 만들었고, 사람들이 자기 하드웨어를 직접 통제하는 이런 프로젝트가 좋음
    공개적으로 문서화한 점도 한 번 더 칭찬할 만함
    다만 공기 흐름 문제가 생길지 궁금함
    원래 PCB와 수정된 PCB 중앙에 큰 구멍이 있는데, 드라이브 위로 공기를 흐르게 하려는 용도라고 추정됨
    그런데 NVMe 드라이브가 그걸 가림
    아마 NVMe 가장자리 주변으로 충분히 새어 나가 일반 드라이브 냉각에는 괜찮고, 덤으로 세계에서 가장 잘 냉각되는 NVMe를 얻게 될 수도 있음
    그래도 공간은 매우 빡빡해 보임

    • 그 부분은 나도 걱정했음
      공기역학을 잘 아는 건 아니라 확신할 수는 없지만, 구멍을 통해 어느 정도 공기가 지나갈 거라고 봄
      SSD용 나사 스탠드오프를 PCB 왼쪽 끝까지 밀어 둔 것도 오른쪽으로 공기가 더 지나가게 하려는 의도였음
      적어도 지금까지 냉각 성능이 나빠진 건 느끼지 못했음
  • 직접적으로 쓸 일은 없지만 그래도 신남
    이렇게 깊이 파고들고, 배우고, 배운 걸 공유하는 모습을 보면 정말 좋고 자극이 됨