저는 대학원생이고 제가 일하는 그룹에서는 Linux 클러스터를 유지관리하고 있습니다. 클러스터의 각 노드에는 자체 로컬 디스크가 있지만 이러한 로컬 디스크는 상대적으로 크기가 작고 자동 백업 기능을 갖추고 있지 않습니다. 따라서 팀에는 수 테라바이트의 저장 공간을 갖춘 파일 서버가 있습니다. 저는 Linux를 처음 접한 초보자이기 때문에 속도, 네트워크 기능 등의 측면에서 파일 서버의 사양이 무엇인지 잘 모르겠습니다. I/O 측면에서 로컬 디스크가 파일 서버보다 훨씬 빠르다는 것을 경험을 통해 알고 있습니다. 파일 서버를 사용하는 사람은 12명 정도입니다.
cp
파일 서버에서 로컬 디스크 중 하나로 약 20GB의 파일을 복사하는 데 평균 실제 시간은 약 11.5분이 걸립니다(에 따르면 time
). 나는 이 cp
작업이 그다지 효율적이지 않다는 것을 알고 있습니다. 왜냐하면 (1) time
그러한 복사에 대한 시스템 시간이 단지 ~45초라는 것을 알려주기 때문입니다. 왜냐하면 (2) top
복사하는 동안 확인할 때,%CPU매우 낮음(검사 결과 대략적으로0-10%일반적으로).
동일한 ~20GB 파일을 로컬 디스크의 한 폴더에서 동일한 로컬 디스크의 다른 폴더로 복사하는 데는 cp
시간이 더 적게 걸립니다. 실시간으로 약 9분(시스템 시간을 기준으로 최대 51초 time
)이 소요됩니다. 분명히 예상한 대로 파일 서버는 로컬 디스크보다 약간 느리지만 크게 느리지는 않을 것입니다. 로컬에서 동일한 로컬로 복사하는 데 9분 이상 걸리지 않는다는 사실에 놀랐습니다.
파일 서버에서 로컬 디스크 중 하나로 약 200개의 대용량 파일(각각 약 20GB)을 복사해야 합니다. 그래서 내 질문은 다음과 같습니다.cp
Linux에서 대용량 파일을 복사하는 것보다 더 빠른 대안이 있습니까? (또는 cp
복사 속도를 높이기 위해 거기에 있는 플래그 중 하나를 사용할 수 있습니까?) 복사 시간을 1분 정도 단축할 수 있다고 해도 많은 도움이 될 것입니다.
더 빠른 새 하드웨어 디스크를 구입할 것이라고 확신하지만 그러한 리소스에 액세스할 수 없습니다. 저는 또한 시스템 관리자가 아닙니다. 저는 단지 (초보) 사용자이기 때문에 디스크 로드에 대한 자세한 정보에 액세스할 수 없습니다. 매일 약 12명 정도의 사람들이 파일 서버를 사용하는 동안 이 특정 노드/로컬 디스크를 사용하는 사람은 나뿐이라는 것을 알고 있습니다.
답변1
%CPU~해야 한다복사하는 동안 낮은 상태를 유지하십시오. CPU는 디스크 컨트롤러에 "XY 섹터 데이터를 Z의 메모리 버퍼로 가져오세요"라고 지시합니다. 그런 다음 다른 일을 하러 갑니다(또는 다른 일이 없다면 잠을 자고). 데이터가 메모리에 있으면 하드웨어가 인터럽트를 트리거합니다. 그런 다음 CPU는 몇 번 복사하고 네트워크 카드에 "메모리 위치 A, B 및 C에서 패킷을 보내십시오"라고 지시합니다. 그런 다음 다시 다른 일을 하십시오.
~ 240mbps를 추진하고 있습니다. 기가비트 LAN에서는 최소 800mbps를 달성할 수 있지만:
- 이는 파일 서버를 사용하는 모든 사람(및 스위치 간 연결 등) 간에 공유됩니다.
- 이는 파일 서버가 쓰기를 처리할 수 있는 속도에 따라 제한되며, 디스크 I/O 대역폭은 이를 사용하는 모든 사람이 공유한다는 점을 기억하세요.
- 파일 서버(NFS, CIFS(Samba), AFS 등)에 액세스하는 방법을 지정하지 않았습니다. 네트워크 설치를 조정해야 할 수도 있지만 최근의 경우 일반적으로 기본값이 꽤 합리적입니다.
이는 병목 현상을 추적하는 데 iostat -kx 10
유용한 명령입니다 . 로컬 하드 드라이브의 활용도를 보여줍니다. 파일 서버에서 실행할 수 있으면 파일 서버가 얼마나 바쁜지 알려줍니다.
일반적인 해결책은 이 병목 현상의 속도를 높이는 것이지만, 물론 예산이 없습니다. 그러나 특별한 경우에는 더 빠른 방법을 찾을 수 있습니다.
- 파일이 압축 가능하고 CPU 속도가 빠르다면 다음을 수행하십시오.가장 작은실시간 압축이 더 빠를 수 있습니다. 비슷
lzop
하거나 어쩌면gzip --fastest
. - 여기저기서 몇 비트만 변경한 다음 파일을 다시 보내면 델타만 보내는 것이 훨씬 빠릅니다. 불행하게도
rsync
델타를 찾으려면 양쪽에서 파일을 읽어야 하므로 실제로 도움이 되지 않습니다. 대신 파일이 변경될 때 델타를 추적하는 것이 필요합니다. 여기에 있는 대부분의 방법은 응용 프로그램에 따라 다릅니다. 하지만 장치 매퍼를 사용할 수도 있습니다(새 항목 참조).DM 시대의 목표) 또는 btrfs. - 동일한 데이터를 복사하면많은 종류의컴퓨터의 경우 udpcast와 같은 것을 사용하여 한꺼번에 보낼 수 있습니다.
그리고 자신이 시스템 관리자가 아니라는 사실을 알아차렸으니 이는 시스템 관리자가 있다는 뜻인 것 같습니다. 아니면 적어도 누군가가 파일 서버와 네트워크를 책임지고 있습니다. 당신은 아마도 그/그녀/그들에게 물어봐야 할 것이고 그들은 당신의 설정에 대해 더 잘 알고 있을 것입니다. 시스템 관리자는 최소한 합리적으로 기대할 수 있는 전송 속도를 알려줄 수 있어야 합니다.
답변2
이것이 더 빠른 대안일 수 있으며 이틀 동안 네트워크를 방해하지 않습니다. 대용량 USB(있는 경우 USB 3) 또는 FireWire 디스크를 한두 개 가져와 서버에 연결하고 파일을 디스크에 복사합니다. 디스크를 로컬 컴퓨터로 가져가세요. 파일을 컴퓨터에 복사합니다.
답변3
scp
직접 SSH(또는 SFTP) 액세스 권한이 있는 경우(시스템 관리자에게 문의) 압축( )을 사용할 수 있습니다 -C
.
scp -C you@server:/path/to/yourfile .
물론 이는 파일이 압축 가능한 경우에만 작동하며 암호화(SSH를 사용하므로) 및 압축을 사용하므로 더 많은 CPU 시간을 사용합니다.
답변4
효율성에 대한 당신의 정의는 거꾸로입니다. 보다 효과적인 폐기물 처리더 적은CPU 시간. 로컬 복제본에서 평균 처리량은 약 74MB/s(읽기 + 쓰기)이며 이는 단일 하드 드라이브와 거의 같습니다.