GN⁺: NVMe TCP를 통한 노트북 복제
(copyninja.in)NVME TCP를 이용한 노트북 복제
- 최근 새 노트북을 구입하고 사용을 위해 설정해야 했음.
- 기존에 알려진 단계를 반복하는 것에 대한 의욕이 없었음.
- 동료의 제안으로, 기존 디스크를 새 노트북에 복사하는 방법을 고려함.
복제 과정에 대한 의문
- 기존 노트북을 열고 새 디스크를 USB로 연결하는 도구가 없음.
- 전체 디스크 암호화를 사용하고 있으며, 기존 노트북은 512GB, 새 노트북은 1TB NVME를 사용함.
- LUKS 파티션 크기 조정에 익숙하지 않음.
동료의 제안
- NVME over TCP를 사용하여 디스크를 네트워크를 통해 공유하고 전체 디스크 복사를 수행하라고 제안함.
- 제안된 단계는 다음과 같음:
- 기존 노트북에서 nvmet-tcp를 사용하여 디스크를 내보냄.
- 새 노트북으로 디스크 복사를 수행함.
- 파티션을 1TB 전체를 사용하도록 크기 조정함.
- LUKS 크기를 조정함.
- 마지막으로 BTRFS 루트 디스크의 크기를 조정함.
NVME TCP를 통한 디스크 내보내기
- systemd-storagetm.service를 사용하는 것이 가장 쉬운 방법으로 제안됨.
- 대신 GRML 구조 CD로 두 노트북을 부팅하고 nvmet-tcp 모듈을 사용하여 NVME 디스크를 내보내는 단계를 수행함.
디스크 복사
- dd 명령을 사용하여 루트 디스크를 새 노트북으로 복사함.
- 새 노트북에 이더넷 포트가 없어서 Wi-Fi만을 사용해야 했으며, 전체 512GB를 복사하는 데 약 7시간 반 소요됨.
- 복사 속도는 약 18-20MB/s였음.
파티션 및 LUKS 컨테이너 크기 조정
- parted를 실행했을 때 파티션 테이블이 디스크 크기와 일치하지 않는 것을 감지하고 수정을 요청함.
- cloud-guest-utils를 설치하여 growpart를 사용하여 파티션을 1TB까지 확장함.
- cryptsetup-resize를 사용하여 LUKS 컨테이너 크기를 증가시킴.
- 시스템에 로그인한 후 BTRFS 파일 시스템의 크기를 조정함.
결론
- 이 과정의 유일한 이점은 새 노트북을 사용하면서 기존 노트북을 사용하는 것과 같은 느낌을 가질 수 있다는 것임.
- 새 노트북을 설정하는 데 일반적으로 1~2주가 걸리지만, 이 경우 그 시간을 절약할 수 있음.
- NVME over TCP를 사용하여 디스크를 내보내는 방법을 배웠다는 추가적인 이점이 있음.
GN⁺의 의견
- NVME over TCP를 이용한 노트북 복제는 기존 시스템 환경을 새 하드웨어로 빠르게 이전할 수 있는 효율적인 방법을 제시함.
- 이 기술은 시스템 관리자나 개발자들에게 시간을 절약하고 설정 오류를 최소화할 수 있는 방법으로 흥미를 줄 수 있음.
- 그러나 네트워크 속도에 크게 의존하며, Wi-Fi만 사용할 경우 상당한 시간이 소요될 수 있어 이는 고려해야 할 단점임.
- 유사한 기능을 제공하는 Clonezilla나 Acronis 같은 도구들이 있으나, NVME over TCP는 네트워크를 통한 직접적인 디스크 접근이라는 독특한 이점을 가짐.
- 이 기술을 도입할 때는 네트워크 설정, 암호화된 디스크의 처리, 파일 시스템의 크기 조정 등에 대한 충분한 지식이 필요함.
Hacker News 의견
-
저자의 시나리오에서는 NVMe/TCP를 사용하는 이점이 없음. 단순히
dd
를 사용하여 직렬 블록 복사를 수행하기 때문에 동시 I/O를 활용하지 못함. 복잡한 명령어들은 간단한netcat
으로 대체 가능.- 목적지 노트북에서는
$ nc -l -p 1234 | dd of=/dev/nvme0nX bs=1M
사용. - 출발지 노트북에서는
$ nc x.x.x.x 1234 </dev/nvme0nX
사용. - 목적지에서
dd
는 쓰기 작업을 버퍼링하여 더 빠르고 효율적으로 만듦. 출발지/목적지에서gzip/gunzip
을 추가하면 디스크가 가득 차 있지 않은 경우 전체 작업이 훨씬 빨라짐. 이 방법은 네트워크를 통해 PC 이미지를 만드는 가장 좋아하는 방법임.gzip
에--fast
옵션을 전달하거나, 더 빠른lz4/unlz4
로 대체하는 것이 좋음. 최근에 1TB NVMe가 있는 새로운 윈도우 노트북을 이미징할 때 사용했으며, GigE를 통해 20분 정도 걸렸고 결과 이미지는 20GB였음. 보통 이lz4
이미지를 백업하고 몇 년 후 노트북을 기부할 때unlz4 | dd
로 복원함. 매우 편리함. - Linux 커널 모듈
nvme-tcp
에 대해서는 몰랐지만, 매일 새로운 것을 배움. 이 모듈의 유용성은dd
로 원시 접근하는 것보다는 원격 NVMe에 파일 시스템을 마운트하는 데 더 있음. - Linux에서 최대 파이프 버퍼 크기는 64kB이므로
dd bs=X
인수는 기술적으로 그보다 클 필요가 없음. 그러나bs=1M
은 해가 되지 않고(64kB 읽기를 1MB가 될 때까지 버퍼링함) 파이프 크기가 증가할 경우를 대비하여 미래에도 사용 가능함. 일부netcat
버전에는 입력 및 출력 블록 크기를 제어하는 옵션이 있어dd bs=X
사용 필요성을 줄여주지만, 구조 복구 디스크에서는 이러한 옵션이 없는netcat
바이너리가 보통 사용됨.
- 목적지 노트북에서는
-
nbdkit
과nbdcopy
를 사용하는 것이 훨씬 간단함.-
nbdkit file /dev/nvme0n1
-
nbdcopy nbd://otherlaptop localfile
-
-
새 노트북을 설정해야 했을 때, USB-C 케이블을 사용하여 10Gb/s로 전송하는 것이 유용함. 다른 옵션으로는 WiFi밖에 없었음.
- 컴퓨터를 연결하면 애드혹 네트워크가 형성되고
rsync
를 사용하여 전송 가능. 링크가 포화된 것으로 보여 다른 프로토콜을 사용하는 것은 무의미함.
- 컴퓨터를 연결하면 애드혹 네트워크가 형성되고
-
최근에 WiFi를 통해 약 200GB의 파일을 복사해야 했음. 연결 실패 시 처음부터 다시 시작하지 않도록
rsync
를 사용했지만, 적어도 6시간이 걸림. 더 나은 방법이 궁금함.-
dd
방법으로 어떤 보장을 받는지? 결과 블록 레벨 장치의 md5를 비교해야 하는지?
-
-
저자가 왜 네트워크를 통해
btrfs
를 파이프하지 않았는지 이해할 수 없음. 먼저btrfs
스냅샷을 만든 다음btrfs send => nc => network => nc => btrfs receive
를 통해 사용 중인 블록만 전송함. -
이전에 노트북을 전송할 때 양쪽에서
dd
와nc
를 결합한 설치 프로그램을 실행했음. 기억나는 대로, 전송을 더 빠르게 하기 위해gzip
도 추가함.- 새 노트북에 이더넷 포트가 없어서 압축이 약간의 속도 향상을 제공했을 수 있어 저자의 방법보다 더 빨랐을 것임.
-
Clonezilla
를 사용하면 실제 데이터 블록만 복사하고 파티션을 자동으로 조정할 수 있음. 항상 이 방법을 사용함.- 일반적으로 NVMe 디스크를 노트북에서 꺼내고 고속 도크에 넣음.
-
수십 년 동안 실제로 OS를 "설치"하지 않았으며, 파일을 복사하고 필요에 따라 조정함. 보통 새 파일 시스템을 만들어 파일 시스템 유형/파라미터(예: 블록 크기), 암호화 등을 업데이트하는 기회로 사용하고 파일을
rsync
로 전송함.- 그럼에도 불구하고, 계획을 세우는 사람이라면
NixOS
와 같은 더 선언적인 접근 방식을 사용하는 것이 더 나을 수 있음. 여기서는 설정만 복사한 다음 모든 것을 자동으로 다시 설치할 수 있음.
- 그럼에도 불구하고, 계획을 세우는 사람이라면
-
FDT(Fast Data Transfer)에 대한 언급이 없음.
- 불행히도 Java로 작성된 놀라운 소프트웨어(전송 성능 측면에서). 직관적이지 않은 CLI 옵션을 가지고 있지만, 본 적 있는 가장 빠른 전송임.
- 너무 빨라서 속도를 인위적으로 제한하지 않으면 때때로 전체 로컬 네트워크를 점유함.
-
-limit <rate>
옵션으로 전송 속도를 지정된 속도로 제한할 수 있음. K(KiloBytes/s), M(MegaBytes/s), G(GigaBytes/s)를 접미사로 사용할 수 있음. - 목적지에서 파일 조각화를 일으키지만, 실제로는 아무에게도 중요하지 않음.