일부 디스크를 회수한 후 결과(몇 테라바이트의 디스크 이미지)를 LNDS(로컬 네트워크 데이터 저장소)의 파일로 대상 디스크에 복사했습니다. 일반적으로 대상 디스크의 파일 시스템은 NTFS입니다. LNDS는 600MB/s(10Gbit 네트워크에서) 이상의 속도로 나에게 데이터를 전달할 수 있습니다. 대상 디스크는 150MB/s 이상의 지속 속도로 데이터를 저장할 수 있습니다. 그러나 서버에서 대상 디스크 파일 시스템으로 파일을 복사하는 속도는 60-80MB/s로 엄청나게 느립니다. 오늘은 두 가지를 준비하라는 요청을 받았습니다. 저는 tee 명령을 사용하여 두 개의 대상을 지정했습니다.
dd if=/servermount/path/file.img bs=8192 |tee /localmount/target1/file.img >/localmount/target2/file.img
( cp
포크할 수 없음 tee
) 하지만 놀랍게도 복사 속도는 약 40MB/s에 불과합니다. 나는 즉시 트래픽 분석을 시작했습니다. 네트워크는 40MB/s의 지속적인 속도로 데이터를 로드하고 있었고 두 디스크 모두 최대 160MB/s의 속도로 쓰고 있었지만 쓰기에 소요된 시간은 25% 미만이었습니다.
찾아보니 top
CPU가 두 mount.ntfs
프로세스(각각 40% 이상)에서 대부분의 시간을 소비하고 tee
CPU 시간의 약 30%를 차지하는 것으로 나타났습니다.
또한 역방향 프로세스도 시도했습니다. 워크스테이션에서 삼바 서버를 시작하고 두 대상을 모두 공유로 추가한 다음 서버의 데이터를 두 디스크로 보냈습니다. 일반 속도가 66~69MB/s로 증가하고 mount.ntfs 프로세스가 CPU 시간의 약 7%만 차지한다는 사실에 다시 한번 놀랐습니다.
밀어넣는 그물과 당기는 그물 사이에 왜 이렇게 큰 차이가 있고, 예상과 다른 방식이 있는지 이해가 되지 않습니다.
모든 bash 명령이 사용하기에 적합한 것은 아닙니다 tee
. dd
대상이 /dev/null
650-700MB/s의 속도인 경우. 물리적 디스크를 두 개의 다른 phy.disk에 복사하면(두 개의 디스크 이미지를 복제하든지 생성하든) 복사 속도는 120MB/s가 넘고 대상이 서버(LNDS)에 있으면 동일한 속도를 얻습니다.
누군가 내가 뭘 잘못하고 있는지 설명할 수 있나요? LNDS에서 두 개의 로컬 디스크로 대용량 파일을 복사하는 데 더 적합한 몇 가지 복사 명령이 있습니까?
답변1
인터넷에서 찾은 몇 가지 팁을 시도해 보았습니다.
다음 옵션을 사용하여 NTFS를 마운트하는 것이 좋습니다 big_writes
. CPU 부하가 40%에서 5-7%로 감소한다는 점은 인정할 수 있습니다. 그러나 주요 질문은 이전에 표시된 dd
명령의 처리량이 40MB/s 미만이고 이 문제가 여전히 존재하는 이유입니다.
다음 팁은 다음과 같이 두 개의 개별 프로세스를 동시에 사용하여 소스를 첫 번째 대상에 복사하고 동일한 소스를 두 번째 대상에 복사하는 것입니다.
# (cp /servermount/path/file.img /localmount/target1/)&
# (cp /servermount/path/file.img /localmount/target2/)&
이는 두 개의 콘솔에서 전송되거나 백그라운드 프로세스를 사용하여 단일 콘솔에서 전송될 수 있습니다.
놀랍게도 네트워크는 110MB/s 이상을 유지했으며 두 디스크에 대한 쓰기는 약 50-70% 듀티 사이클로 170MB/s 이상으로 거의 동기화되었습니다.
글쎄, 몇 가지 해결책을 찾았습니다. 이렇게 좋은 디스크 버퍼 관리와 "우리를 위해 창의적으로 생각"할 수 있는 능력을 갖춘 운영 체제가 있다는 것은 아마도 좋은 기능일 것입니다. 그러나 반면에 저는 합리적인 기대와 정반대로 행동하는 운영 체제를 이해할 수 없습니다. dd
물리적 디스크의 동일한 명령 도 완벽하게 작동합니다.
내 의견을 묵묵히 표현했다는 이유로 더 이상 처벌을 받지 않기를 바랍니다.